Доступ к JIRA из python

Я пытаюсь получить доступ к jira из python на своем рабочем месте, и основная операция, которую я собираюсь выполнить, — это получение/создание/обновление задач jira. Я просмотрел код шаблона в Интернете и пытаюсь его использовать, но безуспешно. Я уже установил jira api с помощью pip.

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 на рабочем месте.
  • Нужно ли администратору jira разрешать вызовы остальных API или что-то еще из входа администратора? Есть ли способ определить, отключен ли он из нашего кода?
  • Есть ли что-то еще, что мне нужно установить, кроме установки jira через pip.
  • Как работать с учетными данными для входа. Я уверен, что есть лучший способ, чем указание имени пользователя/пароля в вашем файле .py. Может кто-нибудь указать мне, где найти эту информацию.

Спасибо.


person Singo    schedule 29.07.2017    source источник
comment
Что значит не повезло? Вы получаете исключения? Если да, покажите нам трассировку. В настоящее время неясно, что происходит с кодом, который вы показали (и, очевидно, мы не можем протестировать настройку JIRA вашей компании).   -  person Blckknght    schedule 30.07.2017
comment
@Blckknght - я обновил свой пост его выводом. Я чувствую, что делаю что-то не так или пропускаю какой-то шаг в попытке получить доступ к jira.   -  person Singo    schedule 30.07.2017
comment
Я никоим образом не являюсь экспертом JIRA (я использовал его для сообщения об ошибках, но никогда не программировал его API), но, судя по дублированной части URL-адреса в сообщении об ошибке, я думаю, вам следует оставить /rest/api/2 часть значения, которое вы помещаете в свой options dict.   -  person Blckknght    schedule 30.07.2017
comment
@Blckknght - Да, я тоже пробовал, удаляя повторяющуюся часть, но все равно та же ошибка (за исключением повторяющейся строки).   -  person Singo    schedule 31.07.2017


Ответы (3)


Я не уверен, какую версию клиента jira-python вы используете, но для создания экземпляра объекта JIRA вы не передаете сервер внутри параметра «options» (и вы определенно не указываете путь к REST апи). Согласно документам:

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))
person darksideofthesun    schedule 02.09.2017
comment
Использование опций совершенно нормально. В данном случае это не нужно, поскольку он просто передает имя сервера, но оно допустимо и позволяет при необходимости добавить другие параметры (например, сертификаты и файлы cookie). Я предполагаю, что он использует некоторые из них в производственном коде и удалил их для примера. - person Lennart Steinke; 21.06.2020

URL-адрес сервера не должен содержать конечную точку REST, она автоматически добавляется python-jira.

Если вы проверите ошибку, которую вы получаете, вы увидите, что оставшийся путь указан дважды, поэтому вы получаете 404.

Итак, изменив код на:

#!/usr/bin/python
from jira import JIRA

options = {'server' : 'https://jira.mycompany.com'}
jira = JIRA(options)
projects = jira.projects()
print (projects)

должен сделать трюк.

Пожалуйста, дайте мне знать, если есть другие проблемы.

person Lennart Steinke    schedule 20.06.2020

Чтобы убедиться, что у вас правильный сервер 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 есть что-то подобное. Или сохраните их в отдельном файле, который считывает скрипт, но убедитесь, что вы никогда не возвращаете файл!

person James McLeod    schedule 26.11.2017