本文介绍如何配置流水线代码源触发,以及代码源触发事件和过滤条件。
配置代码源触发
开启代码源触发,配置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 使用目标分支作为流水线运行时使用的分支。
过滤条件
分支或标签过滤
代码提交触发的过滤条件支持正则表达式。 可以输入一个普通分支,比如master或者dev。或使用Java正则表达式语法,以下是几个示例:
-
匹配多个分支,比如 master 和 dev,可以输入
master|dev。 -
匹配以 feature 开头的分支,可以输入
^feature.*。
代码路径过滤
通过配置代码路径过滤,可以对不同代码源触发事件的代码路径进行过滤,目前仅支持 CodeUp 代码源 Push 事件。只有在代码路径过滤规则下的代码发生更新时,才会触发流水线运行,填写过滤条件支持正则表达式。例如:过滤条件为auth-srv/.*时,仅当auth-srv目录下的代码有更新时才会触发流水线运行。