任务二:更新版本号
根据任务一的构建状态为成功才执行(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。
现在需要在任务二中获取这三个参数。
任务一,jenkins配置:
构建后操作,增加构建后操作步骤,选择“Trigger parameterized build on other projects”
任务二,jenkins配置:
用于获取上面任务一的四个参数的值,
(1)General参数化构建过程,重新定义字符参数,跟上面的Predefined parameters保持一致
(2)构建选择“执行shell”,打印看是否能获取到
效果图:
试着改掉任务一的发布分支:branch,也没有问题