作者:mobiledu2502926703 | 来源:互联网 | 2023-08-18 16:10
jenkins构建状态及参数传递一、获取构建状态之前做的jenkins每次发布更新项目版本号,是不管发布成功与否,版本号都会递增1,现在加多了判断,构建成功才递增。于是,需
jenkins构建状态及参数传递
一、获取构建状态
之前做的jenkins每次发布更新项目版本号,是不管发布成功与否,版本号都会递增1,现在加多了判断,构建成功才递增。
于是,需要从原来一个任务拆分为两个任务:(1)仅发布; (2)根据(1)的发布状态结果,进行更新版本号。
一开始实现的时候,是利用python去调jenkins接口:获取任务(1)构建状态的结果,构建成功,再读取临时文件来记录的版本号,更新项目文件的.env和jenkins控制台显示的版本号(可能说的有点跳)。
大家直接看效果:
任务一:纯项目发布
注意,新增了临时文件admin_version_tmp.txt,用于记录发布信息。下面的几行被我注释了(不管构建成功与否版本号都递增1),现在要改逻辑。
(后面还有归档成品,然后ssh到远程机器发布,这里没截完全图)
任务二:更新版本号
根据任务一的构建状态为成功才执行(if 判断)
其中获取任务一构建状态的脚本:get_build-stat.py,内容如下
#!/usr/bin/python3.6
#coding=UTF-8
'''
输入:jenkins服务器的地址,用户名和密码
输出:某job最近一次构建状态
'''
import datetime, time
import jenkinsapi
import jenkins
from jenkinsapi.jenkins import *
from jenkinsapi.job import *
from jenkinsapi.build import Build
def Url_Get_Job_List(url='jenkins地址', username='jenkins登录用户', password='jenkins登录密码'):
server = jenkins.Jenkins(url, username, password)
name = "加一的测试任务"
lastbuildNumber=server.get_job_info(name)['lastBuild']['number']
#print(lastbuildNumber)
build_state = server.get_build_info(name,lastbuildNumber)['result']
print(build_state)
Url_Get_Job_List()
为啥name要用中文,而且首行写的是python3,因为按常理来说,很多jenkins任务名字都是中文的,python2.7的版本不能直接解析中文名
所以要装python 3版本,且装相关jenkins模块
pip3 install python-jenkins jenkinsapi
后来我想想,其实这个get_build-stat.py 是有点多余的,因为任务一配置“构建其他工程”时其实已经设置有条件:构建稳定!等价于构建不成功就不触发这个任务执行。
二、参数传递
在上面实现中,我用到一个临时文件:admin_version_tmp.txt来记录当前发布版本号,让任务二根据任务一状态成功去读取,大家有没有想过其实这种做法是不太严谨的。有可能出于某种原因这个文件没有更新(读了上一条旧的记录),或者删掉找不到,以至于任务二无法更新版本号。
于是就有我第二个需求的研究了:两个任务之间传递参数。任务一的参数(上一个版本号、当前版本号等)能被任务二读取到!
需要用到参数化触发器插件:Parameterized Trigger Plugin。
今天也挺折腾的,因为是在内网虚拟机jenkins测试,jenking版本比线上低,线上装参数化触发器插件需要重启jenkins,担心起不来不敢乱动,公司的人今天也需要频繁发布别的任务,所以只能尽可能把线上两个关于版本号更新的任务搬到线下。需要装回动态参数插件:Dynamic Parameter(jenkins控制台显示版本号),期间一直装不上,说有些依赖装不成功,又说要升级jenkins(备份了快照试了好几个版本的war更新包),后来改为用0.1.1的版本就解决了,线上版本则为0.1.2。
这篇文章给我莫大的帮助:http://www.noobyard.com/article/p-uuboptrs-sa.html
之前查的文章大部分都说该插件只能传递jenkins内置变量。。。。
jenkins配置:
任务一:发布分支和动态参数插件Dynamic Parameter,都不用动,分别还是branch,还有 old_version 和 new_version。
现在需要在任务二中获取这三个参数。
任务一配置: