我需要从Python脚本访问Jenkins JSON API。问题是我们的Jenkins安装是安全的,因此登录用户必须选择证书。可悲的是,詹金斯Remote Access Documentation他们没有提到有关证书的事情,我尝试使用API令牌但没有成功。
如何从Python脚本进行身份验证以使用其JSON API?
提前致谢!
答案 0 :(得分:1)
您必须使用HTTP Basic Auth对JSON API进行身份验证。
要使脚本化客户端(例如wget)调用需要授权的操作(例如调度构建),请使用HTTP BASIC身份验证来指定用户名和API令牌。这通常比模拟基于表单的身份验证更方便
https://wiki.jenkins-ci.org/display/JENKINS/Authenticating+scripted+clients
以下是使用Basic Auth和Python的示例。
http://docs.python-requests.org/en/master/user/authentication/
请记住,如果您在内部Jenkin服务器上使用自签名证书,则需要关闭证书验证 OR 从服务器获取证书并将其添加到HTTP请求中< / p>
答案 1 :(得分:0)
我终于找到了如何使用certs和wget对Jenkins进行身份验证。我必须将我的pfx证书转换为pem,并在单独的文件For more info about that come here中使用证书和密钥。最后这是我使用的命令。
wget --certificate=/home/B/cert.pem --private-key=/home/B/key.pem --no-check-certificate --output-document=jenkins.json https:<URL>
答案 2 :(得分:0)
我不能完全确定它涵盖了您的证书用例,但是由于花了我一些时间来查找,因此我仍然希望共享此片段,以便在没有特殊Jenkins库的情况下在Python中检索给定用户名的电子邮件地址。它使用API令牌并“支持”(实际上忽略)https:
def _get_email_adress(user):
request = urllib.request.Request("https://jenkins_server/user/"+ user +"/api/json")
#according to https://stackoverflow.com/a/28052583/4609258 the following is ugly
context = ssl._create_unverified_context()
base64string = base64.b64encode(bytes('%s:%s' % ('my user name', 'my API token'),'ascii'))
request.add_header("Authorization", "Basic %s" % base64string.decode('utf-8'))
with urllib.request.urlopen(request, context=context) as url:
user_data = json.loads(url.read().decode())
for property in user_data['property']:
if property["_class"]=="hudson.tasks.Mailer$UserProperty":
return property["address"];