【问题标题】:Access JIRA from python从 python 访问 JIRA
【发布时间】:2017-07-29 21:26:46
【问题描述】:

我试图在我的工作地点从 python 访问 jira,我打算做的基本操作是获取/创建/更新 jira 问题。我在网上查看了模板代码并尝试使用它,但没有运气。我已经使用 pip 安装了 jira api。

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 管理员是否需要通过管理员登录启用 rest api 调用或其他功能?有没有办法确定它是否被我们的代码禁用?
  • 除了通过 pip 安装 jira 之外,我还需要安装什么。
  • 如何处理登录凭据。我确信有比在 .py 文件中指定用户名/密码更好的方法。有人可以告诉我在哪里可以找到该信息。

谢谢。

【问题讨论】:

  • “没有运气”是什么意思?你有例外吗?如果是这样,请向我们展示追溯。目前尚不清楚您显示的代码发生了什么(显然我们无法测试您公司的 JIRA 设置)。
  • @Blckknght - 我已经用它的输出更新了我的帖子。我觉得我在尝试访问 jira 时完全做错了或错过了一些步骤。
  • 无论如何我都不是 JIRA 专家(我用它来报告错误,但从未使用它的 API 进行编程),但从错误消息中 URL 的重复部分判断,我猜您应该将/rest/api/2 部分从您放入options 字典中的值中删除。
  • @Blckknght - 是的,我也试过了,删除了重复的部分,但仍然是相同的错误(减去重复的字符串)。

标签: python jira jira-rest-api python-jira


【解决方案1】:

我不确定您使用的是哪个版本的 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))

【讨论】:

  • 使用选项完全没问题。在这种情况下不需要它,因为他只是传递服务器名称,但它是有效的,并且允许在需要时添加其他选项(如证书和 cookie)。我的猜测是,他在生产代码中使用了其中一些,并删除了它们作为示例。
【解决方案2】:

服务器 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)

应该可以解决问题。

如果还有其他问题,请告诉我。

【讨论】:

    【解决方案3】:

    要确认您拥有正确的 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 也有类似的东西。或者将它们保存在脚本读取的单独文件中,但请确保永远不要将文件签入!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多