CI
docker
Concourse
ConcourseCI

Concourse CIの環境構築手順

More than 1 year has passed since last update.

概要

Concourse CIの環境構築手順です。

関連記事

環境

  • CentOS 7.2
  • kernel 4.12.4-1.el7.elrepo.x86_64
  • fly 3.3.4
  • docker 17.05.0-ce
  • docker-compose version 1.15.0

必要要件

以下にあるように、Concourse CIを使うためには、kernelのバージョンは、v3.19以上である必要があります。
uname -r コマンドで、kernelのバージョンを確認してください。

https://concourse.ci/single-page.html

For Linux you'll need kernel v3.19 or later, with user namespace support enabled. Windows and Darwin don't really need anything special.

もし、バージョンが低い場合は、以下を参考にして、アップデートしてください。
VagrantのCentOS7のカーネルを更新(yum)

追記
kernelをupdateするためのシェルスクリプトを作成しました。
こちらを実行すれば、カーネルがアップデートされます。
CentOS7.2でしか動作検証していません。
https://github.com/Esfahan/kernel-updater

docker-composeのインストール

こちらを参照
docker(docker-engine), docker-composeのインストール

docker-compose.ymlを作成

任意の場所に、docker-compose.ymlを作成してください。

docker-compose.yml
version: '3'

services:
  concourse-db:
    image: postgres:9.5
    environment:
      POSTGRES_DB: concourse
      POSTGRES_USER: "${CONCOURSE_POSTGRES_USER}"
      POSTGRES_PASSWORD: "${CONCOURSE_POSTGRES_PASSWORD}"
      PGDATA: /database

  concourse-web:
    image: concourse/concourse
    links: [concourse-db]
    command: web
    depends_on: [concourse-db]
    ports: ["8080:8080"]
    volumes: ["./keys/web:/concourse-keys"]
    restart: unless-stopped # required so that it retries until conocurse-db comes up
    environment:
      CONCOURSE_BASIC_AUTH_USERNAME: "${CONCOURSE_BASIC_AUTH_USERNAME}"
      CONCOURSE_BASIC_AUTH_PASSWORD: "${CONCOURSE_BASIC_AUTH_PASSWORD}"
      CONCOURSE_EXTERNAL_URL: "${CONCOURSE_EXTERNAL_URL}"
      CONCOURSE_POSTGRES_HOST: concourse-db
      CONCOURSE_POSTGRES_USER: "${CONCOURSE_POSTGRES_USER}"
      CONCOURSE_POSTGRES_PASSWORD: "${CONCOURSE_POSTGRES_PASSWORD}"
      CONCOURSE_POSTGRES_DATABASE: concourse

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

.envの作成

CONCOURSE_EXTERNAL_URL にブラウザからアクセスできるURLをセットします。
127.0.0.1 or localhostではダメです。
CONCOURSE_BASIC_AUTH_USERNAME , CONCOURSE_BASIC_AUTH_PASSWORD には、
ConcourseCIにログインするためのアカウントを設定します。
CONCOURSE_POSTGRES_USER , CONCOURSE_POSTGRES_PASSWORD には、postgresのアカウントを設定します。

以下のような.envを作成します。

.env
CONCOURSE_BASIC_AUTH_USERNAME=concourse
CONCOURSE_BASIC_AUTH_PASSWORD=changeme
CONCOURSE_EXTERNAL_URL=http://192.168.33.10:8080
CONCOURSE_POSTGRES_USER=concourse
CONCOURSE_POSTGRES_PASSWORD=changeme

ssh-keyを作成

webとworkerのためにキーを作成。
docker-compose.ymlと同じ階層で実行します。

$ 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

docker-compose

$ docker-compose up -d --build

ブラウザでアクセス

http://192.168.33.10:8080

f19e3022d995da01d350220100bed8ac.png

CLIのインストール

http://192.168.33.10:8080
で表示されるページの以下の3つのアイコンが、それぞれ、mac, windows, linux用のcliのダウンロードリンクになっているので、環境にあったものをダウンロードするか、

