使用YAML文件描述流水线

流水线配置中,支持指定YAML文件,用于描述如何在Serverless应用中心上运行流水线,来构建或发布Serverless应用。本文介绍如何配置YAML文件以及文件中预定义的字段含义。

背景信息

YAML配置文件描述了流水线运行所需要的流水线对象以及流水线模板对象的数据结构,当您的代码仓库发生变更时,会通过Webhook触发应用中心,并按照配置文件的描述执行流水线动作。

采用配置文件描述流水线运行的方式,是应用中心比较推荐的DevOps实践。您可以在创建应用阶段指定或新建该YAML配置文件,也可以在环境中指定或新建该YAML配置文件。关于如何指定YAML文件,请参见管理流水线

前提条件

  • 您已了解流水线及流水线模板相关概念。更多信息,请参见流水线流水线模板

  • 创建一个应用中心支持的Git仓库,并拥有管理权限。您也可以使用应用中心在创建新应用过程中,创建并初始化的Git仓库。

  • 在Git仓库根目录创建一个YAML配置文件,本文以创建的cicd.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