Jenkins是一個開源軟件項目,是基於Java開發的一種[持續集成]工具,用於監控持續重複的工做,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能java
Java api經常使用的有 :
https://github.com/jenkinsci/java-client-api
python api 經常使用的有如下兩種:
https://pypi.org/project/python-jenkins/
https://pypi.org/project/jenkinsapi/python
本片文章主要針對目前所存在API中對Jenkins的Credentials的操做的空的空缺,實現對Jenkins的Credentials經過API的方式進行簡單的操做.git
操做jenkins Credentials的通常步驟在界面上爲 憑據>系統>全局憑據>添加憑據 輸入對應的內容便可,如圖所示github
界面操做中須要填寫以下內容web
用戶名(憑據的帳號)json
密碼(憑據的密碼)api
ID(憑據的惟一ID,若不填寫則自動生成,用於維護job的惟一標識)瀏覽器
描述(憑據的描述信息,用於在job配置頁面進行展現)微信
確認以後會生成一條新的憑證,能夠在job頁面使用
當新增一條憑據信息時能夠經過瀏覽器的網絡監控看到他的請求內容
以上截圖爲chrom調試
從上圖能夠看到 請求的path爲
/credentials/store/system/domain/_/createCredentials
請求憑證的內容較多,以下圖:
能夠看到操做憑證的請求地址、請求參數列表,這裏的參數列表的參數很是的多,但實際上在源碼(https://github.com/jenkinsci/jenkins)中讀取的只有紅框中的json的這一段。用postman來模擬調用一下
請求結果是:結果生成頁面的html內容,若請求錯誤會報錯
http://localhost:8080/jenkins/credentials/store/system/domain/_/
能夠到上述url查看生成效果:
基於以上,咱們封裝簡單的增刪改查方法:
java jenkins-client(0.3.8以上版本):
經過jenkins-client發送請求。
Java中經過JenkinsServer獲取JenkinsHttpClient對象,使用postFromWithResult方法發送請求報文便可,但這裏判斷返回值的時候不能使用200判斷結果,由於返回結果是一個重定向請求(302)。
HttpResponse httpResponse = staticJenkinsHttpClient.post_form_with_result("/credentials/store/system/domain/_/createCredentials", data, crumbFlag);
python-jenkins(基於python3.7)
封裝代碼以下
# !/usr/bin/python# -*- coding: UTF-8 -*-import requests# 注:host請直接傳入機器ip, 域名因爲dns解析等可能會致使Jenkins解析敗class jenkins_credentials:
# 傳入值請使用雙引號
def createEOSCredentials(self, host, userName, passworld, id, des, jenkinsUserName, jenkinsPassworld):
url = host + "/credentials/store/system/domain/_/createCredentials"
json = {"": "0", "credentials": {"scope": "GLOBAL", "username": userName, "password": passworld,
"$redact": "password", "id": id,
"description": des,
"stapler-class": "com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl",
"$class": "com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl"}}
data = {}
data["json"] = str(json)
result = requests.post(url, data=data, auth=(jenkinsUserName, jenkinsPassworld))
print(result.text)
# 傳入值請使用雙引號
def deleteEOSCredentials(self, host, id, jenkinsUserName, jenkinsPassworld):
url = host + "/credentials/store/system/domain/_/credential/" + id + "/doDelete"
requests.post(url, auth=(jenkinsUserName, jenkinsPassworld))
# 傳入值請使用雙引號
def updateEOSCredentials(self, host, userName, passworld, id, des, jenkinsUserName, jenkinsPassworld):
url = host + "/credentials/store/system/domain/_/credential/" + id + "/updateSubmit"
json = {"stapler-class": "com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl",
"scope": "GLOBAL", "username": userName, "password": passworld, "$redact": "password",
"id": id, "description": des}
data = {}
data["json"] = str(json)
result = requests.post(url, data=data, auth=(jenkinsUserName, jenkinsPassworld))
print(result.text)
def searchEOSCredentials(self, host, id, jenkinsUserName, jenkinsPassworld):
url = host + "/credentials/store/system/domain/_/credential/" + id + "/"
result = requests.post(url, auth=(jenkinsUserName, jenkinsPassworld))
error_top = "The requested resource is not available."
if error_top in result.text:
return False
else:
return True
上述python代碼中 增刪改均可以直接複用,searchEOSCredentials方法請求當前id的credential是否存在,匹配返回錯誤的字符串便可.在不一樣環境上可能須要稍加改善
以上,若有問題請留言
轉載請註明出處
本文分享自微信公衆號 - 喘口仙氣(gh_db8538619cdd)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。