ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Jenkins封版合并Git代码

2020-09-08 10:03:10  阅读:354  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有