2016-10-26 93 views
1

我爲Jenkins ver安裝了docker容器。 2.19.1。獲取jenkins.BadHTTPException當試圖從碼頭上運行的jenkins獲取版本信息

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/] 

我檢查裏面提到的文檔:

從詹金斯vesion 1.426以後就可以進行身份​​驗證時對詹金斯實例的用戶指定的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> 

我從令牌名稱 - >配置 - >顯示API令牌...

還有什麼我已經從詹金斯側,使訪問?意味着,API將訪問此服務器?

+1

我有同樣的問題,並解決它:' sudo apt-get install python-setuptools' –

+0

它也適合你嗎? –

+0

我有完全相同的問題。在我的情況下安裝python-setuptools沒有幫助。 – Enfors

回答

2

嘗試檢查詹金斯的安全設置 - 那些原來是我的情況的問題。

+0

謝謝Enfors,這對我有用 – Nilesh

+0

很高興能夠提供幫助! – Enfors

5

get_version()函數中似乎有一個小錯誤。

如果詹金斯服務器啓用設置的安全性和IF匿名用戶不具備「整體閱讀的權利,那麼你需要通過授權鑰匙的urlopen()

即文件」在詹金斯/ __ 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__ 

(我已報告的錯誤到模塊的作者)

+0

這節省了我的一天。非常感謝你挖掘這個bug。 – MasonWinsauer