全部產品
Search
文件中心

Function Compute:使用YAML檔案描述流水線

更新時間:Jul 06, 2024

流水線配置中,支援指定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:
      ## 全域DingTalk通知配置,覆蓋模板中的配置
      #dingdingNotification:
      #  # 設定全域關閉DingTalk通知,下面可以按需開啟
      #  enable: false
      #  # 設定在任務執行成功時跳過通知
      #  skipOnSuccess: false
      #  # DingTalk通知webhook配置
      #  webhook: https://oapi.dingtalk.com/robot/send?access_token=xxx
      #  # DingTalk通知的簽名密鑰
      #  secret: xxx
      #  # DingTalk通知的內容。不要統一配置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