首页 > 其他 > 详细

Jenkins封版合并Git代码

时间:2020-09-08 10:38:32      阅读:647      评论:0      收藏:0      [点我收藏+]

最近接到一个新需求,通过 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这里一定要输入一个值,不然会导致失败

创建好之后就不用去管理,配置好一个默认值每天定时去执行,是不是省去了很多人工~

 

Jenkins封版合并Git代码

原文:https://www.cnblogs.com/mike666/p/13630820.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!