2017-07-29 104 views
0

我想在我的工作地點從python訪問jira,我打算做的基本操作是獲取/創建/更新jira問題。我在網上查看了模板代碼,並試圖使用它,但沒有運氣。我已經使用pip安裝了jira api。從python訪問JIRA

pip install jira 

#!/usr/bin/python 
from jira import JIRA 
options = {'server' : 'https://jira.mycompany.com/rest/api/2'} 
jira = JIRA(options) 
projects = jira.projects() 
print (projects) 

這是它的輸出:

Traceback (most recent call last): 
    File "JiraTest.py", line 7, in <module> 
    jira = JIRA(options) 
    File "C:\Anaconda3\lib\site-packages\jira\client.py", line 317, in __init__ 
    si = self.server_info() 
    File "C:\Anaconda3\lib\site-packages\jira\client.py", line 1771, in server_info 
    j = self._get_json('serverInfo') 
    File "C:\Anaconda3\lib\site-packages\jira\client.py", line 2172, in _get_json 
    r = self._session.get(url, params=params) 
    File "C:\Anaconda3\lib\site-packages\jira\resilientsession.py", line 150, in get 
    return self.__verb('GET', url, **kwargs) 
    File "C:\Anaconda3\lib\site-packages\jira\resilientsession.py", line 146, in __verb 
    raise_on_error(response, verb=verb, **kwargs) 
    File "C:\Anaconda3\lib\site-packages\jira\resilientsession.py", line 56, in raise_on_error 
    r.status_code, error, r.url, request=request, response=r, **kwargs) 
jira.exceptions.JIRAError: JiraError HTTP 404 url:https://jira.mycompany.com/rest/api/2/rest/api/2/serverInfo 

     response headers = {'Date': 'Sat, 29 Jul 2017 22:42:31 GMT', 'Content-Length': '0', 'Server': 'Apache-Coyote/1.1'} 
     response text = 

` 我知道我在這裏,所以做錯了什麼這是我要問的事情:

  • 如何確定傑拉服務器在你的工作場所。
  • jira管理員需要啓用其他api調用還是其他管理員登錄?有沒有辦法確定它是否被我們的代碼禁用?
  • 除了通過pip安裝jira以外,還有其他什麼我必須安裝。
  • 如何處理登錄憑證。我確信有比在.py文件中指定用戶名/密碼更好的方法。有人可以指點我在哪裏可以找到這些信息。

謝謝。

+0

你是什麼意思「不幸」?你是否有例外?如果是這樣,給我們回溯。目前尚不清楚您所展示的代碼發生了什麼(顯然,我們無法測試您公司的JIRA設置)。 – Blckknght

+0

@Blckknght - 我已經更新了我的帖子及其輸出。我覺得我完全在做錯事,或者在嘗試訪問jira時錯過了一些步驟。 – Singo

+2

我不是JIRA的專家(我用它來報告錯誤,但從來沒有用API進行編程),但是通過錯誤消息中URL的重複部分來判斷,我想你應該離開'/ rest/api/2'部分超出了你在'options'字典中的值。 – Blckknght

回答

0

我不確定你使用的是什麼版本的jira-python客戶端,但是要實例化一個JIRA對象,你不會在「options」參數中傳遞服務器(並且你絕對不會把REST API的路徑)。根據文檔:

class jira.JIRA(server=None, options=None, basic_auth=None, oauth=None, jwt=None, kerberos=False, validate=False, get_server_info=True, async=False, logging=True, max_retries=3, proxies=None, timeout=None) 

所以你的實例應該是這樣的:

from jira.client import JIRA 

jira = JIRA('https://jira.mycompany.com') 

如果需要權威性,那麼這將是:

jira = JIRA('https://jira.mycompany.com', basic_auth=(username, password)) 
0

要確認你有正確的JIRA服務器,瀏覽到根URL https://jira.mycompany.com,並確保您可以看到登錄屏幕並登錄(這也證實了您的用戶名和密碼也起作用)。

必須先啓用對JIRA REST API的訪問權限,然後才能使用它。爲了測試它,嘗試使用curl與它通信,例如:

curl -u "username:password" -X GET -H "Content-Type: application/json" https://jira.mycompany.com/rest/api/2/issue/KEY-666 

只要Python可以使用GET和POST服務器通信,你不應該需要什麼。

對於用戶名和密碼,我只是讓腳本在命令行詢問一條不顯示密碼的指令。我使用node.js,但我相信Python有類似的東西。或者將它們保存在腳本讀入的單獨文件中,但請確保您從不檢查文件!