Git リポジトリに .yaml ファイルを保存することで、パイプラインをコードとして定義します。コミットがプッシュされると、Serverless Application Center は Webhook を介してファイルを読み取り、パイプラインを自動的に実行します。
前提条件
開始する前に、以下の前提条件を満たしていることを確認してください。
パイプラインとパイプラインテンプレートに関する知識。 詳細については、「パイプライン」および「パイプラインテンプレート」をご参照ください。
Serverless Application Center でサポートされている Git リポジトリと、その管理権限。 アプリケーションの設定時に Serverless Application Center が作成するリポジトリを使用できます。
リポジトリのルートディレクトリにある
.yamlファイル (例:cicd.yaml)
仕組み
.yaml ファイルは、Serverless Application Center がパイプラインの実行に使用するパイプラインオブジェクトとデータ構造を記述します。このファイルでは、パイプライン名、グローバルコンテキスト、およびタスクのリストとその依存関係を指定します。コミットによってパイプラインがトリガーされると、Serverless Application Center はすべての <% %> プレースホルダーを実際のランタイム値に置き換えてから、パイプラインとタスクオブジェクトを送信します。
ファイルは 3 階層の構造を使用します。
Pipeline
└── spec
├── context.data (グローバル構成: appName, deployFile, notifications)
└── templateSpec
└── tasks[] (タスクのリスト)
├── context.data.steps[] (プラグインまたはシェルコマンド)
├── taskTemplate (タスクの動作: runner または approval)
└── runAfters[] (依存関係の宣言)フィールドリファレンス
次の表は、パイプラインの .yaml ファイルにおけるトップレベルおよび一般的に使用されるフィールドをまとめたものです。
| フィールド | 必須 | 説明 |
|---|---|---|
kind | はい | Pipeline にする必要があります。Serverless Application Center にパイプラインの実行をサブミットするよう指示します。 |
name | はい | パイプライン名。グローバルに一意である必要があります。ランタイムで一意の名前を構築するには、<% .git.shortCommitId %> と <% .currentTimestampMs %> を使用します。 |
description | いいえ | パイプラインの人間が判読可能な説明。 |
spec.context.data.appName | いいえ | Serverless Application Center のアプリケーション名。パイプラインがトリガーされると自動的に入力されます。 |
spec.context.data.deployFile | いいえ | Serverless Devs で使用される s.yaml ファイルへのパス。デフォルトはルートの s.yaml です。 |
spec.context.data.dingdingNotification | いいえ | グローバルな DingTalk 通知設定 (Webhook、シークレット、メッセージなど)。タスクごとの通知設定をオーバーライドします。 |
spec.templateSpec.tasks[].name | はい | パイプライン内でタスクに付ける一意の名前。 |
spec.templateSpec.tasks[].context.data.displayName | いいえ | Serverless Application Center コンソールに表示される名前。 |
spec.templateSpec.tasks[].context.data.enable | いいえ | false に設定するとタスクをスキップします。 |
spec.templateSpec.tasks[].context.data.steps[] | いいえ | 実行ステップ。各ステップは plugin リファレンスまたは run シェルコマンドのいずれかです。 |
spec.templateSpec.tasks[].taskTemplate | はい | タスクの動作テンプレート。ビルドおよびデプロイのステップには serverless-runner-task を、手動承認ゲートには need-approval を使用します。 |
spec.templateSpec.tasks[].runAfters[] | いいえ | このタスクが開始する前に正常に完了する必要があるタスクのリスト。最初のタスクの場合は空 ([]) のままにします。 |
パイプラインの .yaml ファイルの設定
次の例では、事前チェックを実行し、手動承認を待ってから、アプリケーションをビルドしてデプロイする 3 つのタスクからなるパイプラインを定義します。
---
# パイプラインを送信して実行します。
kind: Pipeline
# 名前はグローバルに一意である必要があります。コミット ID とタイムスタンプを使用すると、一意性が保証されます。
name: "p-<% .git.shortCommitId %>-<% .currentTimestampMs %>"
description: 'demo pipeline'
spec:
context:
data:
## グローバルな DingTalk 通知設定。タスクごとの通知設定をオーバーライドします。
## 有効にするにはコメントを解除します。
#dingdingNotification:
# enable: false
# skipOnSuccess: false
# webhook: https://oapi.dingtalk.com/robot/send?access_token=xxx
# secret: xxx
# message:
# at:
# isAtAll: false
# atUserIds: ["admin"]
# atMobiles: ["188xxxx8888"]
# msgtype: text
# text: |
# task finished.
# TaskName: {{ .currentTask.name }}
# Success: {{ .success }}
# Status: {{ .currentTask.status.phase }}
# Serverless Application Center のアプリケーション名。トリガーされると自動的に提供されます。
appName: <% .appName %>
# Serverless Devs で使用される s.yaml ファイルへのパス。これはルートの s.yaml を参照します。
deployFile: s.yaml
# インラインタスク定義。Serverless Application Center は、組み込みのテンプレート記述をサポートしています。
templateSpec:
tasks:
- name: pre-check
context:
data:
displayName: "Pre-check"
enable: true
steps:
- plugin: "@serverless-cd/checkout"
- plugin: "@serverless-cd/s-setup"
- run: s plan -t "${{ ctx.data.deployFile }}"
taskTemplate: serverless-runner-task
runAfters: []
- name: pre-check-approval
context:
data:
displayName: "Manual review"
enable: true
# need-approval は、レビュアーが Serverless Application Center コンソールで承認または拒否するまでパイプラインを一時停止する組み込みのタスクテンプレートです。
taskTemplate: need-approval
runAfters:
- name: pre-check
- name: build-and-deploy
context:
data:
displayName: "Building and deployment"
enable: true
steps:
- plugin: "@serverless-cd/checkout"
- plugin: "@serverless-cd/s-setup"
- run: s deploy -t "${{ ctx.data.deployFile }}" --use-local --assume-yes --skip-push
taskTemplate: serverless-runner-task
runAfters:
- name: pre-check-approval
---Git イベントがこのパイプラインをトリガーすると、Serverless Application Center は p-<% .git.shortCommitId %>-<% .currentTimestampMs %> というフォーマットで名前が付けられたパイプラインを生成し、次のタスクを順番に実行します。
事前チェック — コードをチェックアウトし、Serverless Devs をセットアップし、
s planを実行して変更をプレビューします。手動レビュー — レビュアーがコンソールで承認するまでパイプラインを一時停止します。
ビルドとデプロイ — コードをチェックアウトし、Serverless Devs をセットアップし、
s deployを実行してアプリケーションをデプロイします。
タスクの依存関係
runAfters を使用して、タスクが開始する前に完了する必要があるタスクを宣言します。
最小限の例 — 3 つの連続したタスク:
tasks:
- name: task-a
runAfters: [] # パイプラインがトリガーされるとすぐに開始します
- name: task-b
runAfters:
- name: task-a # task-a が成功した後にのみ開始します
- name: task-c
runAfters:
- name: task-b # task-b が成功した後にのみ開始します手動承認ゲート
taskTemplate: need-approval は、パイプラインを一時停止し、レビュアーが Serverless Application Center コンソールで承認または拒否することを要求する組み込みのテンプレートです。
- name: pre-check-approval
context:
data:
displayName: "Manual review"
enable: true
taskTemplate: need-approval # 組み込みの承認ゲート — ステップは不要です
runAfters:
- name: pre-check事前定義変数
パイプラインがトリガーされると、Serverless Application Center はパイプラインを送信する前に、.yaml ファイル内の <% %> プレースホルダーを次の表の値に置き換えます。
| 変数 | 説明 | 例 | 注意 |
|---|---|---|---|
<% .appName %> | アプリケーションの名前。 | headless-ffmpeg-wcha | |
<% .accountId %> | Alibaba Cloud アカウント ID。 | 143199913651**** | |
<% .releaseVersion %> | パイプラインのデプロイメントバージョン。 | 1676913428**** | |
<% .envName %> | パイプラインが実行される環境。 | staging | |
<% .git.branch %> | パイプラインをトリガーしたブランチ。 | test | |
<% .git.commitId %> | HEAD コミットの完全なコミット ID。 | 3b6b823cea88c356b10442580da5a02cde4**** | |
<% .git.shortCommitId %> | コミット ID の最初の 7 文字。 | 3b6b823 | 一意性を確保するために、パイプライン名でこれを使用します。 |
<% .git.commitMessage %> | HEAD コミットのコミットメッセージ。 | update .s file | |
<% .git.tag %> | Git 操作のタグ名。 | dev | これは、そのようなタグが存在する場合にのみ適用されます。 |
<% .git.author %> | Git 操作の作成者。 | developer | |
<% .git.action %> | パイプラインをトリガーしたアクション。 | push | |
<% .currentTimestampMs %> | クエリが開始されたときのタイムスタンプ。単位: ミリ秒。 | 1676971965781 | 一意性を確保するために、パイプライン名でこれを使用します。 |
<% .currentTimestampS %> | デプロイメントが実行されるときのタイムスタンプ。単位: 秒。 | 1676971891 | |
<% .randomString6 %> | 6 文字のランダムな文字列。 | abcdef |
次のステップ
パイプラインの管理 — アプリケーションの作成時または環境の設定時に
.yamlファイルを指定または更新します