利用jenkins的api來完成相關工作流程的自動化


[本文出自天外歸雲的博客園]

背景

1. 實際工作中涉及到安卓客戶端方面的測試,外推或運營部門經常會有很多的渠道,而每個渠道都對應着一個app的下載包,這些渠道都記錄在安卓項目下的一個渠道列表文件中。外推或運營部門經常會有新的渠道產生,而為了這些新增的渠道我們會將渠道配置到渠道列表文件中並push代碼,但是並不會為此在jenkins上重新進行一次整體構建。針對這些新增的零散渠道,我們會在jenkins中分渠道進行構建。

2. 外推或運營部門會有自己的渠道列表,我們在每次app的發版前都要對安卓項目中的渠道列表進行校對,以防項目中的渠道列表漏掉某些外推或運營渠道。

提效思路

1. 可以將對分渠道進行構建的工作編寫成腳本來完成;

2. 可以將渠道列表的校對過程編寫成腳本來完成。

腳本編寫

1. 自動化構建腳本:

# -*- coding: utf-8 -*-
import jenkins,time

def auto_build(channel):
    jenkins_server_url = 'http://package.ms.netease.com/jenkins'
    user_id = '需替換'
    api_token = '需替換'
    server = jenkins.Jenkins(jenkins_server_url, username=user_id, password=api_token)
    job_name = '需替換'
    last_build_number = server.get_job_info(job_name)['lastBuild']['number']
    this_build_number = last_build_number+1
    if server.get_build_info(job_name,last_build_number)['building'] == False:
        server.build_job(job_name, parameters={"channel":channel}, token=api_token)
        while server.get_build_info(job_name,last_build_number)['building'] == True:
            time.sleep(2)
        tip = "Build successfully, latest build number: "+str(this_build_number)+", channel: "+str(channel)
        print(tip)
    else:
        print "The latest job is still building."

if __name__ == '__main__':
    channel = '需替換'
    auto_build(channel)

知識說明:這里用到了python-jenkins的api,借助這些rest api我們可以做通過ui界面才能完成的日常任務。將過程縮減,更加快捷直接。

程序中可變部分解釋:其中server.build_job方法傳入的參數channel為分渠道構建參數,也即jenkins job的參數,這個參數隨不同的日常job不同是不同的,實際編寫腳本的過程中這個parameters部分對應的就是jenkins job所需要傳入的參數。除此之外,代碼中標注需替換的部分均為可變部分,例如user_id和api_token,這兩個參數在jenkins個人頁面設置中點擊“Show API Token”按鈕可以查看,如下圖所示:

 

 

2. 渠道列表校對腳本:

# -*- coding: utf-8 -*-
import os
curr_dir = os.path.dirname(os.path.abspath(__file__))

def test_check_channels(channels_txt_name,check_list_txt_name):
    channels_txt_path = os.path.join(curr_dir,channels_txt_name)
    check_list_txt_path = os.path.join(curr_dir,check_list_txt_name)
    the_channels = []
    with open(channels_txt_path) as channels:
        for line in channels.readlines():
            line = line.strip()
            if line != '':
                the_channels.append(line)
    with open(check_list_txt_path) as check_list:
        check_items = check_list.readlines()
        for check_item in check_items:
            if check_item.strip() in the_channels:
                pass
            elif check_item=='\n':
                pass
            else:
                print check_item

if __name__ == '__main__':
    test_check_channels("channels.txt","check_list.txt")

傳參說明:其中“channels.txt”文件為安卓項目中配置的渠道列表文件,“check_list.txt”文件為待檢查的外推或運營渠道列表文件。

文件內容格式:文件中每一行都對應記錄着一個渠道名。

運行結果:“check_list.txt”文件中包含,“channels.txt”文件中不包含的渠道會被過濾並打印出來。

應用與啟示

應用:在實際的工作中,在面對運營或外推所給的渠道文件時,可以通過渠道列表校對腳本過濾出不包含的渠道,(自動更新到安卓項目配置的渠道列表文件中並push代碼)。再通過jenkins自動化構建腳本對過濾出的渠道進行自動化構建。括號中的內容可以根據實際情況選擇是否需要來進行編寫腳本,然后編寫一個驅動腳本,將以上分離的自動化過程組合拼裝起來,形成一個連貫的包含完整工作流的自動化過程。

啟示:這個過程本來就是日常測試工作中所要面對的,稍加思考,就可以編寫一個包含自動化過程的腳本出來。對工作流的效率有一個提升的同時,也是一個經驗轉化的過程。以后新人面對這樣的過程,只需要執行腳本就可以,並不需要每次都翻看筆記或記住這個過程是什么。

 


免責聲明!

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



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