ソースパス
ソースパス機能を使うことで、特定のソースコードが更新された場合にのみジョブをトリガーすることができます。ジョブ定義の中で 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/ の更新ではトリガーされません。
警告
- この機能は現在 Github SCM のみでご利用いただけます。
sourcePathsの設定は手動でパイプラインを実行したり、ジョブをリスタートした際は無視されます。screwdriver.yamlはリポジトリルートに配置されている必要があります。sourcePathsの設定にワイルドカードやグロブは使用できません。