ジョブの設定
ジョブには、各ビルドでどのようなことを行うのか設定できます。ジョブの設定は一つのimage
とリストのsteps
、またはtemplate
を含んでいる必要があります。また、requires
を使用することで、ジョブのトリガーを指定することもできます。パイプラインワークフローを作成するためのrequires
の詳しい使用方法はworkflowを参照してください。
例
jobs:
main:
requires: [~pr, ~commit]
image: node:lts
steps:
- init: npm install
- test: npm test
main2:
requires: main
template: example/mytemplate@stable
Image
image
の設定はDockerのイメージ、例えば
hub.docker.com からコンテナを指定します。完全なURLを指定することで、カスタムレジストリからイメージを指定することもできます。
例
jobs:
main:
requires: [~pr, ~commit]
image: my-custom-registry.example.com/myorg/myimage:label
steps:
- step1: echo hello
Steps
ステップはビルド中で実行したいコマンドのリストです。step_name: step_command
のように設定できます。ステップは設定した順番に実行されます。作業ディレクトリと環境変数はステップ間で共有されます。
また、ビルドが成功しても失敗しても実行されるteardownステップも設定することができます。teardownステップは他のステップよりも後に定義し、ステップ名をteardown-
で始める必要があります。
サンプルリポジトリ: https://github.com/screwdriver-cd-test/user-teardown-example
ステップに記述した処理はデフォルトでBourne shell (/bin/sh
)で実行されます。他のシェルで実行したい場合はUSER_SHELL_BIN
で指定することができます。例として、Bashを使いたい場合はジョブのenvironmentにUSER_SHELL_BIN: bash
を設定します。
例
jobs:
main:
requires: [~pr, ~commit]
image: node:lts
environment:
USER_SHELL_BIN: bash
steps:
- step_name: step_command --arg1 --arg2 foo
- set_env: export FOO=bar
- get_env: echo $FOO # barが表示されます
- cd: |
pwd # '/sd/workspace/src/github.com/tkyi/mytest'が表示されます
cd ..
- pwd: pwd # '/sd/workspace/src/github.com/tkyi'が表示されます
- bash-only: echo ${FOO%r} # baが表示されます
- fail: commanddoesnotexist
- teardown-mystep1: echo goodbye
- teardown-mystep2: echo world
Teardown
teardownステップは、ビルドステップが完了や中断または失敗した後にScrewdriverのbookendステップの一式を実行します。これらのステップはジョブの最後に暗黙的に追加され、名称は sd-teardown-
または teardown-
で始まります。ポッド/コンテナはこれらのステップが完了すると削除されます。ビルドが中断されたケースのおいてポッドが終了する前に、teardownステップを実行するための猶予期間を設定することもできます。詳しい使用方法はannotationの screwdriver.cd/terminationGracePeriodSeconds
を参照してください。
Template
また、ジョブの設定でtemplatesを使用することもできます。
Shared設定
shared
の設定は全てのジョブに適用される特殊なジョブの設定です。各ジョブの設定で項目を設定すると、shared
で設定されている項目を上書きすることができます。
例
下の例では、image
とsteps
を共通設定で設定して、mainとmain2のジョブで、それぞれ使用されています。
shared:
image: node:lts
steps:
- init: npm install
- pretest: npm lint
- test: npm test
jobs:
main:
requires: [~pr, ~commit]
image: node:lts
main2:
requires: [main]
steps:
- test: echo Skipping test
上の例は次の例と同じものになります:
jobs:
main:
requires: [~pr, ~commit]
image: node:lts
steps:
- init: npm install
- pretest: npm lint
- test: npm test
main2:
requires: [main]
image: node:lts
steps:
- test: echo Skipping test
参考:
- Annotations - 主にビルドの実行の設定をする際に使用されるフリーフォームのキー/バリューストア
- Environment - ジョブのための環境変数を設定する
- Secrets - ビルド中にsecretsを環境変数として安全に渡す
- Settings - ビルドのプラグインを設定する
- Job Templates - 共通で使用できるジョブの設定
- Workflow - パイプラインの構造を定義する