DockerでConcourse CIを動かしてみた

f:id:section27:20170513233529p:plain

 Docker Repositoryに書いてあるのと同様ですが、https://github.com/PigumerGroup/sbt-aws-cloudformationを例に手順を説明します。

1. キーを作成し、web と worker の信頼関係を構築します

mkdir -p keys/web keys/worker

ssh-keygen -t rsa -f ./keys/web/tsa_host_key -N ''
ssh-keygen -t rsa -f ./keys/web/session_signing_key -N ''

ssh-keygen -t rsa -f ./keys/worker/worker_key -N ''

cp ./keys/worker/worker_key.pub ./keys/web/authorized_worker_keys
cp ./keys/web/tsa_host_key.pub ./keys/worker
  • keysに作成したキーがあります。

2. docker-compose の設定

docker-compose.yaml を記述します

concourse-db:
  image: postgres:9.5
  environment:
    POSTGRES_DB: concourse
    POSTGRES_USER: concourse
    POSTGRES_PASSWORD: changeme
    PGDATA: /database

concourse-web:
  image: concourse/concourse
  links: [concourse-db]
  command: web
  ports: ["8080:8080"]
  volumes: ["./keys/web:/concourse-keys"]
  environment:
    CONCOURSE_BASIC_AUTH_USERNAME: concourse
    CONCOURSE_BASIC_AUTH_PASSWORD: changeme
    CONCOURSE_EXTERNAL_URL: "${CONCOURSE_EXTERNAL_URL}"
    CONCOURSE_POSTGRES_DATA_SOURCE: |-
      postgres://concourse:changeme@concourse-db:5432/concourse?sslmode=disable

concourse-worker:
  image: concourse/concourse
  privileged: true
  links: [concourse-web]
  command: worker
  volumes: ["./keys/worker:/concourse-keys"]
  environment:
    CONCOURSE_TSA_HOST: concourse-web

3. docker-compose コマンドを使って起動します

次のようなイメージでdocker-compose.yamlのあるディレクリに移動します

cd concourseci

起動するとき、各Dockerが通信を行うため、webの${CONCOURSE_EXTERNAL_URL}には、http://127.0.0.1:8080http://loalhost:8080のようなアドレスを使用することはできません。PCに割り当てられたIPアドレス等を使用するようにします。

PCに割り当てられたIPアドレスが192.168.0.1だとすると次のようになります。

CONCOURSE_EXTERNAL_URL=http://192.168.0.1:8080 docker-compose up -d

4. ブラウザでアクセス

http://localhost:8080 にアクセスしてみてください。下のような画面が開きます。この画面で使用しているOSのflyコマンドをダウンロードします。

f:id:section27:20170513235652p:plain

5. タスクの動作確認

fly execute を使って、タスクの動作を確認することができます。

プロジェクトルートをカレントディレクトリにしておきます。

まず、fly login でログインします。この例では、username は concourse, password は changeme です。

  fly -t concourseci login -c http://192.168.0.1:8080

ここでのタスク例は、AWS S3やAWS CloudFormationへのアクセスが必要となるため、AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY が必要です。aws-cli を使っている場合は、~/.aws/credentials に記述されています。

AWS_ACCESS_KEY_ID=<YOUR AWS ACCESS KEY ID> AWS_SECRET_ACCESS_KEY=<YOUR SECRET ACCESS KEY> \
  fly -t concourseci execute \
  -c ci/build.yaml \
  -i sbt-aws-cloudformation-src=.

Docker for Mac を使っていてうまく動かないなというときは、aufs driverを試してみてください

Docker → Preferences → Daemon → Advanced を次のように設定します

{
  "storage-driver" : "aufs"
}

6. パイプラインの登録

パイプラインの登録は次の通りです。

fly -t concourseci set-pipeline \
  -p sbt-aws-cloudformation \
  -c ci/buildPipeline.yaml \
  -v 'AWS_ACCESS_KEY_ID=<YOUR AWS ACCESS KEY ID>'
  -v 'AWS_SECRET_ACCESS_KEY=<YOUR SECRET KEY>'

pause を解除します

fly -t concourseci unpause-pipeline \
  -p sbt-aws-cloudformation

7. パイプラインの実行

ブラウザを開き、右上のloginのリンクを使ってログインします。チームはmainを選択します。

f:id:section27:20170514001036p:plain

sbt-aws-cloudformation をクリックします

f:id:section27:20170514001615p:plain

右上の + のボタンをクリックすると、パイプラインの実行が開始します

f:id:section27:20170514001818p:plain

f:id:section27:20170514004624p:plain