python 调用Jenkins的API进行发布
| |
| 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.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 |
| |
| return image_full_name |
| |
| |
| 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) |
| |
| post_build_jobs(backup_jobs) |
| |
| front_jobs = get_jenkins_job(prod_front_url,front_auth) |
| |
| post_front_jobs(front_jobs,front_auth) |
| |
| |
| def check_service(srcs,dests,rpstr): |
| |
| 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() |
| |
| 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' |
| |
| pord_bakup_url = 'http://jenkins.test.com/view/Prod-Back/api/json?pretty=true' |
| prod_auth = ('admin', 'admin_token') |
| |
| prod_front_url = 'http://jenkins.test.com/view/Prod-Front/api/json?pretty=true' |
| front_auth = ('admin', 'admin_token') |
| 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 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通