标签:git -- 封版 echo Git test Jenkins 分支
最近接到一个新需求,通过 Jenkins 封版合并Git代码,这样就不用开发自己每天合并代码防止出错
我这里就记录一下这次的操作,可以设置Jenkins自动合并代码,这样每天就不会人工去操作安全省事
需求:
1.选项参数和字符参数我已经配置好
2.构建shell
# 如果版本号为0,提示错误,并退出
# 检测版本号格式通过之后,根据构建时选择的动作执行封版或合代码动作
封版步骤 (createBranch)
1. 拉取开发分支最新代码
2. 删除本地和远程的test分支
3. 创建版本分支,比如这次封版是3.27,那就创建3.27.x分支
4. 切换到版本分支,并创建test分支
5. 将版本分支和test分支推送到gitLab
合并代码需求 (MergeVersion)
1.把封版得到的版本分支合并到test分支
2.输入版本分支合并到test分支
创建Jenkins job任务
在构建任务里 General 下的 This project is parameterized 添加 Choice Parameter 和 String Parameter
输入这些变量就可以,是为了运行后面的 shell 脚本
源码地址
这里输入需要合并封版的源码地址和有权限操作这个分支的用户密码
我这里是需要 master 分支做为源分支,封版都是根据这个分支来创建,你们可以自行修改源分支
创建定时任务
定时任务是每天自动构建合并和封版你需要操作的分支
我这里创建的定时任务是每天下午 17 点自动构建合并代码
构建shell脚本
在 Jenkins 上构建里添加 Execute shell
1 #!/bin/sh 2 set -x 3 4 5 echo **********************************Start******************************** 6 date 7 8 # check version value 9 echo $Version 10 # 检查版本号,如果版本号为0,提示错误,并退出 11 function checkVersion(){ 12 13 if [ "${Version}" -eq "0" ];then 14 echo "The current version number value is 0,exit 1" 15 exit 1 16 fi 17 } 18 19 checkVersion 20 21 22 cd ${WORKSPACE}/master 23 # 获取最近一次远程 master 提交的 commit id 24 sha1=`git rev-parse remotes/origin/master^{commit}` 25 # 获取姓名及邮箱,来配置git提交者信息 26 name=`git show --pretty=%an $sha1 | awk 'NR==1{print}'` 27 email=`git show --pretty=%ce $sha1 | awk 'NR==1{print}'` 28 echo '################# 当前提交人信息:' 29 echo $name 30 echo $email 31 git config --global user.name $name 32 git config --global user.email $email 33 34 # 获取 merge 的源分支前缀 35 function getOriginPrefix(){ 36 # 获取分支所属 37 info_sha1=`git show $sha1 | grep 'Merge:' | cut -d' ' -f3` 38 info_branch=`git branch -r --contains $info_sha1` 39 # 判断是否 hotfix 分支 40 isHotfix=`echo "${info_branch}" | grep 'origin/hotfix'` 41 if [ -n "$isHotfix" ]; then 42 echo 'hotfix' 43 else 44 echo 'release' 45 fi 46 } 47 originBra=$(getOriginPrefix) 48 echo '################# 获取的源分支前缀为:' $originBra 49 50 # 获取最近一次创建的标签 51 latestTag=`git for-each-ref --sort=-taggerdate --format "%(tag)" refs/tags | grep $originBra | head -n 1` 52 # 获取最近标签的年 53 latestYear=`echo "${latestTag}" | awk -F_ '{print substr($2,1,4)}'` 54 # 获取最近标签的月 55 latestMonth=`echo "${latestTag}" | awk -F_ '{print substr($2,5,2)}'` 56 # 获取最近标签的季度 57 latestQuarter=`echo "${latestMonth}" | awk '{print int(($0-1)/3)+1}'` 58 59 # 获取当年 60 currentYear=`date +%Y` 61 # 获取当月 62 currentMonth=`date +%m` 63 # 获取当日 64 currentDay=`date +%Y%m%d` 65 # 获取当前季度 66 currentQuarter=`echo $currentMonth | awk '{print int(($0-1)/3)+1}'` 67 68 # 计算当月版本号 69 if [ $latestMonth -eq $currentMonth ]; then 70 currentMonthVersion=`echo "${latestTag}" | awk -F_ '{print $3+1}'` 71 else 72 currentMonthVersion='1' 73 fi 74 75 # 计算当季度版本号 76 if [ $latestQuarter -eq $currentQuarter ]; then 77 currentQuarterVersion=`echo "${latestTag}" | awk -F_ '{print $4+1}'` 78 else 79 currentQuarterVersion='1' 80 fi 81 82 # 计算当年版本号 83 if [ $latestYear -eq $currentYear ]; then 84 currentVersion=`echo "${latestTag}" | awk -F_ '{print $5+1}'` 85 else 86 currentVersion='1' 87 fi 88 89 # 获取最终标签名 90 newVersion=$originBra'_'$currentDay'_'$currentMonthVersion'_'$currentQuarterVersion'_'$currentVersion 91 92 # 创建标签 93 git tag -a $newVersion -m '提交人: '$name 94 git push origin --tags 95 newTag=`git tag -l | grep $newVersion` 96 echo '################# 最近创建的标签为:' $latestTag 97 echo '################# 自动计算的标签为:' $newVersion 98 echo '################# 自动创建的标签为:' $newTag 99 echo **********************************End********************************** 100 101 102 103 104 105 ##检测版本号格式通过之后,根据构建时选择的动作执行封版或合代码动作 106 # 封版操作 107 echo ${Action} 108 109 110 remote="origin" 111 verBranch=${Version} 112 testBranch="test" 113 114 function createBranch(){ 115 116 echo "============Delete local and remote test branche=========" 117 echo "Removing local test branch..." 118 git branch -d ${testBranch} 119 120 echo "Removing remote test branch..." 121 git push --delete $remote ${testBranch} 122 123 124 echo "Switching to verBranch local branch..." 125 git checkout -b $verBranch 126 git commit -a -m "add ${verBranch}" 127 git push --set-upstream origin ${verBranch} 128 129 130 echo "Creating test Branch..." 131 git checkout -b $testBranch 132 git commit -a -m "add ${testBranch}" 133 git push --set-upstream origin ${testBranch} 134 135 } 136 137 138 function MergeVersion(){ 139 140 newBranch=${Version} 141 echo "Merge $newBranch into test Branch..." 142 git checkout $testBranch 143 git merge origin/$newBranch || exit 1 144 git push --set-upstream origin ${testBranch} || exit 1 145 echo "Merge into test branch successful ..." 146 147 } 148 149 150 case $Action in 151 CreateVersion) 152 createBranch 153 ;; 154 MergeVersion) 155 MergeVersion 156 ;; 157 esac
这就是构建合并封版的shell脚本,这里有个小坑就是,git 用户每次拉取代码都要输入用户名和密码这样会导致shell脚本失败,所以我们需要配置git用户免密登录
普通用户配置免密拉取 git 执行shell,那么要在jenkins Linux主机上执行这些命令
git config --global user.name "ops@batar.cn" git config --global user.password "123456" git config --global credential.helper store
这是授权普通用户免密登录git地址
构建任务
这里输入需要封版或者合并的变量
Version这里输入需要执行的版本,也可以在 job 里配置好默认值这样就不用输入,关于定时任务默认Version这里一定要输入一个值,不然会导致失败
创建好之后就不用去管理,配置好一个默认值每天定时去执行,是不是省去了很多人工~
标签:git,--,封版,echo,Git,test,Jenkins,分支 来源: https://www.cnblogs.com/mike666/p/13630820.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。