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