コンテンツにスキップ

ビルドの成果物をアップロードする

ここまで git Resource を使って git リポジトリを fetch し、gittime Resource をトリガーとして使用してきましたが、git Resource は、変更が入った Git リポジトリを、remote のエンドポイントに push するためにも使用できます(git repo が最初に clone された場所とは異なる場合があります)。

cd ../publishing-outputs
cp pipeline-missing-credentials.yml pipeline.yml
fly -t tutorial set-pipeline -p publishing-outputs -c pipeline.yml
fly -t tutorial unpause-pipeline -p publishing-outputs

パイプラインのダッシュボード http://127.0.0.1:8080/teams/main/pipelines/publishing-outputs を見ると、入力した Resource にエラーが発生していることが分かります (オレンジ色の部分を参照してください):

broken-resource

pipeline.yml は、まだ git repo や 書き込み操作に必要な秘密鍵を持っていません。

Create a Github Gistbumpme というファイルを作成し、"Create public gist" ボタンを押してください。

gist

"Embed"のドロップダウンをクリックし、 "Clone via SSH" を選択し、git URL をコピーします:

ssh

それを pipeline.ymlresource-gist セクションに、以下のようにパラメータとして追加してください:

- name: resource-gist
  type: git
  source:
    uri: git@gist.github.com:e028e491e42b9fb08447a3bafcf884e5.git
    branch: master
    private_key: |
      -----BEGIN RSA PRIVATE KEY-----
      MIIEpQIBAAKCAQEAuvUl9YU...
      ...
      HBstYQubAQy4oAEHu8osRhH...
      -----END RSA PRIVATE KEY-----

また、あなたの ~/.ssh/id_rsa 秘密鍵(もしくは GitHub に登録したもの)を private_key セクションに貼り付けてください。 注意: ここで使う秘密鍵がパスフレーズを使って生成されていないことを確認してください。秘密鍵が受け入れられず、エラーが発生してしまいます。

パイプラインを更新し、Concourse に強制的にこの Gist のクレデンシャル情報を速やかに再確認してもらった後、Job を実行します:

fly -t tutorial set-pipeline -p publishing-outputs -c pipeline.yml
fly -t tutorial check-resource -r publishing-outputs/resource-gist
fly -t tutorial trigger-job -j publishing-outputs/job-bump-date -w

再度 WebUI を確認しましょう。新しい git@gist.github.com:XXXX.git リポジトリを正常に取得できていれば、オレンジ色の Resource は黒色に変わります。

job-bump-date が完了したら、あなたの gist を更新してみてください:

gist-bumped

この パイプラインは Resource を更新する例です。git repo(あなたの github gist)に新しい git commits を push しました。

新しい commit はどこからきたのですか?

task: bump-timestamp-file の Task ファイルの設定で、1つの出力 updated-gistを指定しています:

outputs:
  - name: updated-gist

Task: bump-timestamp-file は次の bump-timestamp-file.sh を実行しています:

git clone resource-gist updated-gist

cd updated-gist
date > bumpme

git config --global user.email "nobody@concourse-ci.org"
git config --global user.name "Concourse"

git add .
git commit -m "Bumped date"

まず、入力された Resource:resource-gist を、出力する Resource:updated-gist にコピーしました( git clone を使用し、gitの作法に従っています)。 updated-gist ディレクトリにいくつかの変更が加えられ、updated-gistフォルダのGitリポジトリを変更する git commit が続きます。この updated-gist フォルダと、git commit が追加され、パイプラインの次のステップで、gist に push されます:

- put: resource-gist
  params:
    repository: updated-gist

task: bump-timestamp-file ステップからの update-gist の出力は、Resource:resource-gistupdated-gistとして入力になっています(git resourceでより詳しい情報を参照してください)。

Task の依存ツールはどこでインストールするの?

bump-timestamp-file.sh スクリプトは、git CLI を必要としました。

apt-get update; apt-get install gitなどを使ってスクリプトの一番上でインストールすることができたでしょうが、これにより Task が非常に遅くなってしまいます(この Task が実行される度にCLIを再インストールしてしまうからです)。

代わりに、bump-timestamp-file.sh のステップでは、ベースとなるDocker Image に、すでに git CLI が含まれていることを前提としています。

使用されている Docker Image は、Task 設定の image_resources セクションに記述されています:

  - task: bump-timestamp-file
    config:
      platform: linux
      image_resource:
        type: docker-image
        source: { repository: starkandwayne/concourse }

Docker Image: starkandwayne/concourse は、https://github.com/starkandwayne/dockerfiles/ で説明されています。多くの Stark & Wayne の パイプラインで利用されている共通のベースとなる Docker Image です。

あなたの組織は、独自の Docker イメージ を、パイプライン間で共有するように管理したいかもしれません。この基本レッスンを終えたら、レッスン: Create and Use Docker Images にアクセスして、Concourse を使用して独自の Docker イメージを作成するための パイプラインを作成してみましょう。

秘密鍵をそのまま入力してるけど大丈夫?

秘密鍵を平文のテキストファイル(pipeline.yml)にコピーし、スクリーンに表示された(fly set-pipeline -c pipeline.ymlの間)ことへの懸念なら心配ご無用です。この後すぐに 秘密パラメータを資格情報マネージャで管理する についても学びます.