全部產品
Search
文件中心

Function Compute:管理流水線

更新時間:Jul 06, 2024

Serverless應用中心提供可定製的流水線執行能力,支援使用者通過配置流水線、編排任務流程,將代碼發布至Function Compute。本文介紹如何通過控制台管理流水線,包括流水線配置、流水線詳情設定和查看流水線執行歷史。

背景資訊

建立應用時,平台會為應用建立預設環境,您可以為預設環境指定流水線Git事件觸發方式,並進行相應的流水線配置。您可以選擇自動設定和自訂配置兩種配置方案。如果選擇自動設定,平台會按照各配置項的預設值建立流水線。若選擇自訂配置,您可以指定該環境的流水線Git事件觸發方式,還可以選擇流水線執行環境。Git資訊、應用資訊等將作為執行內容傳遞到流水線中。

在編輯流水線配置項時,除觸發方式、執行環境外,您還可以對DingTalk通知、資源描述YAML進行配置。

  • 在建立應用或建立環境時配置流水線

    在建立應用或建立環境時,可以為環境指定流水線的Git觸發方式、執行環境。

    image.png

  • 在環境中編輯流水線

    對已有的環境,在流水線管理頁簽,可以編輯環境的流水線Git事件觸發方式、執行環境、DingTalk通知、資源描述YAML。

    image.png

流水線配置

流水線配置主要包括流水線觸發方式、流水線執行環境、資源描述YAML、DingTalk機器人通知四個配置項,其中只有流水線觸發方式、流水線執行環境可以在建立應用、建立環境階段進行配置,這四項都可以在建立成功後單擊編輯按鈕配置。

image.png

流水線觸發方式

應用中心支援使用者自訂觸發流水線的Git事件。應用中心通過Webhook來接收Git事件,當接收到滿足觸發規則的事件時,將按照使用者配置的流水線YAML建立並執行流水線。當前支援的觸發方式如下:

  • 分支觸發:需要環境關聯指定分支,匹配指定分支所有的Push事件。

  • Tag觸發:匹配指定Tag運算式的所有Tag建立事件。

  • 分支合并觸發:匹配指定來源分支到環境所關聯的目標分支的Merge/Pull Request合并事件。

流水線執行環境

流水線執行環境分為預設執行環境專有執行環境兩種模式。

預設執行環境

預設執行環境下,流水線的資源由平台完全託管,由阿里雲Function Compute為您承擔流水線執行過程中的費用成本,您無需付出任何費用。流水線的每個任務都會運行在獨立安全沙箱環境中,平台會保證您的流水線執行環境的安全隔離。預設執行環境的使用限制如下:

  • 執行個體資源規格:4vCPU、8GB記憶體。

  • 臨時磁碟空間:10 GB。

  • 任務執行逾時:15分鐘。

  • 地區限制:模板直接部署、GitHub代碼源使用海外新加坡地區,Gitee、公網GitLab、Codeup使用中國杭州地區。

  • 網路限制:不支援固定IP地址以及網段,不支援IP白名單方式訪問指定網站,不支援訪問您的VPC內的資源。

專有執行環境

專有執行環境會將流水線任務在使用者的帳號下執行,提供更多自訂的能力。應用中心會根據使用者的授權完全代管專有執行環境的任務,即時在使用者賬戶下調度Function Compute執行個體運行流水線。和預設執行環境類似,專有執行環境提供完全Serverless化的能力,使用者無需營運基礎設施。

通過專有執行環境,您可以使用如下自訂能力:

  • 地區及網路:您可以指定執行環境的地區以及VPC,實現訪問內網代碼倉庫、製品倉庫、鏡像倉庫、Maven私服等情境。支援的地區:開服地區

  • 執行個體資源規格:您可以指定執行環境的CPU、記憶體規格。例如指定更大規格的執行個體來加快構建速度。

    說明

    vCPU大小(單位為核)與記憶體大小(單位為GB)的比例必須設定在1∶1到1∶4之間。

  • 持久化儲存:您可以指定NAS掛載以及OSS掛載配置。例如通過NAS掛載來進行檔案快取,實現加速構建的效果。

  • 日誌:您可以指定SLS的記錄項目和日誌倉庫,實現流水線執行日誌的持久化。

  • 逾時時間:您可以自訂流水線任務的執行逾時。預設為600秒,最長為86400秒。

重要

專有執行環境會讓流水線任務在您自己帳號的Function Compute下執行,因此會產生相關費用。具體操作,請參見計費概述

資源描述YAML

Serverless應用中心和ServerlessDevs開發人員工具進行了深度整合,你可以通過ServerlessDevs的資源描述檔案來聲明業務的資源配置。關於資源描述YAML的規範,請參見ServerlessDevs YAML規範。預設的資源描述檔案名稱為s.yaml,您也可以指定其他檔案名稱。指定資源描述檔案後,在流水線中有兩種使用方式:

  • 當使用部署外掛程式@serverless-cd/s-deploy時,外掛程式執行時會自動使用指定的資源描述檔案進行部署,執行的原理是在Serverless Devs的操作指定中增加-t/--template命令。例如下面樣本,指定的資源描述YAML檔案為demo.yaml,外掛程式執行的命令就是s deploy -t demo.yaml

