好的工具和流程能使我们事半功倍,而这个过程是不断迭代和演进的。关于这一块的内容,之前写过几篇文章:

  • 在团队中使用GitLab中的Merge Request工作模式

  • 敏捷下的需求和代码分支管理

  • 不断进化的分支和需求管理

现在又有了些新的变化和改进,之所以需要改进,肯定是遇到问题了,那么就先从问题来开始今天的文章。

问题

问题分为两种:

方法论的问题:比如团队采用主干开发,主干发布的模式,但是质量得不到保证,这时通过分析讨论决定采用采用主干开发,分支发布的模式来解决,这属于从方法论层面解决问题。

落地执行的问题:已经知道应该采用主干开发,分支发布的模式,但在实际操作的时候,难以执行下去,这属于执行的问题。

在《不断进化的分支和需求管理》一文的最后提到会引入 release 分支和 tag,实际也这么做了,但效果并不理想,原因是执行的不严格,没有做到位,具体原因如下:

  • 发布时是对分支进行构建发布,发布后再在 GitLab 中打上 tag,一忙起来很容易忘记;

  • 镜像的版本也是如此。

解决思路

目的其实很简单,就是让代码的 tag 和镜像的 tag 能够一致,靠人工去做这些事情比想象的要更加困难,所以稍微转换了下思路就能实现自动化,也就可以解决这个问题。

  • 之前提到的 release 分支只做最终的集成测试;

  • 需要发布时就从 release 分支创建 tag,对 tag 来做发布,通过脚本自动创建镜像 tag 进行 push 。

流程图如下:

实际操作

原来在 jenkins 中对分支进行发布,需要设置特定的分支,现在需要对 tag 进行发布,tag 是不断进行创建的,就需要用到 jenkisn 的参数化功能。

jenkins 的参数化需要用到 Git Parameter 插件,可以在 jenkins 的插件管理界面中直接安装,如果安装失败,可以在这个地址进行下载:http://mirror.xmission.com/jenkins/plugins/git-parameter/latest/,更多插件的使用说明参考官网:https://plugins.jenkins.io/git-parameter/

具体配置步骤如下:

1、在 General 下面勾选 This project is parameterized 。

  • Name:参数名称,可以随便填写,在后面配置分支名称时会用到;

  • Parameter Type:这里我选择 Tag,你也可以根据需要选择 Branch 或者其他类型。

2、在 Source Code Management 选择 git 进行设置 。

  • Branch Specifier:${tag}, tag 为第一步中输入的参数名称。

设置完成后,可以看到在构建界面中由原来的 Build Now 变成了 Build with Parameters 。

3、点击 Build with Parameters 选择需要构建的 tag 就可以了 。

按照 tag 进行构建搞定后,剩下就是需要在构建脚本中获取到最新的 tag 名称,并作为参数设置到容器的环境变量和镜像的 tag 中:

  • 首先进入到 jenkins 配置的程序目录,使用 git describe --abbrev=0 --tags 获取 tab 名称;

  • 前端容器使用环境变量的方式将 tag 名称传入,并最终在界面显示;

  • 容器镜像使用参数的方式拼接上 tag 名称。

完整脚本如下:

