流水線配置中,支持指定YAML文件,用于描述如何在Serverless應用中心上運行流水線,來構建或發布Serverless應用。本文介紹如何配置YAML文件以及文件中預定義的字段含義。
背景信息
YAML配置文件描述了流水線運行所需要的流水線對象以及流水線模板對象的數據結構,當您的代碼倉庫發生變更時,會通過Webhook觸發應用中心,并按照配置文件的描述執行流水線動作。
采用配置文件描述流水線運行的方式,是應用中心比較推薦的DevOps實踐。您可以在創建應用階段指定或新建該YAML配置文件,也可以在環境中指定或新建該YAML配置文件。關于如何指定YAML文件,請參見管理流水線。
前提條件
配置YAML文件
YAML文件支持添加對流水線的描述,在流水線中引用模板或直接描述流水線的運行方式(推薦)。示例如下。
---
# 提交流水線執行
kind: Pipeline
# 流水線執行名稱,需要全局唯一。推薦使用commitID與時間戳構造唯一的名稱
name: "p-<% .git.shortCommitId %>-<% .currentTimestampMs %>"
# 一些任意的描述信息
description: 'demo pipeline'
spec:
context:
data:
## 全局釘釘通知配置,覆蓋模板中的配置
#dingdingNotification:
# # 設置全局關閉釘釘通知,下面可以按需打開
# enable: false
# # 設置在任務執行成功時跳過通知
# skipOnSuccess: false
# # 釘釘通知webhook配置
# webhook: https://oapi.dingtalk.com/robot/send?access_token=xxx
# # 釘釘通知的簽名密鑰
# secret: xxx
# # 釘釘通知的內容。不要統一配置text,除非目的是統一通知的內容
# message:
# at:
# isAtAll: false
# atUserIds: ["admin"]
# atMobiles: ["188xxxx8888"]
# msgtype: text
# # text支持模板語法,模板可以獲取到當前執行的狀態以及異常信息
# text: |
# task finished.
# TaskName: {{ .currentTask.name }}
# Success: {{ .success }}
# Status: {{ .currentTask.status.phase }}
# 通過s工具部署,指定s.yaml文件位置,觸發時會自動填入
# deployFile: s.yaml
# 應用中心所在的應用名稱,觸發時會自動填入
appName: <% .appName %>
# 倉庫中s.yaml文件的位置。這里是指在根路徑中的s.yaml文件
deployFile: s.yaml
# 本次執行使用的流水線模板描述。現在應用中心支持在流水線中內置模板描述
templateSpec:
tasks:
- name: pre-check
context:
data:
displayName: "前置檢查"
enable: true
steps:
- plugin: "@serverless-cd/checkout"
- plguin: "@serverless-cd/s-setup"
- run: s plan -t "${{ ctx.data.deployFile }}"
taskTemplate: serverless-runner-task
runAfters: []
- name: pre-check-approval
context:
data:
displayName: "人工審核"
enable: true
taskTemplate: need-approval
runAfters:
- name: pre-check
- name: build-and-deploy
context:
data:
displayName: "構建部署"
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事件產生時,會產生一條名稱為p-<% .git.shortCommitId %>-<% .currentTimestampMs %>
的流水線,并依次執行前置檢查、人工審核與構建部署三個任務。每個任務中,又分別使用流水線插件與Shell命令描述任務的具體執行步驟。
YAML文件預定義變量
應用中心提供以下預置的變量,在觸發時會將YAML文件中的占位符替換為變量對應的值,再提交文件描述的流水線以及任務對象。
名稱 | 解釋 | 示例 |
<% .appName %> | 應用名稱。 | headless-ffmpeg-wcha |
<% .accountId %> | 阿里云賬號(主賬號)ID。 | 143199913651**** |
<% .releaseVersion %> | 當前執行流水線的部署版本。 | 1676913428**** |
<% .envName %> | 當前流水線所在的環境。 | staging |
<% .git.branch %> | 當前流水線所在分支。 | test |
<% .git.commitId %> | 本次Git操作中HEAD Commit的CommitId。 | 3b6b823cea88c356b10442580da5a02cde4**** |
<% .git.shortCommitId %> | 本次Git操作中HEAD Commit的CommitId前7位。 | 3b6b823 |
<% .git.commitMessage %> | 本次Git操作中HEAD Commit的Message內容。 | update .s file |
<% .git.tag %> | 本次Git操作中的tag名稱(如果存在tag)。 | dev |
<% .git.author %> | 本次Git操作的作者。 | developer |
<% .git.action %> | 本次Git操作的行為名稱。 | push |
<% .currentTimestampMs %> | 執行部署時的時間戳,單位為毫秒。 | 1676971965781 |
<% .currentTimestampS %> | 執行部署時的時間戳,單位為秒。 | 1676971891 |
<% .randomString6 %> | 隨機6位字符串。 | abcdef |