热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

py调jenkins接口发布部署到生产

py调jenkins接口发布-部署到生产偷偷利用工作时间写博(嘘。。),长话短说,接上一篇文章:py调jenkins接口发布-回调函数优化篇【https:www.cnblogs

py调jenkins接口发布-部署到生产

  偷偷利用工作时间写博(嘘。。),长话短说,接上一篇文章:py调jenkins接口发布-回调函数优化篇【https://www.cnblogs.com/windysai/p/16727930.html】

  优化成,一个脚本打天下!!!因为发布的jenkins任务发布分支不是完全一样的,有些发master,有些发xxx分支,所以加多个判断关键字子串函数,来选取合适的发布分支。这样生产环境直接这样调发布:

  我写python是渣渣,特意纪念下,哈哈哈~~跟前面大部分重复,请读者见谅 ^___^

python 脚本名.py 发布任务名

      还有注意,如果在 jenkins 配置了参数化构建任务,

构建任务要加 param_dict,即:

server.build_job (jobname, parameters=param_dict)

  

1 #!/usr/bin/python3.6
2 #coding=UTF-8
3
4 '''
5 输入:jenkins服务器的地址,用户名和密码
6 输出:已构建任务的状态
7 '''
8 import requests
9 import datetime, time
10 import timeit
11 import jenkinsapi
12 import jenkins
13 import sys
14 import random
15
16 from jenkinsapi.jenkins import *
17 from jenkinsapi.job import *
18 from jenkinsapi.build import Build
19
20 '''
21 1、根据job名关键字,决定发布分支名
22
23 '''
24 def check(string, sub_str):
25 if (string.find(sub_str) == -1):
26 return False
27 else:
28 return True
29
30 '''
31 2、回调函数,每3秒请求jenkins接口,获取构建结果
32
33 '''
34 def mainfunc(func):
35 '''
36 :param func: callback func Name
37 :return:
38
39 '''
40 global msg2, end
41 #根据callback返回的状态,决定是否进行下一步操作
42 while True:
43 #如果为true,就执行下一步,否则,再次调用func获取状态结果
44 flag = func()
45 if flag:
46 print('step2: 发送信息')
47 end = timeit.default_timer() #执行任务结束时间
48 spend = end - start
49 spend = round(spend, 2) #秒:保留两位小数
50 print("执行时间为: 秒", spend)
51
52 msg2 = msg2 + job_status + '\n' + '执行时间为: ' + str(spend) + ''
53 print("msg2 = ", msg2)
54
55 send_msg(msg2) #钉钉通知
56 break
57
58 def callback():
59 '''
60 :return: jenkins job build state
61 '''
62 # jenkins构建job需要至少x分钟,所以每隔3秒请求一次
63 global job_status, last_build_number
64
65 print("进入callback函数。。。")
66 last_build_number = server.get_job_info(jobname)['lastBuild']['number']
67 print("构建中,任务构建编号:", last_build_number)
68 job_status = server.get_build_info(jobname, last_build_number)['result']
69
70 time.sleep(3)
71 print("任务状态为:", job_status)
72 print('-' * 30)
73 if job_status == 'SUCCESS':
74 print('step2: jenkins 构建完成!')
75 return True
76 elif job_status == 'ABORTED':
77 print('step2: jenkins 任务被中断,请重新构建!')
78 return True
79 elif job_status == 'FAILURE' or job_status == 'UNSTABLE':
80 print('step2: jenkins 任务构建失败!')
81 return True
82 # 构建中
83 else:
84 # 再等3秒
85 time.sleep(3)
86 print('step2: jenkins 正在构建。。。')
87 return False
88
89
90 '''
91 3、钉钉通知
92
93 '''
94 def send_msg(text):
95 start = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
96 headers = {'Content-Type': 'application/json;charset=utf-8'}
97 api_url = "钉钉机器人token"
98 json_text= {
99 "msgtype": "text",
100 "text": {
101 "content": '当前时间' + str(start)
102 + '\n' + text
103 },
104 "at": {
105 "atMobiles": [
106 "加一我的手机号码"
107 ],
108 "isAtAll": False
109 }
110 }
111 result = requests.post(api_url,json.dumps(json_text),headers=headers).content
112 print(result)
113
114
115 if __name__=="__main__":
116 jobname = sys.argv[1]
117
118 url = "jenkins登录地址"
119 username='jenkins登录用户'
120 password='jenkins登录用户密码'
121 # 实例化jenkins对象,连接远程的 jenkins server
122 server = jenkins.Jenkins(url, username, password)
123
124 last_build_number = server.get_job_info(jobname)['lastBuild']['number']
125 print("未构建前,main 初始化,任务最近一次构建编号:", last_build_number)
126
127 sub_str ="xxx_前端"
128 sub_str2 ="xxx_平台"
129
130 # (1) 根据不同发布任务,选择构建分支
131 if check(jobname, sub_str) or check(jobname, sub_str2):
132 param_dict = {'BRANCH': '分支名1'}
133 print("构建参数,分支名为:分支名1 。。。")
134 else:
135 param_dict = {'BRANCH': '分支名2}
136 print("构建参数,分支名为:分支名2 。。。")
137
138 print('step1: 开始构建 任务')
139 print('-' * 20)
140 msg1 = jobname + "--- step1:开始构建任务"
141 msg2 = jobname + "构建结果:"
142
143 send_msg(msg1)
144
145 # (2) 构建任务
146 server.build_job(jobname, parameters=param_dict)
147
148 # (3) 任务开始执行时间
149 start = timeit.default_timer()
150
151 # (4) 任务执行结束时间,到时函数里面修改
152 end = timeit.default_timer()
153
154 # (5) 任务等待时间:90秒,取需要发布任务的最短持续时间, 然后开始请求
155 time.sleep(90)
156
157 # (6) 任务一开始构建中,状态为: none
158 job_status = 'None'
159
160 # (7) 90秒后不断请求jenkins任务状态
161 mainfunc(callback)

 

 

 

 

 



推荐阅读
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
author-avatar
最爱一片小舟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有