f880efe45c135a80605bb01ac35a4b8d.png

こちらのリンク先の、Fly Binariesからダウンロードします。
https://concourse.ci/downloads.html

$ curl -L https://github.com/concourse/concourse/releases/download/v3.5.0/fly_linux_amd64 > /tmp/fly
$ sudo mv /tmp/fly /usr/local/bin/fly
$ sudo chmod 775 /usr/local/bin/fly

login

http://192.168.33.10:8080 にログインします。
アカウントは、.envで設定した、以下のものになります。

.env
CONCOURSE_BASIC_AUTH_USERNAME=concourse
CONCOURSE_BASIC_AUTH_PASSWORD=changeme
$ fly -t concourseci login -c http://192.168.33.10:8080

login時に、以下のようなメッセージが出る場合は、最新版のflyをインストールしなおしてください。

fly version (3.4.1) is out of sync with the target (3.5.0). to sync up, run the following:

    fly -t rails-sample sync

https://concourse.ci/fly-cli.html
List the current targets

$ fly targets
name         url                        team  expiry
concourseci  http://192.168.33.10:8080  main  Sat, 05 Aug 2017 03:46:25 UTC

動作確認

パイプラインをセットして、動作確認をします。

flight-schoolのサンプルを使ってpipelineを作成してみます。
railsアプリケーションになります。

pipeline.yml
---
resources:
- name: flight-school
  type: git
  source:
    uri: https://github.com/concourse/flight-school
    branch: master

jobs:
- name: test
  plan:
  - get: flight-school
    # Resourceに変更があれば自動でジョブを実行するかどうか
    trigger: true
  - task: run-tests
    config:
      platform: linux
      image_resource:
        type: docker-image
        source:
          repository: ruby
      inputs:
      - name: flight-school
      run:
        path: /bin/bash
        args:
        - -c
        - |
          cd flight-school
          bundle install
          bundle exec rspec

pipelineをセットします。

$ fly -t concourseci set-pipeline -c pipeline.yml -p flight-school
resources:
  resource flight-school has been added:
    name: flight-school
    type: git
    source:
      branch: master
      uri: https://github.com/concourse/flight-school

jobs:
  job test has been added:
    name: test
    plan:
    - get: flight-school
    - task: run-tests
      config:
        platform: linux
        image_resource:
          type: docker-image
          source:
            repository: ruby
          params: {}
        run:
          path: /bin/bash
          args:
          - -c
          - |
            cd flight-school
            bundle install
            bundle exec rspec
          dir: ""
        inputs:
        - name: flight-school
          path: ""

apply configuration? [yN]: y
pipeline created!
you can view your pipeline here: http://192.168.33.10:8080/teams/main/pipelines/flight-school

the pipeline is currently paused. to unpause, either:
  - run the unpause-pipeline command
  - click play next to the pipeline in the web ui

パイプラインを有効にします。

$ fly -t concourseci unpause-pipeline -p flight-school
unpaused 'flight-school'

jobを実行

コマンドラインで実行する場合

$ fly -t concourseci trigger-job -j flight-school/test --watch

web画面で実行する場合

http://192.168.33.10:8080

右上のloginをクリック -> 画面中央のmainをクリックして、以下の画面が表示されたら、.envで設定したアカウントを入力してください。

.env
CONCOURSE_BASIC_AUTH_USERNAME=concourse
CONCOURSE_BASIC_AUTH_PASSWORD=changeme

19ff2a52fd25bcd3198c9907fc7874f2.png

ログインしたら、以下の画面が表示されるので、testをクリックしてください。

b4af30637a76d996bd8e7ecfcc9ed50e.png

以下の画面が表示されたら、右上の + ボタンをクリックしてください。ビルドが始まります。

30f4ddb62e38a90c110ff2c43f16bfb8.png

ビルドが始まると、こんな感じになります。

d0e9918b78a983774d14fc66ab540e69.png

正常に完了すると、緑色になります。

52890a64207d0831c1e3c402160d5cf2.png

エラーが出ずに完了し、緑色になれば成功です。

以上

参考