ジョブの設定

ジョブには、各ビルドでどのようなことを行うのか設定できます。ジョブの設定は一つの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ステップを実行するための猶予期間を設定することもできます。詳しい使用方法はannotationscrewdriver.cd/terminationGracePeriodSeconds を参照してください。

Template

また、ジョブの設定でtemplatesを使用することもできます。

Shared設定

sharedの設定は全てのジョブに適用される特殊なジョブの設定です。各ジョブの設定で項目を設定すると、sharedで設定されている項目を上書きすることができます。

下の例では、imagestepsを共通設定で設定して、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

参考: