concourse-ciの環境構築(Mac編)
はじめに
concourse-ciはパイプラインベースのCIツールです。
YAMLで処理を定義して、実行と実行結果についてはWebで確認が出来ます。
ここでは、ローカルのMac上での環境構築を適当に纏めています。
環境
- Mac os x HighSierra
- Docker Desktop for Mac Version 2.0.0.3
- concourse/concourse 5.0.1
構築
docker-composeを利用して構築を行います。
今回は、タスクの実行環境はlinuxとdarwinを使用出来るようにします。
linuxはDockerイメージを利用したい時に利用していて、
darwinはMac上でしか実行出来ないとかDockerだと面倒な時に利用しています。
docker-compose.ymlの作成
version: '3'
services:
concourse-db:
image: postgres
environment:
POSTGRES_DB: concourse
POSTGRES_USER:
POSTGRES_PASSWORD:
PGDATA: /database
concourse-web:
image: concourse/concourse
command: web
privileged: true
depends_on: [concourse-db]
volumes: ["./keys/web:/concourse-keys"]
ports: ["8080:8080","2222:2222"]
environment:
CONCOURSE_POSTGRES_HOST: concourse-db
CONCOURSE_POSTGRES_USER:
CONCOURSE_POSTGRES_PASSWORD:
CONCOURSE_POSTGRES_DATABASE: concourse
CONCOURSE_EXTERNAL_URL: http://localhost:8080
CONCOURSE_ADD_LOCAL_USER: test:test
CONCOURSE_MAIN_TEAM_LOCAL_USER: test
concourse-worker:
image: concourse/concourse
command: worker
privileged: true
depends_on: [concourse-web]
volumes: ["./keys/worker:/concourse-keys"]
environment:
CONCOURSE_TSA_HOST: concourse-web:2222
.envの作成
環境毎の設定やログイン情報を設定
POSTGRES_USER=concourse_user
POSTGRES_PASSWORD=concourse_pass
CONCOURSE_POSTGRES_USER=concourse_user
CONCOURSE_POSTGRES_PASSWORD=concourse_pass
CONCOURSE_ADD_LOCAL_USER=test:test
ssh-keyの作成
concourse-ciで使用するssh-key
を作成します。
必要なKeyを作成するshellが用意されているので使用します。
https://github.com/concourse/concourse-docker/blob/master/generate-keys.sh
$ sh generate-keys.sh --use-pem
--use-pem
がないと、以下のエラーを吐いて起動してくれない
https://github.com/concourse/concourse/issues/2590
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xf726f5]
goroutine 1 [running]:
crypto/rsa.(*PrivateKey).Public(0x0, 0x0, 0x0)
/usr/local/go/src/crypto/rsa/rsa.go:100 +0x5
golang.org/x/crypto/ssh.NewSignerFromSigner(0x7f6f930c8320, 0xc00000ea78, 0xc00000ea78, 0x7f6f930c8320, 0xc00000ea78, 0xe18e01)
/tmp/build/9674af12/concourse/src/golang.org/x/crypto/ssh/keys.go:681 +0x35
golang.org/x/crypto/ssh.NewSignerFromKey(0x2924340, 0xc00000ea78, 0xe18e08, 0x30, 0x2a085a0, 0xc000c3b778)
/tmp/build/9674af12/concourse/src/golang.org/x/crypto/ssh/keys.go:656 +0x16a
github.com/concourse/tsa/tsacmd.(*TSACommand).configureSSHServer(0xc000ef8e70, 0xc000639080, 0xc00015cd70, 0x1, 0x1, 0x0, 0x0, 0x0, 0xc00019a620, 0x7, ...)
/tmp/build/9674af12/concourse/src/github.com/concourse/tsa/tsacmd/command.go:197 +0x167
...
起動
docker-composeで起動させます。
起動して、localhost:8080にアクセス出来たら成功
├── .env
├── docker-compose.yml
├── generate-keys.sh
└── keys
├── web
│ ├── authorized_worker_keys
│ ├── session_signing_key
│ ├── session_signing_key.pub
│ ├── tsa_host_key
│ └── tsa_host_key.pub
└── worker
├── tsa_host_key.pub
├── worker_key
└── worker_key.pub
$ docker-compose up -d
Creating network "concourse_default" with the default driver
Creating concourse_concourse-db_1 ... done
Creating concourse_concourse-web_1 ... done
Creating concourse_concourse-worker_1 ... done
停止または削除
docker-composeの停止させます。
$ docker-compose stop
$ docker-compose down
##flyのインストール
concourse-ciでは、パイプラインの実行はWEBから操作出来ますが登録や削除などはFlyというCLIツールを使って行います。
以下の場所からダウンロードしてください。
https://concourse-ci.org/download.html
あとは任意の場所に置いてパスを通してください。
$ wget https://github.com/concourse/concourse/releases/download/v5.0.1/fly-5.0.1-darwin-amd64.tgz
$ tar zxvf fly-5.0.1-darwin-amd64.tgz
$ ./fly --version
5.0.1
flyを使うには、ログインする必要がありますが、ブラウザを使ってログインする必要があります。
以下のコマンドを叩いて、表示されたURLでログインすればflyコマンドが使えるようになります。
$ ./fly -t tutorial login -c http://localhost:8080
logging in to team 'main'
navigate to the following URL in your browser:
http://localhost:8080/login?fly_port=59005
or enter token manually:
target saved
tutorial
は任意のターゲット名を指定しています。
##Macのworkerを構築
workerを起動させる為にはconcourse-ciをMacにインストールさせる必要があります。
以下の場所からダウンロードしてください。
https://concourse-ci.org/download.html
あとは任意の場所に置いてパスを通してください。
$ wget https://github.com/concourse/concourse/releases/download/v5.0.1/concourse-5.0.1-darwin-amd64.tgz
$ tar zxvf concourse-5.0.1-darwin-amd64.tgz
$ sudo concourse/bin/concourse worker --work-dir /opt/concourse/worker --tsa-host 127.0.0.1:2222 --tsa-public-key ./keys/worker/tsa_host_key.pub --tsa-worker-private-key ./keys/worker/worker_key
{"timestamp":"2019-03-27T08:28:51.806578000Z","level":"info","source":"baggageclaim","message":"baggageclaim.listening","data":{"addr":"127.0.0.1:7788"}}
{"timestamp":"2019-03-27T08:28:51.806565000Z","level":"info","source":"worker","message":"worker.garden.started","data":{"session":"1"}}
{"timestamp":"2019-03-27T08:28:51.843553000Z","level":"info","source":"worker","message":"worker.beacon-runner.beacon.registered","data":{"session":"9.1"}}
concourse-ciがdockerで起動していなかったり、接続情報が間違っているとエラーを吐き出していると思います。
{"timestamp":"2019-03-27T08:32:15.293364000Z","level":"info","source":"worker","message":"worker.garden.started","data":{"session":"1"}}
{"timestamp":"2019-03-27T08:32:15.293453000Z","level":"info","source":"baggageclaim","message":"baggageclaim.listening","data":{"addr":"127.0.0.1:7788"}}
{"timestamp":"2019-03-27T08:32:15.293484000Z","level":"error","source":"worker","message":"worker.beacon-runner.beacon.failed-to-connect-to-tsa","data":{"error":"dial tcp 127.0.0.1:2222: connect: connection refused","session":"9.1"}}
{"timestamp":"2019-03-27T08:32:15.293673000Z","level":"error","source":"worker","message":"worker.beacon-runner.beacon.dial.failed-to-connect-to-any-tsa","data":{"error":"all worker SSH gateways unreachable","session":"9.1.1"}}
{"timestamp":"2019-03-27T08:32:15.293707000Z","level":"error","source":"worker","message":"worker.beacon-runner.beacon.failed-to-dial","data":{"error":"all worker SSH gateways unreachable","session":"9.1"}}
{"timestamp":"2019-03-27T08:32:15.293747000Z","level":"error","source":"worker","message":"worker.beacon-runner.beacon.exited-with-error","data":{"error":"all worker SSH gateways unreachable","session":"9.1"}}
{"timestamp":"2019-03-27T08:32:15.293808000Z","level":"error","source":"worker","message":"worker.beacon-runner.failed","data":{"error":"all worker SSH gateways unreachable","session":"9"}}
###起動の確認
以下のコマンドで、platform
にdarwin
が追加されてれば大丈夫
$ fly -t tutorial workers
name containers platform tags team state version
d06145c75abb 0 linux none none running 2.1
hostname.local 0 darwin none none running 2.1
これで、一旦concourse-ci
が使える状態になったので使い方を別記事で書くかも
##参考