本文介紹如何配置流水線代碼源觸發,以及代碼源觸發事件和過濾條件。
配置代碼源觸發
開啟代碼源觸發,配置WebHook後,在相應的代碼地址和分支上提交代碼後就可以觸發流水線的運行了。
雲效 Codeup 開啟代碼源觸發
-
在 Flow 流水線,點擊編輯流水線,點擊編輯代碼源。
-
點擊 開啟代碼源觸發,Flow 會自動將 Webhook 地址插入到雲效 Codeup 相應程式碼程式庫中。
開啟後,在觸發事件地區勾選所需事件類型,包括代碼提交、TAG建立、合并請求完成後、合并請求 建立/更新,還可按需開啟分支或標籤過濾和代碼路徑過濾,配置完成後單擊添加。
開啟後,在雲效 Codeup 程式碼程式庫的 Webhooks 設定頁面可看到 Flow 自動註冊的 Webhook 條目,其觸發事件包括推送事件、標籤推送事件和合并請求事件。
其他代碼類型開啟代碼源觸發
-
進入目標Flow流水線編輯頁,單擊編輯代碼源。開啟代碼源觸發,並複製對應的Webhook。
在觸發事件中勾選代碼提交,並將複製的Webhook地址添加到對應代碼倉庫的Webhook觸發設定中。
-
將複製的Webhook地址配置到相應的程式碼程式庫中。雲效支援Gitlab、Github、Gitee、通用Git代碼倉庫類型開啟代碼源觸發,各類型代碼倉庫配置Webhook方法參考如下。
Gitlab 配置 Webhook
訪問Gitlab的程式碼程式庫地址,選擇,將流水線複製的 WebHook 添加到 URL 中。
在 Trigger 地區勾選 Push events 作為觸發事件。
Github 配置 Webhook
訪問 Github 的程式碼程式庫地址,選擇,單擊 Add Webhook,將 Flow 流水線上複製的 Webhook 地址填入 Payload URL中,Content Type 選擇 application/json。
事件觸發方式保持預設選項 Just the push event.。
Gitee 配置 Webhook
訪問碼雲 Gitee的程式碼程式庫地址,選擇,將 Flow 流水線複製的 Webhook 地址添加到 URL 中。
通用 Git 配置 Webhook
以Gitlab為例,訪問Gitlab的程式碼程式庫地址,選擇,將流水線複製出來的 WebHook 添加到 URL 中。
SVN 配置 Webhook
-
在編輯流水線頁面開啟代碼源觸發,複製Webhook地址。
觸發事件勾選代碼提交,Webhook 地址為
http://flow-openapi.aliyun.com/scm。 -
在SVN服務端版本庫的 hooks 目錄下找到對應的鉤子指令碼模板,每一個對應一個事件,使用時去掉尾碼。
14:32 post-commit.tmpl 14:32 post-lock.tmpl 14:32 post-revprop-change.tmpl 14:32 post-unlock.tmpl 14:32 pre-commit.tmpl 14:32 pre-lock.tmpl 14:32 pre-revprop-change.tmpl 14:32 pre-unlock.tmpl 14:32 start-commit.tmpl -
以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目錄下的代碼有更新時才會觸發流水線運行。