二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • Nexus系列文章

  • Jenkins系列文章

    • Jenkins入门系列笔记汇总整理
    • 前言与介绍
    • Jenkins初始部署与简单配置
    • Jenkins各配置选项介绍
    • Jenkins中一个项目的构建
    • Jenkins配置项目构建的钉钉通知
    • Jenkins忘记管理员密码怎么办
    • Jenkins与gitlab的交互探微
    • Jenkins根目录详解
    • Jenkins插件之显示构建时间
    • Jenkins插件之批量修改配置
    • Jenkins配置简单构建邮件推送
    • Jenkins复杂邮件推送配置详解
    • Jenkins配置复杂构建邮件推送
    • Jenkins构建安卓项目之前的一些唠叨
    • Jenkins构建安卓项目配置
    • Jenkins与Gitlab分支的交互
    • Jenkins构建nodejs项目
    • 使用docker部署Jenkins及初始配置
    • 配置gitlab提交代码Jenkins自动构建
    • Jenkins回滚方案探微
    • Jenkins角色控制(小黄锁)探微
    • Jenkins构建的应用配置问题解决探微
    • Jenkins构建中tag的应用
      • 1,缘起。
      • 2,回滚功能。
        • 1,添加 mode 选项。
        • 2,再添加 branch 选项。
        • 3,添加 Git Parameter 选项。
        • 4,修改 shell 内容。
      • 3,验证。
        • 1,构建一。
        • 2,构建二。
        • 3,构建三。
    • Jenkins插件之Ansicolor(神器)
    • 最基础核心的Jenkins功能部署一个java应用
    • Jenkins+sonar构建代码扫描
    • Jenkins+docker+gitlab将应用部署到docker
    • Jenkins参数化构建犀利插件Active-Choices-Plugin
    • 记一次将代码中参数外显到构建历史中的操作
    • Jenkins升级与迁移的经验分享
    • pipeline笔记之从一个简单的项目构建开始
    • Jenkinsfile声明式语法详解
    • 自动构建的原始配置以及pipeline中的用法
    • 多分支构建的实践与思考
    • 使用Jenkinsfile类前端项目的部署与回滚
    • 如何在Jenkinsfile中定义一个全局的时间戳变量
    • Jenkins中自由风格回滚方案的最佳实践
    • Jenkins中pipeline风格回滚方案的最佳实践
    • pipeline结合ansible剧本进行批量的部署与回滚配置
    • 最近配置安卓iOS打包本地化流程中一些值得记录的内容
    • pipeline中如何在environment环节声明一个含有通配符的变量
    • git-Parameter插件在pipeline共享库中的实践详解
    • jenkins作为ci检测代码是否合并的实践
    • 将Jenkins共享库的Jenkinsfile放到ci静态检测的实践
    • Jenkins的pipeline实践之GitSCM参数配置项详解
    • Jenkins中pipeline对接CMDB接口获取主机列表的发布实践
    • Jenkins有任务无法kill提示即将关闭
    • Jenkins基于Share Library共享库的最佳实践探索
    • Jenkins结合MySql Database插件的平台化实践思路
    • Jenkins-Groovy中三元表达式的用法
    • Jenkins-Groovy中Switch的高阶用法
    • Jenkins-pipeline之利用activity choice插件对接查询MySQL数据实现动态参数化的功能
    • CentOS通过yum快速安装Jenkins
    • Jenkins-pipeline语法之错误处理详解(文末有干货)
    • Jenkins常用插件汇总以及简单介绍
    • Jenkins所遇报错汇总及解决
    • Jenkins管理维护运维规范
  • ELK笔记

  • Kubernetes笔记

  • LLM专题

  • 系列专题
  • Jenkins系列文章
二丫讲梵
2018-09-18
目录

Jenkins构建中tag的应用

文章发布较早,内容可能过时,阅读注意甄别。

# 1,缘起。

许多公司在做安卓的构建或者其他项目构建的同时,会有打tag到Gitlab的需求,这个需求的存在有其实在的价值意义,不仅仅让每一次我们发布过的代码有记录存留,也能够方便一些其他的功能(比如回滚),因此,今天就来说说这个事儿。

这个功能的实现依赖于 Jenkins 的 git 插件,不过一般都默认有安装。

先准备一个测试项目,内容如下:

image

然后来到 Jenkins 处,做一些简单的功能,能够用于测试验证即可。

执行 shell 处加一些简单的操作:

git pull origin master
echo "**********************************************"
cat README.md
echo "**********************************************"
1
2
3
4

进入正式配置之前需要先安装本文的主角Git Parameter插件,插件详情,可以点我查看。 (opens new window)

在构建后的操作中添加Git Publisher,然后如图中所示配置:

image

在构建后操作当中选择Git Publisher,然后如图配置:

  • 配置一:定义 tag 名称,release-$BUILD_NUMBER 这里取用了一个 Jenkins 的环境变量,用于每次的 tag 自增问题。
  • 配置二:选中,以表示创建一个新的 tag。
  • 配置三:要推送的项目。

