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