- name: deploy
  context:
    data:
      deployFile: demo.yaml
      steps:
      - plugin: '@serverless-cd/s-setup'
      - plugin: '@serverless-cd/checkout'
      - plugin: '@serverless-cd/s-deploy'
  taskTemplate: serverless-runner-task
  • 當使用指令碼方式執行時,可以通過${{ ctx.data.deployFile }}來引用具體的資源描述檔案名稱。例如下面的樣本,效果是當指定了資源描述檔案時就使用指定檔案執行s plan命令,否則使用預設的s.yaml執行s plan命令。

- name: pre-check
  context:
    data:
      steps:
      - run: s plan -t ${{ ctx.data.deployFile || s.yaml }}
      - run: echo "s plan finished."
  taskTemplate: serverless-runner-task

DingTalk機器人通知

開啟該配置後,需要配置DingTalk機器人的Webhook地址加簽密鑰、通知規則以及自訂訊息等。您可以在此集中管理需要通知的任務,也可以通過流水線YAML對各個任務分別開啟通知。在此處完成通知的整體配置後,您也可以進一步在流水線詳情中進行各個任務的通知細化配置。

流水線詳情

流水線詳情地區,您可以配置流水線流程,對流水線中的任務、任務間的關係進行詳細配置。平台會自動產生預設流水線流程,您可以基於該流程進行二次編輯。

流水線通過YAML進行管理,當前提供了平台託管倉庫讀取兩種配置方式:

說明

平台託管

流水線YAML預設由平台託管,即配置在平台中心化管理,更新後下次部署時生效。

倉庫讀取

流水線的YAML描述檔案儲存體在遠端Git倉庫,在控制台中編輯儲存後平台會即時向您的Git倉庫提交Commit,該提交不觸發流水線的執行。當您的代碼倉庫事件觸發流水線執行時,平台使用您指定的Git倉庫中的流水線YAML建立流水線並執行。

您可以在流水線詳情地區上方指定倉庫讀取,輸入YAML的檔案名稱。如下圖所示。

image.png

流水線詳情地區的主體由左側的協助工具輔助區與右側的YAML編輯區構成:

  • YAML編輯區:您可以直接對流水線YAML進行編輯,來實現對流水線流程的修改,參考使用YAML檔案描述流水線

  • 協助工具輔助區:提供了針對YAML編輯的協助工具輔助,包含:

    • 流程預覽:提供了對流水線流程的可視化預覽與簡單編輯能力。流程預覽

    • 工作範本:提供了一系列常用的任務YAML模板。工作範本

地區右上方有儲存、全螢幕模式、重設三個按鈕:

  • 儲存按鈕會儲存頁面中對YAML的更改,並同步到流水線YAML中。

  • 全螢幕模式按鈕可以將主題編輯地區放大到全屏操作。

  • 重設按鈕則將取消從上次儲存YAML之後的所有更改,退回初始狀態。

重要

如果選擇重設,在上次儲存之後的所有更改都將丟失,請謹慎使用,做好備份。

流程預覽

流程預覽地區提供對流水線流程的可視化預覽能力,並支援對任務基本內容、任務間關係的簡單編輯,支援對模板任務的快捷建立添加。流程圖節點主要分為三類,起始的代碼源與觸發方式節點、結束節點、任務節點。節點之間有表示依賴關係的連線串連。當滑鼠移到任務節點上,會顯示建立任務按鈕和刪除任務按鈕,用於便捷地進行任務增刪。

image.png

  • 代碼源與觸發方式節點(開始節點)

    用於顯示當前流水線代碼源資訊與觸發方式,此處只做顯示不支援編輯。若要修改流水線觸發方式,可以到流水線配置中進行修改。

    重要

    如果需要修改代碼倉庫,請在應用詳情處進行修改。具體操作,請參見管理應用。修改代碼倉庫後,會涉及到所有流水線的失效,請謹慎操作。

  • 結束節點

    標誌流水線流程的終點,流水線中的任務至此全部完成。該節點唯讀不可編輯,無實際含義。

  • 任務節點

    用於顯示與維護指定任務的基本資料。任務節點預設顯示任務名稱,單擊節點會彈出氣泡框,用於查看和編輯任務名稱前置任務、是否開啟任務等基本資料。如果選擇不開啟任務,則該任務會在執行時被自動跳過,並顯示為灰色。

  • 依賴關係

    反映任務之間關係的單向箭頭。若箭頭由任務A指向任務B,則代表A是B的前置任務,B依賴A,A被B依賴,B為依賴方,A為被依賴方。每個任務都可以被多個任務依賴,也可以依賴多個任務。

    依賴關係可以通過編輯被依賴方的前置任務來變更。例如,想取消B對A的依賴,可以單擊B的任務節點,將A從B的前置任務中移除。

  • 建立任務

    該按鈕表現為“+”表徵圖,分別存在於任務節點的上、下、右三個方位。單擊任務A的上方建立任務按鈕,會建立一個A的前置任務B,A依賴B;單擊任務A的下方建立任務按鈕,會建立一個A的後繼任務C,C依賴A,A是C的前置任務;點擊任務A的右側建立任務按鈕,會建立一個A的兄弟任務D,D具有和A相同的依賴關係,即D和A有相同的前置任務,且所有依賴A的任務也都依賴D。

  • 刪除任務

    該按鈕表現為“×”表徵圖,存在於任務節點右上方,用於刪除被選中的任務。平台會進行二次確認避免誤刪除。