接着我们构建一下看看效果:

image

看样子 tag 已经打好并且推送到远程服务器去了。

现在去 git 里边看看是否有了。

image

图中圈起来的地方可以看到,正好与我们构建此时对应的,创建了三个标签。

现在我们模拟开发,更改一下项目文件内容,然后再构建一下看看情况。

来波操作:

Administrator@liqilong MINGW64 ~/Desktop/gittest/eryajf (master)
$ echo "第二次添加内容用于测试" >> README.md

Administrator@liqilong MINGW64 ~/Desktop/gittest/eryajf (master)
$ git commit -a -m "add two"
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory.
[master 822b2f3] add two
 1 file changed, 1 insertion(+), 1 deletion(-)

Administrator@liqilong MINGW64 ~/Desktop/gittest/eryajf (master)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 307 bytes | 76.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To 192.168.106.70:linux/eryajf.git
   635b61c..822b2f3  master -> master
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

然后再去构建一下:

image

第四次构建,已经看到刚刚模拟开发所添加的内容了。

那么现在,就可以引出这个自动打 tag 的功能所带来的另外一个大方便了,那就是方便回滚。

# 2,回滚功能。

我们可以在参数化构建当中进行参数的定义,依赖于 Git 版本控制的特性,当用户选择的是构建时,可以选择对应的分支进行构建,当用户选择的是回滚是,那么可以选择对应的 tag 进行回滚。事实上与分支的构建回滚是一个道理,不过这里直接选择 tag,也非常方便。

那么在验证之前,我们需要对 Jenkins 进行一些小小的调整,通过添加刚刚表述的参数,以及执行的 shell 的配合,来完成这样一个构建回滚各有分工的一个事情。

# 1,添加 mode 选项。

在参数化构建过程中先添加一个选项参数,从而让构建以及回滚两种情况存在。具体配置如图:

image

# 2,再添加 branch 选项。

然后添加一个用于构建不同代码分支的字符参数,这个是一个很常规的配置,就不做过多介绍,具体如图:

image

# 3,添加 Git Parameter 选项。

然后添加一个用于回滚不同 tag 的选项,这里的 tag 是我们项目自动生成的,随后会做一下总结,具体如图:

image

# 4,修改 shell 内容。

修改一下 shell 的执行内容,做一个简单判断,脚本如下:

cd $WORKSPACE
if [ $mode == "deploy" ];then
    git checkout $branch
    git pull
    echo "**********************************************"
    cat README.md
    echo "**********************************************"
else
    git reset --hard $tagbak
    echo "**********************************************"
    cat README.md
    echo "**********************************************"
fi
1
2
3
4
5
6
7
8
9
10
11
12
13

如果你对 Jenkins 熟悉的话,那么看到这个地方,估计就已经能够知道,上边的功能是什么了。

我们的开发进行日常开发,然后进行日常构建,一切就走分支这一条了,没 tag 这边啥事儿,只不过在每次构建的时候,都创建一个与构建历史数一致的 tag,为了不让这个 tag 浪费,那么我们就废物利用,通过这个自动生成的 tag,实现了回滚的功能。

开发同学专注开发(branch),运维同学专注部署(deploy),一旦需要回滚(rollback),利用程序自动生成的 tag(tag)来进行回滚咯。这,就是各有分工。

ok,最后是验证的时刻了。

# 3,验证。

验证也非常简单,通过三次构建即可验证:

  • 构建一:初始内容,正常构建。
  • 构建二:添加内容,正常构建。
  • 构建三;直接回滚,验证结果。

# 1,构建一。

为了更清晰的看实验效果,我将刚刚的历史清空,重打鼓另开张,新建一个项目进行测试。

现在准备出测试文件,内容如下:

image

进行常规构建:

image

# 2,构建二。

模拟开发,添加内容:

image

进行常规构建:

image

# 3,构建三。

直接通过 tag 进行回滚。

image

然后查看构建结果:

image

注意我圈住的地方,基本上就是按我们所想的所走的,而结果,也正是我们所想要的。

本篇文章需要一定的基础,从而才能够顺畅阅读以及实践,除此之外,更需要大量的耐心,诚心,进行钻研学习,从而才能够真正在此,有所收获。

微信 支付宝
#jenkins#gitlab
上次更新: 2024/07/04, 22:40:37
Jenkins构建的应用配置问题解决探微
Jenkins插件之Ansicolor(神器)

← Jenkins构建的应用配置问题解决探微 Jenkins插件之Ansicolor(神器)→

最近更新
01
学习周刊-总第212期-2025年第21周
05-22
02
从赵心童世锦赛夺冠聊聊我的斯诺克情缘
05-16
03
学习周刊-总第211期-2025年第20周
05-15
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式