コンテンツにスキップ

Task inputs について

前のセクションの Task では、実行時に利用できた入力方法は、image を使ったものだけでした。Docker イメージなどのベースイメージと呼ばれるものは比較的静的でサイズが大きく、作成には時間がかかってしまいます。そのため、Concourse には処理の中に都度ファイル/フォルダを渡せる inputs という項目が用意されています。

特に inputs のない Task の作業ディレクトリを見てみましょう:

cd ../task-inputs
fly -t tutorial execute -c no_inputs.yml

この Task は ls -al を実行し、コンテナ内の作業フォルダの内容(空)を表示します:

running ls -al
total 8
drwxr-xr-x    2 root     root          4096 Feb 27 07:23 .
drwxr-xr-x    3 root     root          4096 Feb 27 07:23 ..

Taskの例 inputs_required.yml では、1つの入力を加えています:

inputs:
- name: some-important-input

Taskを実行しようとすると...:

fly -t tutorial execute -c inputs_required.yml

失敗します:

error: missing required input `some-important-input`

通常、fly executeを実行したい場合、手元のローカルフォルダ(.)の内容を渡したいと考えるはずです。そのため、-i name=pathオプションを使用して、必要なinputsにそれぞれパスを設定してみてください:

fly -t tutorial execute -c inputs_required.yml -i some-important-input=.

これでfly executeコマンドは.ディレクトリをコンテナへの入力内容としてアップロードします。some-important-inputのパスで利用可能になります:

running ls -alR
.:
total 12
drwxr-xr-x    3 root     root          4096 Dec 18 02:35 .
drwxr-xr-x    3 root     root          4096 Dec 18 02:35 ..
drwxr-xr-x    1 root     root          4096 Dec 18 02:35 some-important-input

./some-important-input:
total 24
drwxr-xr-x    1 root     root          4096 Dec 18 02:35 .
drwxr-xr-x    3 root     root          4096 Dec 18 02:35 ..
-rw-r--r--    1 501      20             156 Dec  9 22:26 input_parent_dir.yml
-rw-r--r--    1 501      20             162 Dec  9 22:26 inputs_required.yml
-rw-r--r--    1 501      20             123 Dec  9 22:26 no_inputs.yml
-rwxr-xr-x    1 501      20             522 Dec 17 21:31 test.sh

別のディレクトリを入力として渡すには、絶対パスまたは相対パスを指定します:

fly -t tutorial e -c inputs_required.yml -i some-important-input=../task-hello-world

現在のディレクトリが必要な入力と同じ名前であれば、 fly execute -iオプションを削除することができます。

Task: input_parent_dir.yml は、現在のディレクトリでもある入力task-inputsを含んでいます。 ディレクトリ ./task-inputs に含まれる全ての内容が Docker イメージにアップロードされます。 よって次のコマンドは動作し、上記と同じ結果を返します。

fly -t tutorial execute -c input_parent_dir.yml