ステップ
パイプラインステップは、一連のシェルコマンドとして定義されます。コマンドは、gitリポジトリのルートディレクトリ内で実行されます。ワークスペースとも呼ばれるgitリポジトリのルートは、パイプラインのすべてのステップで共有されます。
構成例:
1 kind: pipeline
2 type: kubernetes
3 name: default
4
5 steps:
6 - name: backend
7 image: golang
8 commands:
9 - go build
10 - go test
11
12 - name: frontend
13 image: node
14 commands:
15 - npm install
16 - npm test
コマンド
コマンドは、gitリポジトリのルートディレクトリ内で実行されます。ワークスペースとも呼ばれるgitリポジトリのルートは、パイプラインのすべてのステップで共有されます。これにより、ファイルアーティファクトをステップ間で保持できます。
5 steps:
6 - name: backend
7 image: golang
8 commands:
9 - go build
10 - go test
上記のコマンドは、単純なシェルスクリプトに変換されます。上記の例のコマンドは、大まかに次のスクリプトに変換されます。
1 #!/bin/sh
2 set -e
3 set -x
4
5 go build
6 go test
次に、上記のシェルスクリプトがdockerエントリポイントとして実行されます。以下のdockerコマンドは、スクリプトの実行方法の(不完全な)例です。
docker run --entrypoint=build.sh golang
コンテナの終了コードは、ステップが成功したか失敗したかを判別するために使用されます。コマンドがゼロ以外の終了コードを返す場合、そのステップは失敗としてマークされます。パイプライン全体のステータスも失敗としてマークされ、残りのパイプラインステップはスキップされます(失敗時に実行するように明示的に構成されていない限り)。
環境
環境セクションは、個々のパイプラインステップにスコープされた環境変数を定義する機能を提供します。
5 steps:
6 - name: backend
7 image: golang
8 environment:
9 GOOS: linux
10 GOARCH: amd64
11 commands:
12 - go build
13 - go test
プラグイン
プラグインは、コマンドをカプセル化するDockerコンテナであり、パイプラインで共有して再利用できます。プラグインの例には、Slack通知の送信、Dockerイメージのビルドと公開、S3へのアーティファクトのアップロードが含まれます。
Slackプラグインの例:
15 - name: notify
16 image: plugins/slack
17 settings:
18 webhook: https://hooks.slack.com/services/...
プラグインの素晴らしいところは、Dockerコンテナにすぎないことです。つまり、ロジックを簡単にカプセル化し、Dockerコンテナにバンドルして、プラグインを組織またはより広範なコミュニティと共有できます。
条件
whenセクションは、実行時にステップの実行を条件付きで制限する機能を提供します。以下の例では、ブランチごとにステップの実行を制限していますが、イベント、リファレンス、ステータスなどによって実行を制限できます。
5 steps:
6 - name: backend
7 image: golang
8 commands:
9 - go build
10 - go test
11 when:
12 branch:
13 - master
ステータス条件を使用して、デフォルトのランタイム動作をオーバーライドし、パイプラインステータスが失敗した場合でも手順を実行します。
15 - name: notify
16 image: plugins/slack
17 settings:
18 webhook: https://hooks.slack.com/services/...
19 when:
20 status:
21 - failure
22 - success
詳細については、条件の記事を参照してください。
失敗
失敗属性を使用すると、システムが個々のステップの失敗を処理する方法をカスタマイズできます。これは、パイプライン全体を失敗させることなくステップを失敗させる場合に役立ちます。
5 steps:
6 - name: backend
7 image: golang
8 failure: ignore
9 commands:
10 - go build
11 - go test
デタッチ
detach属性を使用すると、パイプラインステップをバックグラウンドで実行できます。ランナーはステップを開始し、デタッチしてバックグラウンドで実行し、すぐに次のステップに進みます。
この機能のターゲットユースケースは、サービスまたはデーモンを開始し、後続の手順でサービスに対して単体テストを実行することです。
5 steps:
6 - name: backend
7 image: golang
8 detach: true
9 commands:
10 - go build
11 - go test
12 - go run main.go -http=:3000
特権モード
特権属性は、昇格された特権でコンテナを実行します。 --privileged
フラグを指定してコンテナを実行するのと同じです。
5 steps:
6 - name: backend
7 image: golang
8 privileged: true
9 commands:
10 - go build
11 - go test
12 - go run main.go -http=:3000
リソース
リソースセクションは、個々のパイプラインステップのCPUおよびメモリリソースを要求および制限するために使用されます。コンピューティングリソースの管理の詳細については、 Kubernetesのドキュメントをご覧ください。
5 steps:
6 - name: backend
7 image: golang
8 resources:
9 requests:
10 cpu: 250
12 memory: 250MiB
13 limits:
14 cpu: 500
15 memory: 500MiB
16 commands:
17 - go build
18 - go test
19 - go run main.go -http=:3000