svn提交代码自动触发jenkins构建
- DevOps
- 2022-08-08
- 108热度
- 0评论
需求
项目组针对测试环境是定时更新,一天更两次,更新频率低,每次到点了在jenkins里人工触发构建后,会出现编译报错导致无法更新环境,开发临时去定位问题,耽误时间,所以需要进行持续构建,尽早暴露编译问题;
因传统项目,代码量极大,持续构建中未编入代码检查相关的测试步骤(此暂时忽略)。
方案
通过 svn post-commit 钩子,在开发提交代码至 svn 后,自动触发 jenkins 构建,走 curl 方式触发。
jenkins 配置
创建专用的用户
Manage Jenkins >> Manage Users >> 新建用户 >> 新增了 SCM 用户
创建 api-token
在用户的设置页面

在 API Token 中>>【添加新 token】>>输入 ${token_name}>> 点击【生成】,保存生成的 token

测试构建
curl -k -X POST http://jenkins.xxxx.com:8081/job/01_SIT/job/app/buildWithParameters -d compile=false
在jenkins 中看到触发构建成功,流水线已运行。
svn配置
post-commit hook配置
修改 ${SVN_REPOSITORY}/hooks/post-commit 文件
REPOS="$1"
REV="$2"
#AUTHOR=`svnlook author /data/repository/view/`
# 通过 svnlook changed 命令来获取到提交的文件list,从list中获取到是哪个码线(环境),哪个系统的代码
params=`svnlook changed /data/repository/view |awk '{print $2}' |awk '{split($0, a, "/");print a[1]","a[2]}'|awk '!($1 in a){a[$1];print $1}' |awk NF`
# 遍历 环境+系统
for param in $params
do
arr=(`echo $param |awk '{split($0,a,","); print a[1],a[2]}'`)
if [[ ${arr[0]} != "" ]];then
# 有些码线和jenkins中job的环境名未对应上,做个硬编码处理,将码线转换为对应的环境
if [[ ${arr[0]} == "6001" ]];then
arr[0]="01_SIT"
elif [[ ${arr[0]} == "8002" ]];then
arr[0]="03_SIM"
fi
# 拼接触发jenkins构建的 url
url="http://xxxx.xxxx.com:8081/job/${arr[0]}/job/${arr[1]}/buildWithParameters -d OnlyRestart=false -d jarsto=\"\" --user scm:11f8a1b208e0d46dd160318b049e718239"
# 触发构建
curl -k -X POST $url
fi
done
