python-實現自動調用jenkins發版發版


import json
import jenkins
import requests
import os
from config import settings

# 需要發版的版本號:從jenkins參數中獲取
version_branch = os.environ['version']

# 不同項目harbor鏈接  注意:harbor_url_list必須與pooltest_item_list中的先后順序一一對應
harbor_url_list = [
此處保密
]

# 發版xxx環境項目
pooltest_item_list = [
此處保密
]

# 需要發版的環境
wanted_environment = pooltest_item_list

# 鏈接jenkins
username = xxx  # jenkins 用戶名
password = xxx  # jenkins 密碼
server = jenkins.Jenkins(r'jenkins地址', username=username,password=password)


# 獲取最后一次構建鏡像版本
def last_successful_image():
    last_successful_image = []
    for ever in wanted_environment:
        lastID = server.get_job_info(ever)["lastSuccessfulBuild"]['number']#獲取最后一次構建ID
        # print(lastID)
        last_build_info = server.get_build_info(ever, lastID)#獲取最后一次構建新型(可以從此方法中獲取很多想要的東西,包括最新鏡像版本其實也可以從這里得到,無需從harbor獲取)
        last_build_image = last_build_info['actions'][0]['parameters'][0]['value']#獲取最后一次構建鏡像版本
        last_successful_image.append(last_build_image)
        # print(ever+' : '+str(lastID)+' : '+last_build_image)
    return last_successful_image #返回最后一次構建鏡像的列表


# 訪問harbor接口獲取所有鏡像
def image_all():
    image_list = []
    requests.packages.urllib3.disable_warnings()  # 屏蔽錯誤提醒
    s = requests.session()
    s.auth = ('用戶名', '密碼')  # 鏈接harbor環境
    for ever in harbor_url_list:
        r = s.get(ever, verify=False)
        r1 = json.loads(r.text)
        image_list.append(r1)
    return image_list


# 獲取最新鏡像
def newest_image():
    image_list = []
    for image_single_items in image_all():
        for row in reversed(image_single_items):  # 倒序遍歷鏡像列表
            name = row['name']
            if name[2:7] == version_branch:
                image_list.append(name)
                break  # 匹配到相關版本的鏡像后跳出循環
    # print(image_list)
    return image_list


# 調取jenkins自動發版
def auto_build():
    # 循環遍歷不同項目進行發版
    for i in range(0, len(wanted_environment)):
        if newest_image()[i] != last_successful_image()[i]:
            server.build_job(wanted_environment[i], {'IMAGE_VERS': newest_image()[i]}) #方法build_job print({wanted_environment[i]: newest_image()[i]})
        else:
            continue


if __name__ == '__main__':
    auto_build()


 

注釋:上面標紅的為jenkins庫的一些方法,詳見下述

1. jenkins庫安裝

   sudo pip install python-jenkins

2. 庫的使用

   import jenkins

     #定義遠程的jenkins master server的url,以及port

     jenkins_server_url='xxxx:xxxx'

     #定義用戶的User Id 和 API Token,獲取方式同上文

     user_id='xxxx'

     api_token='xxxx'

   #實例化jenkins對象,連接遠程的jenkins master server

   server=jenkins.Jenkins(jenkins_server_url, username=user_id, password=api_token)

 

   不帶構建參數:

     #構建job名為job_name的job

   server.build_job(job_name)

 

   帶參數構建:

   #String參數化構建job名為job_name的job, 參數param_dict為字典形式,如:param_dict= {"param1":“value1”, “param2”:“value2”} 

   server.build_job(job_name, parameters=param_dict)

 

   #獲取job名為job_name的job的相關信息

   server.get_job_info(job_name)

 

   #獲取job名為job_name的job的最后次構建號

   server.get_job_info(job_name)['lastBuild']['number']

 

     #獲取job名為job_name的job的某次構建的執行結果狀態

   server.get_build_info(job_name,build_number)['result']

     

     #判斷job名為job_name的job的某次構建是否還在構建中

   server.get_build_info(job_name,build_number)['building']

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM