ステップ

Updated 2 years ago by Admin

パイプラインステップは、一連のシェルコマンドとして定義されます。コマンドは、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


How did we do?