image.png

工作範本

工作範本提供了一系列常用的流水線任務的YAML模板,包含代碼檢查構建部署通用等四種任務的YAML模板,任務內部的進階配置YAML模板,以及任務外掛程式的YAML模板。

您可以在模板列表中選擇您所需要的模板,點擊後可以查看模板的詳細介紹和YAML內容,並將YAML內容複寫粘貼到流水線YAML中的對應位置。

image.png

預設流水線流程

流水線的預設流程包含線上配置比對人工審核構建與部署三個任務,這三個任務依次執行。其中,人工審核預設不開啟,需要手動開啟。

  • 線上配置比對

    判斷流水線所涉及到的資源描述檔案與線上配置內容是否一致,便於提前發現非預期的配置變化。

  • 人工審核

    為確保應用的安全發布以及保障發布後的穩定,可以在此階段開啟人工審核機制,當流水線走到此處將被阻塞,並等待人工審核確認。只有人工審核通過後才能繼續進行後續操作,否則將終止當前流水線。該任務預設不開啟,需要手動開啟。

  • 構建與部署

    進行應用構建並將應用部署到雲上,預設進行全量部署。

image.png

查看流水線執行歷史

在指定環境詳情頁面,選擇流水線管理頁簽,然後在下方流水線執行歷史地區,您可以查看指定流水線的歷史執行記錄。pipeline-history

您可以點擊具體的流水線執行版本,查看當前流水線歷史的具體資訊。通過此資訊,可以快速地查看流水線的執行日誌以及狀態等,便於掌握流水線的執行情況或排查問題。

升級流水線構建環境運行時

當前預設流水線構建環境支援的運行時如下所示,內建的包管理工具包括Maven、PIP、NPM。目前僅支援作業系統為Debian 10的運行時環境。

運行時

支援版本

Node.js

  • Node.js 12

  • Node.js 14:預設版本

  • Node.js 16

  • Node.js 18

  • Node.js 20

Java

  • Java 8:預設版本

  • Java 11

  • Java 17

Python

  • Python 2.7

  • Python 3.6

  • Python 3.7

  • Python 3.9:預設版本

  • Python 3.10

Golang

  • Go 1.18:預設版本

  • Go 1.19

  • Go 1.20

  • Go 1.21

PHP

  • PHP 7.2

.NET

  • .NET 3.1

您可以使用流水線runtime-setup外掛程式或者修改資源描述檔案環境變數的方式來設定流水線運行時版本。

流水線runtime-setup外掛程式(推薦方式

您可以通過Function Compute控制台,找到應用,在流水線管理頁簽的流水線詳情地區,選擇設定Runtime任務外掛程式模板,使用工作範本更新右側流水線YAML。操作流程為工作範本(下圖中①)->任務外掛程式(下圖中②)->設定Runtime(下圖中③)->更新右側YAML(下圖中④)->儲存(下圖中⑤)。

說明

建議您將runtime-setup外掛程式放到第一個位置,以保證後面所有步驟執行都能生效。

image.png

runtime-setup外掛程式的詳細參數請參見使用runtime-setup外掛程式初始化運行環境

資源描述檔案環境變數

您也可以在資源描述檔案中使用Action鉤子來切換Node.js或Python的版本。具體說明如下。

  • Node.js

    • export PATH=/usr/local/versions/node/v12.22.12/bin:$PATH

    • export PATH=/usr/local/versions/node/v16.15.0/bin:$PATH

    • export PATH=/usr/local/versions/node/v14.19.2/bin:$PATH

    • export PATH=/usr/local/versions/node/v18.14.2/bin:$PATH

    樣本如下。

    services:
      upgrade_runtime:
        component: 'fc'
        actions:
          pre-deploy:
            - run: export PATH=/usr/local/versions/node/v18.14.2/bin:$PATH && npm run build
        props:
    ...
  • Python

    • export PATH=/usr/local/envs/py27/bin:$PATH

    • export PATH=/usr/local/envs/py36/bin:$PATH

    • export PATH=/usr/local/envs/py37/bin:$PATH

    • export PATH=/usr/local/envs/py39/bin:$PATH

    • export PATH=/usr/local/envs/py310/bin:$PATH

    樣本如下。

    services:
      upgrade_runtime:
        component: 'fc'
        actions:
          pre-deploy:
            - run: export PATH=/usr/local/envs/py310/bin:$PATH && pip3 install -r requirements.txt -t .
        props:
    ...