Jenkins配合GitLab实现分支的自动合并、自动创建Tag

Jenkins配合GitLab实现分支的自动合并、自动创建Tag

2023年7月7日发(作者:)

Jenkins配合GitLab实现分⽀的⾃动合并、⾃动创建TagJenkins 配合 GitLab 实现分⽀的⾃动合并、⾃动创建 Tag背景GitFlow⼯作流简介Gitflow⼯作流定义了⼀个围绕项⽬发布的严格分⽀模型,它会相对复杂⼀点,但提供了⽤于⼀个健壮的⽤于管理⼤型项⽬的框架,⾮常适合⽤来管理⼤型项⽬的发布和维护。 贯穿整个开发周期,master和develop分⽀是⼀直存在的,master分⽀可以被视为稳定的分⽀, ⽽develop分⽀是相对稳定的分⽀,特性开发会在feature分⽀上进⾏,发布会在release分⽀上进⾏,⽽bug修复则会在hotfix分⽀上进⾏,这样也有效避免了不同类型的开发⼯作在代码层级的耦合和⼲扰。GitFlow⼯作流优化hotfix和release的结果都要合并到master和develop中,为什么?因为它们的修改结果将持续影响这后续的开发和维护,必须合并以保证代码的⼀致性。当线上项⽬需要版本回退,或者需要简单记录迭代版本时,我们常在master分⽀上打上 Tag 标签,例如:功能发布:release_20190101_当⽉版本数BUG修复:hotfix_20190101_修复次数本⽂基于GitFlow⼯作流,将利⽤Jenkins配合GitLab实现以下⾃动化任务:master分⽀代码更新后,⾃动将代码合并到develop分⽀master分⽀代码更新后,⾃动在master分⽀提交中打 tagJenkins⾃动任务Job的创建Jenkins是⼀个⽤Java编写的开源的持续集成⼯具,可以与Git打通,监听Git的merge, push事件,触发执⾏Jenkins的指定任务(job),例如执⾏单元测试。更多的是:当代码变更时可以触发打包部署、性能测试、接⼝测试、监控、⽇志分析等。项⽬发布的任何⼀个环节都可⾃动完成,⽆需太多的⼈⼯⼲预,有利于减少重复过程以节省时间和⼯作量等。如何创建Jenkins Job下⾯列出⾃动任务Jenkins Job的创建过程,供参考。创建过程如下:⾸先,创建⼀个任务,输⼊名称,选择“构建⼀个⾃由风格的软件项⽬” 确定即可。General:填写项⽬名称及描述;Label Expression 是在Jenkins admin 中配置的节点(container, node),⼀个Label Expression 是⼀组docker,当多个不同的Job同时执⾏的时候,可以实现并⾏。源码管理:在Repository URL中填写GitLab中的项⽬地址;Branches to build此处的Branch Specifier是触发Jenkins Job时由Jenkins⾃动拉取的代码的分⽀,可以填写⼀个固定的指定分⽀,如master,也可以写正则表达式。另外,也可以填写${gitlabSourceBranch}。如果填写${gitlabSourceBranch},表⽰从git读取Merge Request的源分⽀,使⽤该变量,则不能⼿⼯点击Job的“⽴即构建”执⾏job了,因为读取不到这个变量只能通过git push事件触发了。具体可以根据应⽤场景选择。构建触发器:下⾯截图中指定的是:仅当产⽣ push 事件时且⽬标分⽀为master时触发此job。这⾥可以根据需求来具体配置。Filterbranches by name:仅当⽬标分⽀为 master 时触发Job。构建环境 & 构建:构建环境勾选第⼀项指在每次构建开始之前先清空⼯作空间;构建中的Execute shell Command 中就可以配置我们⾃动化脚本,我们可以把这些脚本放到项⽬根⽬录当中,也可以放到⼀个GitLab仓库当中,来统⼀管理脚本(⽂末附脚本⽰例)。构建后操作(Editable Email Notification):⽤于配置邮件提醒。Disable Extended Email Publisher:勾选后,邮件就不发送;Project Recipient List:收件⼈地址;多个收件⼈邮件地址⽤逗号进⾏分割;Project Reply-To List:允许回复⼈的地址;默认为$DEFAULT_REPLYTO;Content Type:邮件⽂档的类型,可以设置HTML等格式;Default Subject:默认邮件标题;也可以使⽤$DEFAULT_SUBJECT;Default Content:默认邮件内容,这⾥可以写HTML⽂件,引⽤Jenkins内部的⼀些变量;也可以使⽤默认内容:$DEFAULT_CONTENT;Attach Build Log:发送的邮件是否包含⽇志。Triggers 中的配置需要注意下,⼀般配置为Job执⾏失败的时候发送邮件Jenkins Job 如何与 Git 关联在GitLab项⽬的Settings中找到如下图的配置:勾选“Active”,指定在Git Push 或 mr 创建/更新/合并时触发指定的 Jenkins url,Project name为Jenkins 中配置的Job名称,⽤户名、密码是jenkins的账号和密码。整体步骤梳理1. GitLab上准备⼀个项⽬⼯程;2. 安装Jenkins以及相关的GitLab插件;3. Jenkins配置GitLab访问权限;4. Jenkins上创建⼀个Job,对应步骤1中的项⽬⼯程;5. GitLab项⽬中配置Jenkins;6. 修改项⽬⼯程的源码,并提交到GitLab上;7. 检查Jenkins的构建任务是否会触发配置的脚本。脚本⽰例以下为master分⽀代码更新后,⾃动在master分⽀提交中打 tag的脚本⽰例,仅供参考:( Tag 标签命名规则: release_当前⽇期_当⽉版本_当季度版本_当年版本 )#!/bin/shecho **********************************Start********************************date# 获取最近⼀次远程 master 提交的 commit idsha1=`git rev-parse remotes/origin/master^{commit}`# 获取姓名及邮箱,来配置git提交者信息name=`git show --pretty=%an $sha1 | awk 'NR==1{print}'`email=`git show --pretty=%ce $sha1 | awk 'NR==1{print}'`echo '################# 当前提交⼈信息:'echo $name

