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源创计划”,欢迎正在阅读的你也加入,一块儿分享。