如何在Jenkins远程访问其JSON API时进行身份验证?

时间:2016-09-21 18:16:30

标签: python authentication jenkins

我需要从Python脚本访问Jenkins JSON API。问题是我们的Jenkins安装是安全的,因此登录用户必须选择证书。可悲的是,詹金斯Remote Access Documentation他们没有提到有关证书的事情,我尝试使用API​​令牌但没有成功。

如何从Python脚本进行身份验证以使用其JSON API?

提前致谢!

3 个答案:

答案 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>

http://docs.python-requests.org/en/master/user/advanced/

答案 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"];