echo $email

git config --global $namegit config --global $email# 获取 merge 的源分⽀前缀function getOriginPrefix(){ # 获取分⽀所属 info_sha1=`git show $sha1 | grep 'Merge:' | cut -d' ' -f3` info_branch=`git branch -r --contains $info_sha1` # 判断是否 hotfix 分⽀ isHotfix=`echo "${info_branch}" | grep 'origin/hotfix'` if [ -n "$isHotfix" ]; then

echo 'hotfix' else echo 'release' fi}originBra=$(getOriginPrefix)echo '################# 获取的源分⽀前缀为:' $originBra# 获取最近⼀次创建的标签latestTag=`git for-each-ref --sort=-taggerdate --format "%(tag)" refs/tags | grep $originBra | head -n 1`# 获取最近标签的年latestYear=`echo "${latestTag}" | awk -F_ '{print substr($2,1,4)}'`# 获取最近标签的⽉latestMonth=`echo "${latestTag}" | awk -F_ '{print substr($2,5,2)}'`# 获取最近标签的季度latestQuarter=`echo "${latestMonth}" | awk '{print int(($0-1)/3)+1}'`# 获取当年currentYear=`date +%Y`# 获取当⽉currentMonth=`date +%m`# 获取当⽇currentDay=`date +%Y%m%d`# 获取当前季度currentQuarter=`echo $currentMonth | awk '{print int(($0-1)/3)+1}'`# 计算当⽉版本号if [ $latestMonth -eq $currentMonth ]; then

currentMonthVersion=`echo "${latestTag}" | awk -F_ '{print $3+1}'`else currentMonthVersion='1'fi# 计算当季度版本号if [ $latestQuarter -eq $currentQuarter ]; then

currentQuarterVersion=`echo "${latestTag}" | awk -F_ '{print $4+1}'`else currentQuarterVersion='1'fi# 计算当年版本号if [ $latestYear -eq $currentYear ]; then

currentVersion=`echo "${latestTag}" | awk -F_ '{print $5+1}'`else currentVersion='1'fi# 获取最终标签名

newVersion=$originBra'_'$currentDay'_'$currentMonthVersion'_'$currentQuarterVersion'_'$currentVersion# 创建标签git tag -a $newVersion -m '提交⼈: '$namegit push origin --tagsnewTag=`git tag -l | grep $newVersion`echo '################# 最近创建的标签为:' $latestTagecho '################# ⾃动计算的标签为:' $newVersionecho '################# ⾃动创建的标签为:' $newTagecho **********************************End**********************************参考资料转载请标注出处,谢谢!

发布者:admin,转转请注明出处:http://www.yc00.com/web/1688702899a163815.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信