笑看天下无敌手 发表于 2022-11-13 21:16:37

git 提交后Jenkins自动构建、并发布服务

现状:当前开发在迭代中完成相关feature功能开发之后到发布到dev环境的流程是:


[*]提交代码到git对应的分支
[*]需要登录域账号去Jenkins服务查找相关的项目任务,再手动选择分支进行构建。这里可能还涉及到

[*]没有Jenkins项目权限,需要找其他相关开发开权限
[*]第一次没有分支,需要到配置构建步骤里面去添加相关分支

[*]等待构建完成之后手动登录OneOps系统选择对应的项目,选择对应的nuget包版本进行发布
顺畅情况就是上面三步,这三步每一步开发都得关注结果,顺畅下来少则3、5分钟,如果打包失败可能还需要到Jenkins服务上查看失败原因。再次修改项目代码,再次重复上面的步骤。
期望改进:

解放开发,让其只关注于代码提交,提交后让Jenkins自动构建、构建完成后自动发布到ops系统,并通知结果(包括构建失败通知、发布成功通知)
实现步骤:

Jenkins项目构建步骤修改


[*]配置手动构建分支参数
https://img2022.cnblogs.com/blog/266444/202211/266444-20221113202635095-553765567.png
[*]配置git项目地址,以及手动打包时候选择分支参数,这里的${Branch}分支参数来源于上面步骤的choice参数。注意此处的${Branch}参数项目MsBuild时候会用到,因此后面git push自动构建时候需要生成改环境变量。
https://img2022.cnblogs.com/blog/266444/202211/266444-20221113203349512-1997751885.png
https://img2022.cnblogs.com/blog/266444/202211/266444-20221113203358142-1346894489.png
[*]构建触发配置,选择Build when a change is pushed to GitLab。这里我们勾选如下几个选项
并且设置了只有dev以及test相关的分支才触发自动构建,过滤master以及online分支


[*]Build on Merge Request Events
[*]Build on Push Events
[*]Rebuild open Merge Requests
[*]Enable
[*]Accept merge request on success
[*]Filter branches
https://img2022.cnblogs.com/blog/266444/202211/266444-20221113203433620-1291259596.png

[*]构建环境,设置了版本为${GIT_BRANCH}.${BUILD_NUMBER}两个系统环境变量,并且设置为构建显示名称——分支名称+构建序号
https://img2022.cnblogs.com/blog/266444/202211/266444-20221113203447370-796465395.png
并且问了兼容手动选择分支构建以及git push自动构建,我们通过windows batch command 导出了环境变量Branch,如果是git push自动构建,我们就将gitlabBranch环境变量赋值给Branch变量。并导出到opsevn.properties文件中。
5. 构建步骤中再次注入opsevn.properties文件中的环境变量。再次通过Properties Content        注入一些自动发布、通知python脚本中需要使用Jenkins环境变量,包括:

[*]clusterId 发布集群id
[*]serviceId 发布服务id
[*]esbName 服务名称
[*]buildUrl 构建url地址
[*]buildNumber 构建版本号
[*]buildCase 构建方式
https://img2022.cnblogs.com/blog/266444/202211/266444-20221113203501602-1569290412.png
再次通过windows batch command执行编译构建,并且获取构建是否成功。将状态带入到python脚本。以便后续通知使用。
6. gitlab中webhook设置,将上面步骤3图中的GitLab CI Service URL 加入到webhook。
https://img2022.cnblogs.com/blog/266444/202211/266444-20221113203510224-1421167192.png

[*]python脚本 AutoOps.py 获取传入的构建参数后,做一下步骤处理:


[*]判断传入相关参数并校验
[*]获取构建操作人
[*]获取构建方式
[*]判断构建状态是否成功
[*]失败发布Markdown提醒到企业微信群,可以自己查看失败原因
[*]构建成功注入cookie
[*]通过集群、服务、构建版本号获取构建的nuget包
[*]调用接口发布nuget服务包
[*]发布成功Markdown消息提醒到企业微信群,可以直接查看发布结果
https://img2022.cnblogs.com/blog/266444/202211/266444-20221113203531798-1801537886.png
https://img2022.cnblogs.com/blog/266444/202211/266444-20221113203544589-1795435012.png
https://img2022.cnblogs.com/blog/266444/202211/266444-20221113203553158-1663145408.png
ps:需注意

[*]环境变量的导出、导入方式
[*]批处理中获取构建结果是否成功
      作者:rpoplar
      出处:http://www.cnblogs.com/rpoplar/
      本文版权归作者【rpoplar】和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究其法律责任的权利。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: git 提交后Jenkins自动构建、并发布服务