#!/bin/bashdocker rm -f vue_demo
echo "old container vue_demo del success"echo "begin docker build"
if [ ! -d web ]; thenmkdir -p webecho "web dir created"
fi# "获取最新tag 名称"
cd /root/code/vue_demo
tagName=`git describe --abbrev=0 --tags`
echo "tag name is:" $tagNamecd /root/build/vue_demo
cp /root/build/vue_demo/Dockerfile ./web
cp /root/build/vue_demo/init.sh ./web
cp -r /root/code/vue_demo/dist/* ./webecho "begin docker build"
cd web
docker build -t vue_demo .
echo "build end"docker run -d -p 9500:80 --name vue_demo -e "tag_name=${tagName}" --restart=always  vue_democd ..
rm -rf webecho "update docker iamges start"
docker tag vue_demo:latest 10.10.10.10:8888/vue_demo:${tagName}
docker push 10.10.10.10:8888/vue_demo:${tagName}
echo "update docker iamges end"

最后

任何时候,如果发现事情做起来别扭,或者流程难以执行,就需要我们停下来进行思考或者和他人讨论,往往一个细小的调整或许就能带来巨大的收益。

Jenkins 中以构建 Tag 来实现版本管理相关推荐

  1. Jenkins 中定时任务构建

    一般,在Jenkins中搭建项目完成后,项目可正常运行,基本都会进行定时任务的构建.特别是重要的接口,进行关键接口自动化的日常巡检 时,基本都会设置成定时任务,以方便每天,接口的自动化,可及时检查接口 ...

  2. Jenkins中Maven构建Archiving会重命名jar

    [问题来源]jenkins配置Maven构建时,在Archiving的时候,会修改名字: [JENKINS] Archiving /proj/ip_ers/jenkins_**/6018/s11/wo ...

  3. 在 Jenkins 中使用声明式 Pipeline 构建 Android 项目

    Blue Ocean 是 Jenkins 推出的一套新的 UI,对比经典 UI 更具有现代化气息.2017 年 4 月 James Dumay 在博客上正式推出了 Blue Ocean 1.0. 兼容 ...

  4. Jenkins中构建时提示:Couldn‘t find any revision to build. Verify the repository and branch config

    场景 Jenkins中安装Credentials Binding插件实现凭证管理与安装Git插件和拉取代码构建项目: Jenkins中安装Credentials Binding插件实现凭证管理与安装G ...

  5. Jenkins中安装Credentials Binding插件实现凭证管理与安装Git插件和拉取代码构建项目

    场景 CentOS中Jenkins的下载.安装.配置与启动(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11649 ...

  6. Jenkins+maven+SVN构建java项目中遇到的问题及解决

    Jenkins+maven+SVN构建java项目中遇到的问题及解决 参考文章: (1)Jenkins+maven+SVN构建java项目中遇到的问题及解决 (2)https://www.cnblog ...

  7. Jenkins 中如何一次构建多个项目

    jenkins实用插件1-Active Choices Plugin 如果用Jenkins中的 pipeline 的话, 这个可以用jenkins pipline语法帮忙生成, 1. 同时 build ...

  8. python页面自动化测试代码覆盖率_Python项目在Jenkins中的自动化测试实践(语法检查、单元测试,coverage(代码覆盖率)、自动打包)...

    requirments OS: Ubuntu 14.04+ Gitlab 8.1 + Jenkins 2.19.0 + 使用Jenkins对Python项目进行自动化测试主要依赖nose(单元测试). ...

  9. Jenkins+git+docker构建持续化集成环境

    CI/CD介绍 发布流程设计 Jenkins服务器 192.168.100.109 Git/Harbor 192.168.100.110 Docker 192.168.100.111 工具 版本 Ce ...

最新文章

  1. 创建工程并测试RedisTemplate
  2. 20220208--CTF MISC--两道简单的MISC题目
  3. SpringCloud 入门教程(五): Ribbon实现客户端的负载均衡
  4. 解决css中存在的几种兼容性问题
  5. APK反编译之二:工具介绍
  6. 餐厅点餐系统源码(带电脑端和手机端)
  7. Android蓝牙通讯(服务端、客户端)
  8. 步进电机基础(2.1)- 定子相数的分类、结构、原理
  9. Wifi密码破解与局域网抓包监听(小白--纯工具版)
  10. 中国计算机协会(CCF)
  11. 独享版虚拟主机、共享版虚拟主机和云服务器ECS的区别?
  12. [原]领带打法-半温莎结
  13. 算法基础:圣诞老人的礼物--贪心
  14. linux内存分配方式有三种,浅谈操作系统的内存分配原则
  15. 华为HCIP-DATACOM题库解析271-300(821)
  16. 兼职python程序员_兼的解释|兼的意思|汉典“兼”字的基本解释
  17. Git Flow 之 Tag 标签
  18. 市政下水道疏通机器人_市政下水道疏通机器人机械CAD图纸设计.doc
  19. 隐私计算技术解读:可信执行环境(TEE)概要及应用
  20. 【马蜂窝 加速乐cookie】一次坑爹的获取html源代码不到之路

热门文章

  1. WinHEC(Windows硬件project产业创新峰会)将2015回归
  2. 如何查看自己的ubutu系统是32位的还是64位的
  3. Teams与OneDrive for Business和SharePoint的关系
  4. ubuntu自定义菜单_如何自定义Ubuntu的每日消息
  5. 网络串流_串流NFL足球的最便宜方式(无需电缆)
  6. ubuntu系统备份和还原_如何使用Aptik在Ubuntu中备份和还原您的应用程序和PPA
  7. pixel 解锁_如何在Google Pixel 4和Pixel 4 XL上禁用面部解锁
  8. Spring下载地址
  9. 使用putty连接linux
  10. Google图片加载库Glide的简单封装GlideUtils