目次
Concourse CIとは
- Simple
- Scalable
- Reproducable
が売りのパイプラインベースCIです。Pivotalが開発しており、Go言語で書かれています。
元々はCloud FoundryのCI/CD用に作られましたが、単独のCI/CDツールとして汎用的に使用できます。
Thought WorksのTechnology Radarでも2015 NovからASSESS(検討の価値あり)に位置付けられています。
他のCI/CDツールとの違い
JenkinsやTravis CI、GoCDとの違いはこちら。
Concourse CIではYAMLで簡単にジョブ、パイプラインを記述でき、簡単にスケールでき、結果をUIで視覚的に見ることができます。
Cloud Foundryくらいの大規模プロジェクトになるるとJenkinsの設定方法ではメンテナンス・運用が難しくなったため、このツールが開発されました。
(2016 AprのTechnology RadarではJenkins as a deployment pipelineがHOLD(使うなら気をつけろ)に位置付けられています。)
Cloud Foundryのリリースのパイプラインは公開されていています。
https://runtime.ci.cf-app.com/pipelines/cf-release
Concourse CIを使うことにより、ジョブ間の依存関係やどこで問題が発生しているのかを視覚的に把握することができます。
アーキテクチャ
超簡易アーキテクチャを下図に示します。Worker部分でタスクが実行され、ここはスケールアウト可能です。
WorkerではCloud Foundry内部で利用されているGardenというコンテナマネージャーが使われており、その上でDockerイメージを用いてタスクをコンテナ上で実行します。
コンセプト
Concourse CIのパイプラインは以下の三つのコンセプトからなります。
- Tasks
- Resources
- Jobs
です。
Taskは任意のスクリプトを隔離された環境で実行します。実際にはスクリプトの実行はDockerコンテナ上で行われます。
Resourceはバージョンチェック、プル(≒ダウンロード)、プッシュ(≒アップロード)できる任意の抽象的な存在です。例えば、Git Resource、S3 Resource、Docker Image Resourceが用意されています。またプッシュしかできないCloud Foundry Resourceや、より抽象的なTime Resourceもあります。
ResourceはJobのinput、outputとして利用可能です。プルしたものをinputとして使い、outputをプッシュすることができます。
JobはResourceとTaskを組み合わせ何かを行います。ジョブはResourceのバージョンアップをトリガーにして実行することもできますし、手動で実行することもできます。Jobは前段のJobに依存することができるため、Jobをつなげてパイプラインを構築することができます。
次のパイプラインを見てみましょう。
job-unit-testing
とdeploy-to-pws
がJobです。deploy-to-pws
はjob-unit-testing
に依存しています。
Jobの間のブロックがResourceです。
GitHubのソース(GitHub Resource)をプルして、job-unit-testing
JobでユニットテストのTaskを実行し、deploy-to-pws
JobでPivotal Web Services(CF Resource)にアプリケーションをプッシュしています。
なお、TaskはJobのブロックの中です(クリックすると見ることができます)。
インストール方法
Consource CIのインストール方法は
の4種類があります。
ちょっと試すならVagrant、軽く運用するならDocker Compose、ちゃんと運用するならBOSHが良いでしょう。
パイプラインの設定ファイルは一度作成すればどこでも再利用できるので、Vagrantを使ってローカルで試したパイプラインをそのまま別の環境でも動かせます。
ここでは最も簡単なVagrantを使う方法を紹介します。
に書きました。
$ mkdir concourse
$ cd concourse
$ vagrant init concourse/lite
$ vagrant up
でConcourse CIのセットアップは完了です。
http://192.168.100.4:8080にアクセスしてください。
CLIのダウンロードリンクが表示されるので、対象のOSのアイコンをクリックし、ダウンロードしたファイルの名前をfly
にrenameし、パスの通ったフォルダに移動してください。
fly
コマンドが使えるようになったら、ログインしましょう。
$ fly -t lite login -c http://192.168.100.4:8080
target saved
はじめてのConcourse CI
Hello Worldパイプラインを試してみましょう。
hello.yml
を作成して、次の内容を記述してください。
jobs:
- name: hello-world
plan:
- task: say-hello
config:
platform: linux
image_resource:
type: docker-image
source:
repository: ubuntu
run:
path: bash
args:
- -c
- |
echo "Hello, world!"
fly
コマンドを使ってパイプラインを設定します。
$ fly -t lite set-pipeline -p hello -c hello.yml
パイプラインを有効にします。
$ fly -t lite unpause-pipeline -p hello
hello-world
ジョブを実行しましょう。
$ fly -t lite trigger-job -j hello/hello-world --watch
started hello/hello-world #1
initializing
running bash -c echo "Hello, world!"
Hello, world!
succeeded
長くなったので次の記事に分けます。改めて1から学びましょう。
本記事の画像は同僚の@The_Shinji62から拝借しました。