LoginSignup
1
1

More than 5 years have passed since last update.

[Concourse]02_gitリポジトリの情報をパイプライン内部で参照する

Last updated at Posted at 2018-02-25

目的

Concourseを用いてgitリポジトリとパイプラインの
連携を実現するための手段について説明します。

パイプラインの中でgitリポジトリの情報を取得する

以下のようなパイプラインを定義しました。

ただgitリポジトリの情報を参照しつつ、
タスクとしてuname -aを実行するだけのパイプラインです。

02/02_pipeline_repository.yaml
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のリソースを定義しています。
リソースを定義することでジョブの入力、または出力として
ジョブ自体の処理に必要な情報を提供したり、
ジョブの実行結果に応じて情報を出力したりといった設定が可能になります。

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形式で記述しています。

ジョブjob-sampleの抜粋
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形式
で記述しています。

以下のような形でのパイプラインが表示されるようになりました。

image.png

リソース(resource-repository)がジョブ(job-sample)の入力に
なっているのがわかるかと思います。
しかし、これではただパイプラインにgitのリポジトリが入力として
含まれただけで、ジョブ内部のタスクからは参照できません。

image.png

しかし、ジョブ(job-sample)を実行するとジョブ上では
リソース(resource-repository)の情報が認識されていることがわかります。

次はジョブ内部に定義したタスクから参照する方法を記述します。

ジョブ内部のタスク(task-sample)でリソース(resource-respository)の情報を取得できるようにする

ジョブ内部のタスクからリポジトリの情報を取得できるように、
設定を変更しました。

02_pipeline_repository_input.yaml
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-sampleの定義(抜粋)
      - 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

image.png

パイプラインを実行すると違いが現れます。
タスク(task-sample)を実行しているコンテナイメージの内部に
リソース(resource-repository)の情報が含まれるようになっています。

image.png

これによってgitリポジトリの情報をコンテナ内部から操作することができるようになりました。
これによってリポジトリに含まれるソースコードからバイナリをビルドするといったことが実現できます。

まとめ

ここでは、ジョブの中に含まれるタスクの内部でgitリポジトリの情報を
参照するための手段について提供しました。

具体的には、

  1. リソースを定義する
  2. ジョブの中でリソースを取得(get)する
  3. ジョブ内のタスクでリソースを入力(input)する

上記3つを満たすことでタスク内部でgitリポジトリの情報を参照することができます。

今回も、
Fufuhu/concourse_sample02ディレクトリ配下に
サンプルのyamlファイルを格納しています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1