本文介紹如何配置流水線代碼源觸發,以及代碼源觸發事件和過濾條件。
配置代碼源觸發
開啟代碼源觸發,配置WebHook后,在相應的代碼地址和分支上提交代碼后就可以觸發流水線的運行了。
云效 Codeup 開啟代碼源觸發
在 Flow 流水線,點擊編輯流水線,點擊編輯代碼源。
點擊 開啟代碼源觸發,Flow 會自動將 Webhook 地址插入到云效 Codeup 相應代碼庫中。
其他代碼類型開啟代碼源觸發
進入目標Flow流水線編輯頁,單擊編輯代碼源。開啟代碼源觸發,并復制對應的Webhook。
將復制的Webhook地址配置到相應的代碼庫中。云效支持Gitlab、Github、Gitee、通用Git代碼倉庫類型開啟代碼源觸發,各類型代碼倉庫配置Webhook方法參考如下。
Gitlab 配置 Webhook
訪問Gitlab的代碼庫地址,選擇 ,將流水線復制的 WebHook 添加到 URL 中。
Github 配置 Webhook
訪問 Github 的代碼庫地址,選擇
,單擊 Add Webhook,將 Flow 流水線上復制的 Webhook 地址填入 Payload URL中,Content Type 選擇 application/json。Gitee 配置 Webhook
訪問碼云 Gitee的代碼庫地址,選擇 ,將 Flow 流水線復制的 Webhook 地址添加到 URL 中。
通用 Git 配置 Webhook
以Gitlab為例,訪問Gitlab的代碼庫地址,選擇 ,將流水線復制出來的 WebHook 添加到 URL 中。
SVN 配置 Webhook
在編輯流水線頁面開啟代碼源觸發,復制Webhook地址。
在SVN服務端版本庫的hooks目錄下是一些鉤子腳本模板,每一個對應一個事件,使用時去掉后綴。
以post-commit為例,post-commit就是一個Shell腳本,將期望的操作編寫進該腳本內,SVN檢測到代碼有變更后(包括提交代碼、創建分支和創建tag操作),就回來執行該腳本。下面是示例腳本,代碼提交觸發Flow流水線運行:
#!/bin/sh # 倉庫的路徑和提交的修訂號作為參數傳遞給腳本 REPOS="$1" REV="$2" # 獲取發生變更的目錄列表 CHANGED_DIRS=$(svnlook dirs-changed -r "$REV" "$REPOS") # 假設倉庫的分支結構遵循標準的格式(branches/分支名),那么可以從輸出中解析分支名 FIRST_CHANGED_PATH=$(echo "$CHANGED_DIRS" | head -n 1) # 使用sed來提取分支名。這里假設路徑遵循 "branches/分支名" 的結構 BRANCH_NAME=$(echo $FIRST_CHANGED_PATH | sed 's#.*/\(branches/.*\)/#\1#') # 編寫curl命令請求流水線提供的webhook地址:webhook地址替換為自己流水線里提供的,請求數據按照下面的示例編寫 curl --location --request POST 'http://flow-openapi.aliyun.com/scm/webhook/MwfQPTyf4nif2UdWBooR' \ --header 'Content-Type: application/json' \ --data-raw "{ \"ref\": \"refs/heads/$BRANCH_NAME\", \"repository\": { \"clone_url\": \"svn://8.142.XX.XXXcom/svn/repos/demo\" } }"
觸發事件
可以使用 觸發事件 配置來對代碼源Webhook事件進行過濾。 不同代碼源支持的觸發事件如下:
阿里云Code | 云效Codeup | 通用Git | Github | Gitlab | Coding | Bitbucket | 自建Gitlab | SVN | |
代碼提交 | ? | ? | ? | ? | ? | ? | ? | ? | ? |
Tag創建 | ? | ? | ? | ? | ? | ? | ? | ? | ? |
合并請求新建/更新 | ? | ? | ? | ? | ? | ? | ? | ? | ? |
合并請求完成后 | ? | ? | ? | ? | ? | ? | ? | ? | ? |
代碼提交:從本地 push 分支到遠程分支(或在代碼管理平臺的Web端進行文件修改),例如從本地的master push到 origin/master。Flow 會將 push 的目標分支與過濾條件進行匹配,如果匹配成功,則會觸發流水線,并使用 push 的目標分支作為流水線運行時使用的分支。
Tag創建:從本地 push tag 到服務端 tag(或在代碼管理平臺的 Web 端進行 Tag 創建),例如將本地的tag release/0.0.1 push 服務端。Flow 會將 push 的目標 Tag 名稱與過濾條件進行匹配,如果匹配成功,則會觸發流水線,并使用目標 Tag 作為流水線運行時使用的代碼版本。
合并請求新建/更新:在代碼管理平臺的 Web 端創建合并請求,Codeup 支持此類事件。例如從遠程的 dev 分支(源分支)發起一個合并請求到 master 分支(目標分支)。Flow 會將合并請求的目標分支與過濾條件進行匹配,如果匹配成功,則會觸發流水線,并使用源分支作為流水線運行時使用的分支。
合并請求完成后:與合并 合并請求新建/更新 相比唯一的差別是:Flow 使用目標分支作為流水線運行時使用的分支。
過濾條件
分支或標簽過濾
代碼提交觸發的過濾條件支持正則表達式。 可以輸入一個普通分支,比如master或者dev。也可以使用Java語言支持的正則表達式語法,以下是幾個示例:
如果想匹配多個分支,比如 master 和 dev,可以輸入
master|dev
。如果想匹配以 feature 開頭的分支,可以輸入
^feature.*
。
代碼路徑過濾
通過配置代碼路徑過濾,可以對不同代碼源觸發事件的代碼路徑進行過濾,目前僅支持 CodeUp 代碼源 Push 事件。當代碼源觸發事件發生時,只有代碼路徑過濾規則下的代碼發生更新時,才可以觸發流水線運行,填寫過濾條件支持正則表達式。例如:過濾條件為auth-srv/.*
時,僅當auth-srv目錄下的代碼有更新時才會觸發流水線運行。