【问题标题】:Get jenkins.BadHTTPException when try to get version info from jenkins run on docker尝试从 docker 上运行的 jenkins 获取版本信息时获取 jenkins.BadHTTPException
【发布时间】:2016-10-26 03:16:08
【问题描述】:

我为 Jenkins 版本安装了 docker 容器。 2.19.1.

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                              NAMES
f03c10935bb3        jenkins             "/bin/tini -- /usr/lo"   29 hours ago        Up 3 hours          0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   cocky_colden

安装了python-jenkins模块来访问jenkins服务器。

我尝试了docs 中给出的第一个代码示例。

import jenkins

server = jenkins.Jenkins('http://localhost:8080', username='admin', password='mytoken')
user = server.get_whoami()
version = server.get_version()
print('Hello %s from Jenkins %s' % (user['fullName'], version))

但它给出了错误。

python /tmp/test.py
Traceback (most recent call last):
  File "/tmp/test.py", line 5, in <module>
    version = server.get_version()
  File "/usr/lib/python2.7/site-packages/jenkins/__init__.py", line 616, in get_version
    % self.server)
jenkins.BadHTTPException: Error communicating with server[http://localhost:8080/]

我检查了提到的文档:

从 Jenkins 版本 1.426 开始,您可以在针对 Jenkins 实例对用户进行身份验证时指定 API 令牌而不是您的真实密码。

我使用密码而不是token,但得到同样的错误。

我试过curl

curl -X POST http://localhost:8080/job/testjob/build \
> --data token=mytoken \
> --data-urlencode json='{"parameter": [{"name":"id", "value":"123"}, {"name":"verbosity", "value":"high"}]}'
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Error 403 No valid crumb was included in the request</title>
</head>
<body><h2>HTTP ERROR 403</h2>
<p>Problem accessing /job/testjob/build. Reason:
<pre>    No valid crumb was included in the request</pre></p><hr><i><small>Powered by Jetty://</small></i><hr/>

</body>
</html>

我从 Name-> Configure -> Show API Token...获取令牌...

还有什么我必须从詹金斯方面启用才能访问的吗?意思是说,API 可以访问这个服务器?

【问题讨论】:

  • 我遇到了同样的问题并通过以下方式解决了它:sudo apt-get install python-setuptools
  • 它对你也有用吗?
  • 我遇到了完全相同的问题。在我的情况下,安装 python-setuptools 没有帮助。
  • 实际上,在我的情况下,它被证明是 Jenkins 配置中的一个安全问题。有一个选项可以禁用所有安全性,当我这样做时,它就起作用了。但是,如果您这样做,请记住重新启用安全性,并准确找出问题所在的设置。

标签: python rest jenkins


【解决方案1】:

get_version() 函数中似乎有一个小错误。

如果 Jenkins 服务器设置为启用了安全性,并且如果匿名用户没有“全面读取”权限,那么您需要将授权密钥传递给 urlopen()

即在文件'jenkins/__init__.py'中,get_version()函数需要从:

def get_version(self):
    try:
        request = Request(self._build_url(''))
        request.add_header('X-Jenkins', '0.0')
        response = urlopen(request, timeout=self.timeout)

收件人:

def get_version(self):
    try:
        request = Request(self._build_url(''))
        if self.auth:
            request.add_header('Authorization', self.auth)
        request.add_header('X-Jenkins', '0.0')
        response = urlopen(request, timeout=self.timeout)

要查找此模块在您系统上的位置,请运行 python 并输入:

import jenkins
jenkins.__file__

(我已将错误报告给模块作者)

【讨论】:

  • 这大大节省了我的时间。非常感谢您深入研究这个错误。
【解决方案2】:

尝试检查 Jenkins 安全设置 - 在我的情况下,这些设置是问题。

【讨论】:

  • 很高兴能够提供帮助!
【解决方案3】:

配置全局安全 >> 允许匿名读取访问,为我工作

【讨论】:

  • 但对我来说,它甚至不会进入页面:(
猜你喜欢
  • 2021-12-01
  • 2014-04-11
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多