标签:提醒 settings 账号 The 如何 tac shu ast 标题
Gitflow工作流定义了一个围绕项目发布的严格分支模型,它会相对复杂一点,但提供了用于一个健壮的用于管理大型项目的框架,非常适合用来管理大型项目的发布和维护。 贯穿整个开发周期,master和develop分支是一直存在的,master分支可以被视为稳定的分支, 而develop分支是相对稳定的分支,特性开发会在feature分支上进行,发布会在release分支上进行,而bug修复则会在hotfix分支上进行,这样也有效避免了不同类型的开发工作在代码层级的耦合和干扰。
hotfix和release的结果都要合并到master和develop中,为什么?因为它们的修改结果将持续影响这后续的开发和维护,必须合并以保证代码的一致性。
当线上项目需要版本回退,或者需要简单记录迭代版本时,我们常在master分支上打上 Tag 标签,例如:
本文基于GitFlow工作流,将利用Jenkins配合GitLab实现以下自动化任务:
Jenkins是一个用Java编写的开源的持续集成工具,可以与Git打通,监听Git的merge, push事件,触发执行Jenkins的指定任务(job),例如执行单元测试。更多的是:当代码变更时可以触发打包部署、性能测试、接口测试、监控、日志分析等。项目发布的任何一个环节都可自动完成,无需太多的人工干预,有利于减少重复过程以节省时间和工作量等。
下面列出自动任务Jenkins Job的创建过程,供参考。创建过程如下:
构建后操作(Editable Email Notification):用于配置邮件提醒。
Triggers 中的配置需要注意下,一般配置为Job执行失败的时候发送邮件
在GitLab项目的Settings中找到如下图的配置:勾选“Active”,指定在Git Push 或 mr 创建/更新/合并时触发指定的 Jenkins url,Project name 为Jenkins 中配置的Job名称,用户名、密码是jenkins的账号和密码。
( Tag 标签命名规则: release_当前日期_当月版本_当季度版本_当年版本 )
#!/bin/sh
echo **********************************Start********************************
date
# 获取最近一次远程 master 提交的 commit id
sha1=`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 user.name $name
git config --global user.email $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 '提交人: '$name
git push origin --tags
newTag=`git tag -l | grep $newVersion`
echo '################# 最近创建的标签为:' $latestTag
echo '################# 自动计算的标签为:' $newVersion
echo '################# 自动创建的标签为:' $newTag
echo **********************************End**********************************
Jenkins 配合 GitLab 实现分支的自动合并、自动创建 Tag
标签:提醒 settings 账号 The 如何 tac shu ast 标题
原文地址:https://www.cnblogs.com/mycognos/p/10247648.html