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

python调用Jenkins的API进行发布

python调用Jenkins的API进行发布#pipinstallpyyaml5.4.1importjsonimportrequests,sys,os,timeimportreq

python 调用Jenkins的API进行发布

# pip install pyyaml==5.4.1
import json
import requests,sys,os,time
import requests,sys
from requests.auth import HTTPBasicAuth
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
login = HTTPBasicAuth('user', 'passwd')
baseurl = "harbor.test.com/"
harborurl = 'https://harbor.test.com/api/v2.0/projects/'
# 去除requests 库的ssl忽略证书的告警
requests.packages.urllib3.disable_warnings()
# 获取后端镜像仓库
def get_images_tags(servicename,env):

tag_url = harborurl + env +'/repositories/' + servicename + "/artifacts"
get_tags = requests.get(tag_url, auth=login, verify=False).json()
for tag in get_tags:
tag = tag["tags"][0]["name"]
image_full_name = baseurl + env+'/' + servicename + ":" + tag
# print(image_full_name)
return image_full_name
# 获取后端job
def get_jenkins_job(backurl,auth):
jobs = requests.get(backurl,auth=auth).json()["jobs"]
build_jobs = [] # 构建项目名称
for job in jobs:
if job['color'] != 'disabled':
build_jobs.append(job['name'].lower())
return build_jobs
# 构建后端应用
def post_build_jobs(srvlist):
for service in srvlist:
servername = service[10:]
imagename = get_images_tags(servername, "prod")
if imagename == None:
print('该 ',servername, ' 服务没有查到镜像,请检查')
continue
build_job_url = pord_bakup_url + service + '/buildWithParameters?imagename=' + imagename
res = requests.post(build_job_url, auth=prod_auth)
print(servername, 'build!', res)
time.sleep(5)
# 构建前端应用
def post_front_jobs(srvlist, auth):
for service in srvlist:
servername = service[11:]
build_job_url = prod_front_url + service + '/build'
print(build_job_url)
res = requests.post(build_job_url, auth=auth)
print(servername, 'build!', res)
time.sleep(5)
# 全部构建
def all_build():
# 后端更新
backup_jobs = get_jenkins_job(pord_bakup_url,prod_auth)
# print(backup_jobs)
post_build_jobs(backup_jobs)
# 前端更新
front_jobs = get_jenkins_job(prod_front_url,front_auth)
# print(front_jobs)
post_front_jobs(front_jobs,front_auth)
# 检查应用是否存在
def check_service(srcs,dests,rpstr):
# print(srcs,dests)
for svc in srcs:
if rpstr + svc not in dests:
print(rpstr + svc)
print('服务:',svc,'名称错误或不在Jenkins构建任务中,请检查')
sys.exit()
# 按需构建
def get_server_list(sfile):
f = open(sfile)
data = f.read().replace(' ','').replace('\r', '').replace('\n', ',').replace('-h5','').split(',')
f.close()
# print(type(data),data,data.index('backup:'),data.index('front:'))
bkup = data[data.index('backup:')+1:25]
frOnt= data[data.index('front:')+1:]
backup_jobs = get_jenkins_job(pord_bakup_url,prod_auth)
front_jobs = get_jenkins_job(prod_front_url,front_auth)
check_service(bkup,backup_jobs,'prod-back-')
check_service(front,front_jobs,'Prod-Front-')
return bkup ,front
# 主函数 开始执行体
if __name__ == "__main__":
# 服务列表的填写文件
filepath = os.path.split(os.path.realpath(__file__))[0] + '\\' + 'deploy_list.yml'
# 后端视图url
pord_bakup_url = 'http://jenkins.test.com/view/Prod-Back/api/json?pretty=true'
prod_auth = ('admin', 'v8eqct4xyh02sp1lmwr56gf3nkjz9ba7')
# 前端视图 url
prod_front_url = 'http://jenkins.test.com/view/Prod-Front/api/json?pretty=true'
front_auth = ('admin', 'v8eqct4xyh02sp1lmwr56gf3nkjz9ba7')
chose_id = input('''请选择发布的内容:
1、all——前后端全部发布
2、backend——后端全部发布
3、front——前端发布
4、跟进配置指定发布:
''')
if chose_id == '1': # 全部构建
print(chose_id)
all_build()
elif chose_id == '2': # 所有后端
print(chose_id)
backup_jobs = get_jenkins_job(pord_bakup_url,prod_auth)
post_build_jobs(backup_jobs)
elif chose_id == '3': # 所有前端
print(chose_id)
front_jobs = get_jenkins_job(prod_front_url,front_auth)
post_front_jobs(front_jobs,front_auth)
elif chose_id == '4': # 按需发布
print(chose_id)
backup,frOnt=get_server_list(filepath)
print(backup,front)
else:
print("输入错误,结束发布!")

deploy_list.yml

backup:
test1
test2
test3
front:
test1
test2
test3


推荐阅读
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
author-avatar
圣友家具简章da
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有