复杂发布场景概述
在企业中,要实现敏捷开发,必须结合jenkins的众多插件来实现更牛逼的特性。
思考一个问题:==企业中究竟如何进行管理项目发布的?代码的回滚怎么做?==
- 开发环境:一般在本地机房,前后端开发联调,后端改动代码后即可实时在开发调试环境更新,供前端自行调试。
- 测试环境:一般在本地机房,不同迭代对应不同的测试环境,如何保证环境不冲突,交付测试后如何最快通知相关人员跟进
- 离线/灰度/UAT环境:目前大部分在云环境上构建
- 生产环境:云服务器环境,如何快速备份发布多个节点,发布成功的通知
- 移动端:安卓、IOS打包后通知相关人员下载
开发测试环境在本地机房,生产环境在云服务器,如何做jenkins主从节点
Docker的构建、K8S构建等
参数化构建
背景:每次构建项目时都需要去修改一下配置,然后保存,再去立即构建。这样修改容易修改出错误,影响到执行脚本,且每次都要去修改配置,不容易修改,操作也比较麻烦。就像我们写固定代码一样,但有了参数后,代码的复用性大大提高,我们可以根据具体的参数做不同的操作,比如1是发布,2是回滚。
//没有参数化构建
public int add(){
return 1 + 2;
}
//参数化构建
public int add(int a,int b){
return a+b;
}
//从上面两个简单的可以看出 代码的复用性大大提高
我们需要使用到两个插件
插件:Build with Parameters
和Extended Choice Parameter
,默认已经安装
其中用得最多的是String Parameter和选项参数:String Parameter
:就是一个使用字符串值的参数变量Choice
:给出多个选项,构建时可以手动选择参数,默认是Coices内的第一行数据
启动测试:
我们会发现这里需要我们填写数据,而且这些数据我们也可以获取到。
通过参数化构建,我们可以取到构建人员究竟是想根据参数做什么操作,我们可以提前在shell脚本中做好对应的判断,比如1-是发布,我们可以调用发布的脚本代码,0-回滚,可以通过参数判断调用回滚的代码。
项目更新消息推送
消息推送的本质就是拿到机器人的token值,在jenkins自动拉取项目之后,通过shell脚本的执行来达到实时信息的推送的效果!
消息推送一般有如下几种:企业微信群消息、钉钉群消息、飞书群消息、邮箱提醒、短信提醒等。
前3种是企业中首选,3种基本差不多,这里我以钉钉群消息推送为例,首选你需要有一个钉钉群,可以自己拉3个人建一个,然后在群管理中加一个机器人,如下:
添加好后你会得到一个钉钉提供给你的URL链接,里面包含有机器人的token主要用来接收消息我的如下:
#由于token不能外露,这里仅展示一部分
https://***.dingtalk.com/robot/***?access_token=***********3b3724917e21cc47055
我们先实现最基本的推送,组装如下的内容:
#!/bin/bash
#-*- coding:utf-8 -*-
Message='测试环境 nanjustar 发布,所有接口受到影响,当前时间:2021/7/14'
curl 'https://***.dingtalk.com/robot/***?access_token=***********3b3724917e21cc47055' \
-H 'Content-Type: application/json' \
-d "
{\"msgtype\": \"text\",
\"text\": {
\"content\": \"$Message\"
}
}"
实际上上述内容非常简单,利用shell的curl命令,远程调用该url,并传入对应的消息body体,body体为钉钉要求的格式。
在jenkins
的任务中添加shell执行脚本,将内容复制到jenkins
中.
为了可以获取到用户信息,我们安装Build User Vars Plugin
插件:
安装后可拿到的用户信息:
Variable | Description | 说明 |
---|---|---|
BUILD_USER | Full name (first name + last name) | 全名 |
BUILD_USER_FIRST_NAME | First name | 名字 |
BUILD_USER_LAST_NAME | Last Name | 姓 |
BUILD_USER_ID | Jenkins user ID | jinkins 用户ID |
BUILD_USER_EMAIL | Email address | 用户邮箱 |
在配置项目的时候一定要勾选Set jenkins user build variables
最终推送代码:
#!/bin/bash
#-*- coding:utf-8 -*-
if [ $type = 1 ];then
typeDesc="发布"
else
typeDesc="回滚"
fi
pname='\n项目名称:'${JOB_NAME}
vv='\n项目版本号:'${version}
handler_type='\n操作类型:'${typeDesc}
build_time="\n触发时间:$(date +%F-%T)"
build_u='\n触发人员:'$BUILD_USER_ID
Message='发布完成'${pname}${vv}${handler_type}$build_time${build_u}
curl 'https://***.dingtalk.com/robot/***?access_token=***********3b3724917e21cc47055' \
-H 'Content-Type: application/json' \
-d "
{\"msgtype\": \"text\",
\"text\": {
\"content\": \"$Message\"
}
}"
测试成功!
按分支发布
在实际开发过程中,一般会使用Git Flow流程开发,多个迭代伴随着多个分支,比如develop、release、master等分支,所以存在发布同分支代码的情况。
在jenkins拉取项目时,他默认的只会去mstaer分支去拉取,但是真正的开发中会有很多的分支。但是我们也不可能每次拉取都去配置中修改分支目录,所以我们在这里用配合参数化构建
来进行配置。
选择指定分支发布,需要借助Git Parameter插件,也就是参数化构建中可选Git参数,插件安装如下:
插件添加之后我们会发现多了一个Git参数的选项: