Serverless應用中心提供可定制的流水線執行能力,支持用戶通過配置流水線、編排任務流程,將代碼發布至函數計算。本文介紹如何通過控制臺管理流水線,包括流水線配置、流水線詳情設置和查看流水線執行歷史。
背景信息
創建應用時,平臺會為應用創建默認環境,您可以為默認環境指定流水線Git事件觸發方式,并進行相應的流水線配置。您可以選擇自動配置和自定義配置兩種配置方案。如果選擇自動配置,平臺會按照各配置項的默認值創建流水線。若選擇自定義配置,您可以指定該環境的流水線Git事件觸發方式,還可以選擇流水線執行環境。Git信息、應用信息等將作為執行上下文傳遞到流水線中。
在編輯流水線配置項時,除了觸發方式、執行環境外,您還可以對釘釘通知、資源描述YAML進行配置。
在創建應用或創建環境時配置流水線
在創建應用或創建環境時,可以為環境指定流水線的Git觸發方式、執行環境。
在環境中編輯流水線
對已有的環境,在流水線管理頁簽,可以編輯環境的流水線Git事件觸發方式、執行環境、釘釘通知、資源描述YAML。
流水線配置
流水線配置主要包括流水線觸發方式、流水線執行環境、資源描述YAML、釘釘機器人通知四個配置項,其中只有流水線觸發方式、流水線執行環境可以在創建應用、創建環境階段進行配置,這四項都可以在創建成功后單擊編輯按鈕配置。
流水線觸發方式
應用中心支持用戶自定義觸發流水線的Git事件。應用中心通過Webhook來接收Git事件,當接收到滿足觸發規則的事件時,將按照用戶配置的流水線YAML創建并執行流水線。當前支持的觸發方式如下:
分支觸發:需要環境關聯指定分支,匹配指定分支所有的Push事件。
Tag觸發:匹配指定Tag表達式的所有Tag創建事件。
分支合并觸發:匹配指定來源分支到環境所關聯的目標分支的Merge/Pull Request合并事件。
流水線執行環境
流水線執行環境分為默認執行環境和專有執行環境兩種模式。
默認執行環境
默認執行環境下,流水線的資源由平臺完全托管,由阿里云函數計算為您承擔流水線執行過程中的費用成本,您無需付出任何費用。流水線的每個任務都會運行在獨立安全沙箱環境中,平臺會保證您的流水線執行環境的安全隔離。默認執行環境的使用限制如下:
實例資源規格:4vCPU、8GB內存。
臨時磁盤空間:10 GB。
任務執行超時:15分鐘。
地域限制:模板直接部署、GitHub代碼源使用海外新加坡地域,Gitee、公網GitLab、Codeup使用中國杭州地域。
網絡限制:不支持固定IP地址以及網段,不支持IP白名單方式訪問指定網站,不支持訪問您的VPC內的資源。
專有執行環境
專有執行環境會將流水線任務在用戶的賬號下執行,提供更多自定義的能力。應用中心會根據用戶的授權完全代管專有執行環境的任務,實時在用戶賬戶下調度函數計算實例運行流水線。和默認執行環境類似,專有執行環境提供完全Serverless化的能力,用戶無需運維基礎設施。
通過專有執行環境,您可以使用如下自定義能力:
地域及網絡:您可以指定執行環境的地域以及VPC,實現訪問內網代碼倉庫、制品倉庫、鏡像倉庫、Maven私服等場景。支持的地域請參見開服地域。
實例資源規格:您可以指定執行環境的CPU、內存規格。例如,指定更大規格的實例來加快構建速度。
說明vCPU大小(單位為核)與內存大小(單位為GB)的比例必須設置在1:1到1:4之間。
持久化存儲:您可以指定NAS掛載以及OSS掛載配置。例如通過NAS掛載來進行文件緩存,實現加速構建的效果。
日志:您可以指定SLS的日志項目和日志倉庫,實現流水線執行日志的持久化。
超時時間:您可以自定義流水線任務的執行超時。默認為600秒,最長為86400秒。
專有執行環境會讓流水線任務在您自己的賬號的函數計算下執行,因此會產生相關費用。具體操作,請參見計費概述。
資源描述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
釘釘機器人通知
開啟該配置后,需要配置釘釘機器人的Webhook地址、加簽密鑰、通知規則以及自定義消息等。您可以在此集中管理需要通知的任務,也可以通過流水線YAML對各個任務分別開啟通知。在此處完成通知的整體配置后,您也可以進一步在流水線詳情中進行各個任務的通知細化配置。
流水線環境變量
在流水線環境變量區域,點擊編輯,選擇配置環境的方式,按照下方步驟完成配置,然后單擊部署。
使用表單編輯(默認方式)
單擊+添加變量。
配置環境變量的鍵值對:
變量:自定義。
值:自定義。
使用JSON格式編輯
單擊使用JSON格式編輯。
在文本框內,輸入對應的JSON格式的鍵值對,格式如下。
{ "key": "value" }
示例如下。
{ "REGION": "MY_REGION", "LOG_PROJECT": "MY_LOG_PROJECT" }
當前環境變量會在Serverless Devs流水線中生效,可以通過${env(key)}
在s.yaml中引用,也可以通過 $Key
在Shell命令中引用,示例如下。
vars:
region: ${env(REGION)}
service:
name: demo-service-${env(prefix)}
internetAccess: true
logConfig:
project: ${env(LOG_PROJECT)}
logstore: fc-console-function-pre
vpcConfig:
securityGroupId: ${env(SG_ID)}
vswitchIds:
- ${env(VSWITCH_ID)}
vpcId: ${env(VPC_ID)}
流水線詳情
在流水線詳情區域,您可以配置流水線流程,對流水線中的任務、任務間的關系進行詳細配置。平臺會自動生成默認流水線流程,您可以基于該流程進行二次編輯。
流水線通過YAML進行管理,當前提供了平臺托管和倉庫讀取兩種配置方式:
平臺托管不支持YAML預定義變量,具體請參見使用YAML文件描述流水線。
倉庫托管支持YAML文件預定義變量。
平臺托管
流水線YAML默認由平臺托管,即配置在平臺中心化管理,更新后下次部署時生效。
倉庫讀取
流水線的YAML描述文件存儲在遠端Git倉庫,在控制臺中編輯保存后平臺會實時向您的Git倉庫提交Commit,該提交不觸發流水線的執行。當您的代碼倉庫事件觸發流水線執行時,平臺使用您指定的Git倉庫中的流水線YAML創建流水線并執行。
您可以在流水線詳情區域上方指定倉庫讀取,輸入YAML的文件名。如下圖所示。
流水線詳情區域的主體由左側的輔助工具區與右側的YAML編輯區構成:
YAML編輯區:您可以直接對流水線YAML進行編輯,來實現對流水線流程的修改,參考使用YAML文件描述流水線。
輔助工具區:提供了針對YAML編輯的輔助工具,包含:
流程預覽:提供了對流水線流程的可視化預覽與簡單編輯能力。
任務模板:提供了一系列常用的任務YAML模板。
區域右上角有保存、全屏模式、重置三個按鈕:
保存按鈕會保存頁面中對YAML的更改,并同步到流水線YAML中。
全屏模式按鈕可以將主題編輯區域放大到全屏操作。
重置按鈕則將取消從上次保存YAML之后的所有更改,退回初始狀態。
如果選擇重置,在上次保存之后的所有更改都將丟失,請謹慎使用,做好備份。
流程預覽
流程預覽區域提供對流水線流程的可視化預覽能力,并支持對任務基本內容、任務間關系的簡單編輯,支持對模板任務的快捷創建添加。流程圖節點主要分為三類,起始的代碼源與觸發方式節點、結束節點、任務節點。節點之間有表示依賴關系的連線連接。當鼠標移到任務節點上,會顯示新建任務按鈕和刪除任務按鈕,用于便捷地進行任務增刪。
代碼源與觸發方式節點(開始節點)
用于顯示當前流水線代碼源信息與觸發方式,此處只做顯示不支持編輯。若要修改流水線觸發方式,可以到流水線配置中進行修改。
重要如果需要修改代碼倉庫,請在應用詳情處進行修改。具體操作,請參見管理應用。修改代碼倉庫后,會涉及到所有流水線的失效,請謹慎操作。
結束節點
標志流水線流程的終點,流水線中的任務至此全部完成。該節點只讀不可編輯,無實際含義。
任務節點
用于顯示與維護指定任務的基本信息。任務節點默認顯示任務名稱,單擊節點會彈出氣泡框,用于查看和編輯任務名稱、前置任務、是否開啟任務等基本信息。如果選擇不開啟任務,則該任務會在執行時被自動跳過,并顯示為灰色。
依賴關系
反映任務之間關系的單向箭頭。若箭頭由任務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。
刪除任務
該按鈕表現為“×”圖標,存在于任務節點右上角,用于刪除被選中的任務。平臺會進行二次確認避免誤刪除。
任務模板
任務模板提供了一系列常用的流水線任務的YAML模板,包含代碼檢查、構建、部署、通用等四種任務的YAML模板,任務內部的高級配置YAML模板,以及任務插件的YAML模板。
您可以在模板列表中選擇您所需要的模板,點擊后可以查看模板的詳細介紹和YAML內容,并將YAML內容復制粘貼到流水線YAML中的對應位置。
默認流水線流程
流水線的默認流程包含線上配置比對、人工審核、構建與部署三個任務,這三個任務依次執行。其中,人工審核默認不開啟,需要手動開啟。
線上配置比對
判斷流水線所涉及到的資源描述文件與線上配置內容是否一致,便于提前發現非預期的配置變化。
人工審核
為確保應用的安全發布以及保障發布后的穩定,可以在此階段開啟人工審核機制,當流水線走到此處將被阻塞,并等待人工審核確認。只有人工審核通過后才能繼續進行后續操作,否則將終止當前流水線。該任務默認不開啟,需要手動開啟。
構建與部署
進行應用構建并將應用部署到云上,默認進行全量部署。
查看流水線執行歷史
在指定環境詳情頁面,選擇流水線管理頁簽,然后在下方流水線執行歷史區域,您可以查看指定流水線的歷史執行記錄。
您可以點擊具體的流水線執行版本,查看當前流水線歷史的具體信息。通過此信息,可以快速地查看流水線的執行日志以及狀態等,便于掌握流水線的執行情況或排查問題。
升級流水線構建環境運行時
當前默認流水線構建環境支持的運行時如下所示,內置的包管理工具包括Maven、PIP、NPM。目前僅支持操作系統為Debian 10的運行時環境。
運行時 | 支持版本 |
Node.js |
|
Java |
|
Python |
|
Golang |
|
PHP |
|
.NET |
|
您可以使用流水線runtime-setup插件或者修改資源描述文件環境變量的方式來設置流水線運行時版本。
流水線runtime-setup插件(推薦方式)
您可以通過函數計算控制臺,找到應用,在流水線管理頁簽的流水線詳情區域,選擇設置Runtime任務插件模板,使用任務模板更新右側流水線YAML。操作流程為任務模板(下圖中①)->任務插件(下圖中②)->設置Runtime(下圖中③)->更新右側YAML(下圖中④)->保存(下圖中⑤)。
建議您將runtime-setup插件放到第一個位置,以保證后面所有步驟執行都能生效。
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: ...