流水线配置中,支持指定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 |