添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

一、发布瓶颈

在jenkins的使用中,一般都会为每一个应用服务都创建一个独立的Job。在日常各个环境(测试、预发、生产)升级发布的过程中,比较传统的做法是在Jenkins中对每一个要发布的应用都依次点击Build。

如果模块比较少,那这种方法没啥毛病。但是我这边一共有30多个微服务模块,这时候如果还是用这种点击每一个模块去构建发布的方法,显然是一种不够效率的做法。

二、改进思路

注意!!!我觉得这里有必要先说一下前提:我这里测试、预发、生产这些环境使用的是固定的分支,就是Build的时候不需要再选择分支了。不然在后面的远程调用如果要选择分支的话,有点麻烦。虽然可以传参数,但是如果每次发布的分支不一样,还要改配置,确实很麻烦,我觉得也没必要用这种checkbox的方法了,还不如直接每个模块自己手动点过去发布呢。

在Jenkins中创建一个新Job,通过checkbox展示所有的模块,在需要发布时勾选要发布的模块,然后再通过调用Jenkins的api来执行相应模块的Build。

1、多选框的实现

1)安装插件

这里需要安装的插件是 Extended Choice Parameter ,如下图:
在这里插入图片描述
2)插件使用

在"General"中的"参数化构建过程"中,点击"添加参数",并选择"Extended Choice Parameter"。
在这里插入图片描述
在"Extended Choice Parameter"中填写数据,我这边以"前台"为例(因为我们项目分为前台、中台、微服务,所以我会添加三个"Extended Choice Parameter"):
在这里插入图片描述

Name :变量名,后面脚本中会调用
Description :对此参数的描述
Parameter Type :根据实际需求,这里选择CheckBoxes最为方便
Number of Visible Items :设置下拉多选框的可见范围,大于或等于CheckBox可选值的数量即可
Delimiter :设置参数的分隔符,特别注意!!!这里的默认值是逗号,我这里换成了空格(并不是没有值!),这样传给shell脚本的时候就不用再做处理了。
Value :参数的值,把前台的服务名填写进去,使用逗号做分隔。这里不能使用空格的原因是使用空格的话,会把整个字符串当成一个参数。
Default Value :设置默认值。当多选框没有选择任何值的时候,就使用这个参数。例如我这里设置成null,在shell脚本中可以利用这个值来做判断:

if [ "$frond_ground" == "" ];then
    echoGreen "前台没有要发布的模块!"

测试一下:

按照上面的方法,再添加两个Extended Choice Parameter,将中台和微服务也加上。并且在下面的执行shell中将选择的参数给打印出来。
在这里插入图片描述
在构建的时候,我这边选择几个模块,看能否正常取到值。
在这里插入图片描述
输出结果如下:
在这里插入图片描述
从上面输出结果可以看出,可以正常取到参数值。

2、调用Jenkins-api来Build各个模块

其实Jenkins有很多的API,官方文档中也是做了详细的介绍。如果有时间的话,完全可以根据API把jenkins集成到运维平台上去。

1)远程调用Build的方法

这里所要使用的是比较基础的"远程调用Build"API,官方给出的命令如下:

curl JENKINS_URL/job/JOB_NAME/buildWithParameters \
  --user USER:TOKEN

2)创建用户并生成TOKEN

由上面的命令可以看到需要使用到用户的TOKEN,我这里创建了一个名为rest的用户,并授予这个用户所有环境的权限(具体的创建用户和授权的过程这边就不展开了,之前都有写过的)。

然后用这个rest用户登录jenkins,并生成TOKEN:
在这里插入图片描述
点击Jenkins页面中右上角的用户下拉菜单中的"设置",进入用户设置页面。
在这里插入图片描述
点击"添加新Token",给rest用户生成Token,并且将Token的值拷贝出来备用。

结合上面的checkbox中传过来的参数,脚本如下:

#!/bin/bash
jenkins_baseurl="http://192.168.0.111:8080"
jenkins_user=rest
jenkins_token="11f0d371b2ae670af82f190b3be8e88d2d"
for project in $frond_ground $middle_ground $microservice_module
    echoGreen "发布server1中的$project服务"
    curl -X POST ${jenkins_baseurl}/job/online_${project}/buildWithParameters --user ${jenkins_user}:${jenkins_token}
    sleep 3

