2016-10-26 16 views
1

Jenkins ver用のドッカーコンテナがインストールされています。 2.19.1。jenkinsからバージョン情報を取得しようとするとjenkins.BadHTTPExceptionが発生する

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モジュールをインストール。

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)) 

ただし、エラーが発生します。ジェンキンスインスタンスに対してユーザーを認証しながら

ジェンキンスvesion 1.426年以降あなたはAPIトークンの代わりに、あなたの本当のパスワードを指定することができます。

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

は、私が言及したドキュメントを確認してください。

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

私のケースでは問題と判明したJenkinsのセキュリティ設定を確認してみてください。

+0

ありがとうEnfors、これは私のために働く – Nilesh

+0

喜んで助けることができる! – Enfors

5

get_version()機能にマイナーなバグがあるようです。ファイル内

ジェンキンスサーバーが有効なセキュリティとセットアップで、匿名ユーザーが「全体的に読むの権利を持っていないなら、あなたは(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

これは私の一日を大いに救った。このバグを掘り下げてくれてありがとう。 – MasonWinsauer

関連する問題