本文介紹如何配置流水線代碼源觸發,以及代碼源觸發事件和過濾條件。
配置代碼源觸發
開啟代碼源觸發,配置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" # 使用 svnlook 查看本次提交中發生變化的目錄 CHANGED_DIRS=$(svnlook dirs-changed -r "$REV" "$REPOS") # 取出第一個發生變化的目錄路徑(通常是最上層目錄) FIRST_CHANGED_PATH=$(echo "$CHANGED_DIRS" | head -n 1) # 假設倉庫的分支結構遵循標準的格式(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 使用目標分支作為流水線運行時使用的分支。
過濾條件
分支或標籤過濾
代碼提交觸發的過濾條件支援Regex。 可以輸入一個普通分支,比如master或者dev。或使用JavaRegex文法,以下是幾個樣本:
匹配多個分支,比如 master 和 dev,可以輸入
master|dev。匹配以 feature 開頭的分支,可以輸入
^feature.*。
代碼路徑過濾
通過配置代碼路徑過濾,可以對不同代碼源觸發事件的代碼路徑進行過濾,目前僅支援 CodeUp 代碼源 Push 事件。只有在代碼路徑過濾規則下的代碼發生更新時,才會觸發流水線運行,填寫過濾條件支援Regex。例如:過濾條件為auth-srv/.*時,僅當auth-srv目錄下的代碼有更新時才會觸發流水線運行。