jenkins构建状态及参数传递

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。  

 现在需要在任务二中获取这三个参数。

任务一,jenkins配置:

构建后操作,增加构建后操作步骤,选择“Trigger parameterized build on other projects”

 

 任务二,jenkins配置:

用于获取上面任务一的四个参数的值,

 (1)General参数化构建过程,重新定义字符参数,跟上面的Predefined parameters保持一致

 

 (2)构建选择“执行shell”,打印看是否能获取到

 

 效果图:

试着改掉任务一的发布分支:branch,也没有问题

 

 

posted @ 2022-05-17 21:58  windysai  阅读(5729)  评论(0编辑  收藏  举报