目的
Concourseを用いてgitリポジトリとパイプラインの
連携を実現するための手段について説明します。
パイプラインの中でgitリポジトリの情報を取得する
以下のようなパイプラインを定義しました。
ただgitリポジトリの情報を参照しつつ、
タスクとしてuname -a
を実行するだけのパイプラインです。
resources:
- name: resource-repository
type: git
source:
uri: git@github.com:Fufuhu/concourse_sample.git
branch: master
private_key: ((ssh-key))
jobs:
- name: job-sample
plan:
- get: resource-repository
- task: task-sample
config:
platform: linux
image_resource:
type: docker-image
source:
repository: alpine
tag: 3.7
run:
path: /bin/sh
args:
- -c
- -x
- |
uname -a
gitリポジトリの情報を定義している部分は以下の部分です。
リソース(resources)としてgitのリソースを定義しています。
リソースを定義することでジョブの入力、または出力として
ジョブ自体の処理に必要な情報を提供したり、
ジョブの実行結果に応じて情報を出力したりといった設定が可能になります。
resources:
- name: resource-repository
type: git
source:
uri: git@github.com:Fufuhu/concourse_sample.git
branch: master
private_key: ((ssh-key))
ssh-keyの部分はgitリポジトリにアクセスする際のsshキー情報となるため、
別ファイルにyaml形式で記述しています。
jobs:
- name: job-sample
plan:
- get: resource-repository
job-sampleの中でジョブへの入力情報としてgitリポジトリ(resource-repository
)
を取得(get
)するよう定義しています。
パイプライン定義の投入と実行
$ fly -t home sp -p 02_pipeline_sample -c 02/02_pipeline_repository.yaml -l credentials.yaml
credentials.yaml
にgitリポジトリにアクセスするためのsshキー情報をyaml形式
で記述しています。
以下のような形でのパイプラインが表示されるようになりました。
リソース(resource-repository
)がジョブ(job-sample
)の入力に
なっているのがわかるかと思います。
しかし、これではただパイプラインにgitのリポジトリが入力として
含まれただけで、ジョブ内部のタスクからは参照できません。
しかし、ジョブ(job-sample
)を実行するとジョブ上では
リソース(resource-repository
)の情報が認識されていることがわかります。
次はジョブ内部に定義したタスクから参照する方法を記述します。
ジョブ内部のタスク(task-sample
)でリソース(resource-respository
)の情報を取得できるようにする
ジョブ内部のタスクからリポジトリの情報を取得できるように、
設定を変更しました。
resources:
- name: resource-repository
type: git
source:
uri: git@github.com:Fufuhu/concourse_sample.git
branch: master
private_key: ((ssh-key))
jobs:
- name: job-sample
plan:
- get: resource-repository
- task: task-sample
config:
platform: linux
image_resource:
type: docker-image
source:
repository: alpine
tag: 3.7
inputs:
- name: resource-repository
run:
path: /bin/sh
args:
- -c
- -x
- |
uname -a
ls -lah
ls -lah resource-repository
変更部分は以下の部分です。
- task: task-sample
config:
platform: linux
image_resource:
type: docker-image
source:
repository: alpine
tag: 3.7
inputs:
- name: resource-repository
先ほどでは記述されていなかったinputs
の記述があります。
ここで、ジョブの定義でget
していたresource-repository
の情報を
タスク内で利用することを宣言することができます。
パイプライン定義の投入と実行
$ fly -t home sp -p 02_pipeline_sample_input -c 02/02_pipeline_repository_input.yaml -l credentials.yaml
パイプラインを実行すると違いが現れます。
タスク(task-sample
)を実行しているコンテナイメージの内部に
リソース(resource-repository
)の情報が含まれるようになっています。
これによってgitリポジトリの情報をコンテナ内部から操作することができるようになりました。
これによってリポジトリに含まれるソースコードからバイナリをビルドするといったことが実現できます。
まとめ
ここでは、ジョブの中に含まれるタスクの内部でgitリポジトリの情報を
参照するための手段について提供しました。
具体的には、
- リソースを定義する
- ジョブの中でリソースを取得(get)する
- ジョブ内のタスクでリソースを入力(input)する
上記3つを満たすことでタスク内部でgitリポジトリの情報を参照することができます。
今回も、
Fufuhu/concourse_sampleの02
ディレクトリ配下に
サンプルのyamlファイルを格納しています。