ソースパス

ソースパス機能を使うことで、特定のソースコードが更新された場合にのみジョブをトリガーすることができます。ジョブ定義の中で sourcePaths を文字列、または文字列の配列で設定することで利用できます。この機能は monorepo のサブディレクトリに基づいたワークフローを実現するのに役立ちます。

ソースパスの種類

特定のサブディレクトリと特定のファイルの両方をソースパスとして設定できます。サブディレクトリであることを示すには、 最後にスラッシュ (/) を付けます。設定するパスはリポジトリルートからの相対パスです。

以下のような構造のリポジトリを例とします:

┌── README.md
├── screwdriver.yaml
├── test/
│   └── ...
├── src/
│   ├── app/
│   │   ├── main.js
│   │   ├── ...
│   │   └── package.json
│   └── other/
│       └── ...
│
...

また、このような screwdriver.yaml があるとします:

jobs:
    main:
        image: node:lts
        requires: [~pr, ~commit]
        sourcePaths: ["src/app/", "screwdriver.yaml"]
        steps:
            - echo: echo hi

この例では、main ジョブは src/app/ 以下にあるファイル (src/app/main.js, src/app/package.json など) の更新、または screwdriver.yaml の更新でトリガーされます。 しかし main ジョブは、README.md, test/ または src/other/ の更新ではトリガーされません

マッチしたソースパス

Screwdriverはビルドをトリガーしたソースパスを環境変数SD_SOURCE_PATHにセットします。この値は変更されたファイルのいずれかとマッチするsourcePathsの最初のパスになり、そのビルドをトリガしたソースパスに依存するスクリプトを書く場合に使用できます。

除外ソースパス

ソースパスの中にある特定のサブディレクトリや特定のファイルが変更された時にジョブがトリガーされたくない場合には、除外ソースパスを利用できます。特定のサブディレクトリや特定のファイルの変更を無視するために、エクスクラメーション(!)を先頭に付けます。

上と同じリポジトリがあり、screwdriver.yamlが以下のようとします。

jobs:
    main:
        image: node:lts
        requires: [~pr, ~commit]
        sourcePaths: ["src/app/", "screwdriver.yaml", "!src/app/package.json"]
        steps:
            - echo: echo hi

この例では、main ジョブは src/app/package.json を除いた src/app/ 以下にあるファイル (src/app/main.js など) の更新、または screwdriver.yaml の更新でトリガーされます。 しかし main ジョブは、README.md, test/, src/app/package.json または src/other/ の更新ではトリガーされません

警告