android api在线文档_通过 API 远程管理 Jenkins
背景介紹
最近接到一個需求,需要對公司內部的Android性能測試平臺的分支管理模塊進行改造。
為了更好地說明問題,在下圖中展示了一個精簡的持續集成測試系統。
在該系統中,Jenkins負責定時檢測代碼庫(Code Repository)的代碼更新情況,當檢測到有新的代碼提交時,自動采用最新的代碼進行構建,并采用構建得到的包(apk)觸發自動化測試平臺(DroidTestbed)執行測試任務。
然后再說下分支管理模塊。
由于我們的持續集成平臺通常不止監控一個產品,而每個產品又不止監控一個tag(例如/trunk,/projects/cn/10.9.8),因此,我們的持續集成平臺需要有分支管理的功能,即針對每一個產品的每一個tag,單獨創建一個分支,并針對各個分支單獨指定測試用例集合測試設備。
具體實現方面,出于單一職責的原則,我們對功能進行了如下劃分:
在Jenkins端針對每一個分支創建一個Job;
在DroidTestbed端配置測試資源,針對每一個分支分別綁定測試用例集和測試設備,每一個分支會存在一個單獨的branch_id;
在 Jenkins 端的Job配置中,保存該分支在DroidTestbed中對應的branch_id,實現Jenkins與DroidTestbed的關聯。
整個過程看上去并沒有什么問題,那為什么需要對分支管理模塊進行改造呢?
問題就出現在分支配置上面。
試想一下,每次要新增或修改一個分支的時候,由于Jenkins端和DroidTestbed端的配置是獨立的,那么我們就只能在兩個平臺上分別進行配置。
另一方面,配置工作本身也較為復雜,例如,在Jenkins端就需要設置的參數包括:repository_url,tag,ref_tag,ref_revision,branch_id,schedule,user_name等;而這其中的大部分參數同樣也要在DroidTestbed端進行配置。
根據歷史經驗,但凡涉及到復雜且重復的手工操作時,就容易出錯。實際情況的確是這樣的。在該功能上線后,由于配置復雜,業務組的同學每次要新增一個監控分支時,都需要找到管理員來幫忙配置(說實話,管理員對業務同學能配置正確也沒信心);即使是管理員,也出現過好幾次因為疏忽造成配置錯誤的情況。
那么,這個問題要怎么解決呢?
Jenkins Remote API 的簡介
繞了這么大一個圈子,終于引出本文的主題,Jenkins Remote API。
實際上,Jenkins本身支持豐富的API接口,我們通過遠程調用接口,基本上可以實現所有需要的功能,例如:
從Jenkins獲取Job狀態信息
觸發Jenkins執行構建
創建、復制、修改、刪除Job
回到前面的案例,我們就可以將配置操作全部放在DroidTestbed中,只需要在保存配置項時,由DroidTestbed自動調用Jenkins的Remote API,即可實現配置的同步。
Jenkins Remote API 的調用
現在我們來看下如何調用Jenkins的Remote API。
Jenkins的Remote API以REST-like的形式進行提供,通過對特定的API執行POST請求即可實現對Jenkins的操作。
例如,我們搭建的Jenkins站點為http://jenkins.debugtalk.com:8080,那么,訪問http://jenkins.debugtalk.com:8080/api即可查看到該站點所有可用的API;
若想某個具體的Job進行操作,如job名稱android_core_dashboard_trunk,它的管理頁面為
http://jenkins.debugtalk.com:8080/job/android_core_dashboard_trunk
那么我們訪問
http://jenkins.debugtalk.com:8080/job/android_core_dashboard_trunk/api/即可查看到該job可用的API。
更詳細的POST調用方式的介紹可以參考Jenkins的官方wiki,在此就不過多進行介紹。
可以看出,通過對特定API執行POST請求操作較為原始,因為我們需要關注過多底層細節。事實上,當前已經有前輩針對這一痛點,對底層的POST操作細節進行了封裝,形成了一些wrapper方便我們從上層進行更便捷的操作。
這類wrapper實現的功能類似,都可以方便我們在代碼中通過更簡潔的方式調用Jenkins API,實現對Jenkins的遠程管理,我們只需要根據我們采用的具體編程語言來選擇對應的wrapper即可。當然,如果沒有找到合適的,我們也可以參照已有的開源wrapper,自己再造一個輪子,原理都是相同的。
在Jenkins的官方wiki中,推薦了兩個較為成熟的API wrapper,一個是基于Python實現的salimfadhley/jenkinsapi,另一個是基于Ruby實現的arangamani/jenkins_api_client。
以salimfadhley/jenkinsapi為例,通過使用jenkinsapi,我們在Python中就可以很方便地管理Jenkins。
常見的操作方式示例如下。
>>> import jenkinsapi>>> from jenkinsapi.jenkins import Jenkins
# 指定Jenkins實例
>>> J = Jenkins('http://jenkins.debugtalk.com:8080')
# 查看Jenkins版本
>>> J.version
1.542
# 查看Jenkins的所有jobs
>>> J.keys()
['foo', 'test_jenkinsapi']
# 查看指定job的配置信息
>>> J['test_jenkinsapi'].get_config()
# 創建Jenkins job
>>> jobName = 'test_job'
>>> EMPTY_JOB_CONFIG = '''
<?xml version='1.0' encoding='UTF-8'?>
jkkjjkfalsetruefalsefalsefalsefalse
'''
>>> new_job = J.create_job(jobName, EMPTY_JOB_CONFIG)
# 更新Jenkins job的配置
>>> import xml.etree.ElementTree as et
>>> new_conf = new_job.get_config()
>>> root = et.fromstring(new_conf.strip())
>>> builders = root.find('builders')
>>> shell = et.SubElement(builders, 'hudson.tasks.Shell')
>>> command = et.SubElement(shell, 'command')
>>> command.text = "ls"
>>> J[jobName].update_config(et.tostring(root))
# 刪除Jenkins job
>>> J.delete_job(jobName)
更多的使用方法可參考項目文檔。
有些同學在認真研究了這些開源庫后也許會說,官方文檔已經翻遍了,但是文檔中對用法的描述太少了,也沒給出API調用的實例,還是不知道怎么使用啊。這個問題在開源庫中的確是普遍存在的。
介紹個技巧,通常優秀的開源庫都會很重視測試,作者可能在文檔中沒有針對每一個API接口的調用方式進行說明,但通常會針對各個接口編寫較為完整的測試代碼。我們通過閱讀測試代碼,就可以充分了解API接口的使用方法了,這也比直接閱讀文檔有效率得多。
本文轉自公眾號“DebugTalk”,原文:通過 API 遠程管理 Jenkins?。
總結
以上是生活随笔為你收集整理的android api在线文档_通过 API 远程管理 Jenkins的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态半导体ram依据什么存储信息_LPD
- 下一篇: 字典占内存大吗_微博热搜稳占第一!「美团