这样就实现了批量构建的效果了。

四、完整配置文件

其中shell脚本中的switch_nginxswitch_eureka是我为了不影响用户的使用(做到用户无感发布),用来做生产内环境切nginx流量和eureka中模块的上下线用的,在本文中可以先忽略掉这两个步骤。

参考文章:
https://www.jenkins.io/doc/book/using/remote-access-api/

一、发布瓶颈在jenkins的使用中,一般都会为每一个应用服务都创建一个独立的Job。在日常各个环境(测试、预发、生产)升级发布的过程中,比较传统的做法是在Jenkins中对每一个要发布的应用都依次点击Build。如果模块比较少,那这种方法没啥毛病。但是我这边一共有30多个微服务模块,这时候如果还是用这种点击每一个模块去构建发布的方法,显然是一种不够效率的做法。二、改进思路注意!!!我觉得这里有必要先说一下前提:我这里测试、预发、生产这些环境使用的是固定的分支,就是Build的时候不需要再选择分支了
背景jenkins自带的参数化不支持多选框,不过有插件支持:Extended Choice Parameter Plug-In插件地址: https://plugins.jenkins.io/extended-choice-parameter Name -- 定义变量名 Parameter Type -- check boxes 复选框
场景过多时,每次单个场景设置定时和邮件通知,不仅很麻烦,还会收到很多邮件,博主利用多任务插件,将很多job,放到一个主job下,这样,只需要在主job中配置构建命令和邮件通知,方便很多 一、下载多任务插件MultiJob Project 二、下载完后,新建一个任务,在配置页,点击”增加构建步骤“---->”MultiJob Phase“ 多任务存在依赖关系,但是我们现在的场景是单个的,没有依赖关系,所以在增加任务时,可以点击高级,设置一下依赖关系为never,意思是忽略其他的job执行结果。 1、脚本中尽量使用双引号,单引号中使用变量会出问题 2、远程执行shell脚本中的内部的“$”符号需要斜杠转义,包括变量和正则表达式的使用,流水线中的全局变量则不需要转义直接使用 3、远程执行shell脚本说明 1)使用“Publish over SSH”插件上传jar包到服务器 2)修改jar文件名称,在名称后面
jenkins有一个参数text种类,它能够以文本的段落拷贝作为参数newlispThe program receives parameters are separated by spaces,更好的方法是在jekis的console内部通话newlisp当用双引号脚本,实例:cd code ./mail.lsp ${receiver} ${title} "${msg}"这里${msg}文本参...
##场景: 在微服务、分布式架构中,服务拆成了多个服务,使用Jenkins部署服务时,如果微服务过多, 一个个的在Jenkins里部署也是挺麻烦的,可以使用Multijob插件管理多个Job, 这样项目部署时,只需要构建聚合Job就可以启动多个微服务。 一、准备工作 1.安装部署Jenkins 2.配置job 3.将多个Job聚合在一个Job中启动 Jenkins的安装部署方式很多,可参考这里 链接 job的配置和基本使用可参考这里 链接 如果已经完成了前两步,或是环境中已经集成好了这
1,首先增加Jenkisn插件 https://wiki.jenkins-ci.org/display/JENKINS/Extended+Choice+Parameter+plugin  需要安装插件“Extended Choice Parameter plugin”,它可以扩展参数化构建过程,直接在管理界面增加。  比如一个工程下面有多个服务的时候需要参数部署,比如maven下面有
3、插件使用 jenkins实例中选: This project is parameterized (参数化构建过程)->添加参数 -> Extended Choice Parameter 填写参数名称和描述,勾选Basic Parameter Types选项 实现过程: jenkins自带的参数化不支持多选框,不过有插件支持:Extended Choice Parameter Plug-In插件地址: https://plugins.jenkins.io/extended-choice-parameter Name -- 定义变量名 Parameter Type -- check boxes 复选框