Jira API 受让人不再填充 "name",而是需要 "accoundId"

Jira API Assignee not populating with "name" anymore, instead needs "accoundId"

我正在与 Python 3.x

合作

以前,我有一个创建票证的功能,看起来像这样

def jira_incident(jira_subject, jira_description):
    user = "username"
    apikey = 'apikey'
    server = 'https://serverName.atlassian.net'
    options = {
        'server': server,
        'verify': False
    }
    issue_dict = {
        'project': {'key': 'project_name'},
        'summary': str(jira_subject),
        'description': str(jira_description),
        'issuetype': {'name': 'Incident'},
        'assignee': {'name': my_username},
        'priority': {'name': 'Low'},
        'customfield_10125':
            {'value': 'Application Ops'}
    }
    jira = JIRA(options, basic_auth=(user, apikey))
    new_issue = jira.create_issue(fields=issue_dict)
    return new_issue

my_username 是一个全局变量,也用于其他用途。

无论如何,从大约 2 天前开始,受让人不再工作。我进行了一些谷歌搜索,发现它现在需要 accountId 而不是名称,我可以通过网络 UI 通过在评论中以 @'ing 某人的形式留下评论来获得它。作为一个临时解决方案,我已经填充了一个字典以供参考(并且有效),但是我想让它更具动态性以便将来验证脚本。

'assignee': {'accountId': jira_dict[my_username]},

我似乎真的找不到任何关于从名称中查找 accountId 的文档,我想我会继续问社区看看是否还有其他人 运行 into/solved 这个问题。

我正在考虑编写一个新函数来为我执行此查询,然后 returns accountId。

编辑 我确实找到了这个:

import requests
from requests.auth import HTTPBasicAuth
import json

url = "/rest/api/3/user/bulk/migration"

auth = HTTPBasicAuth("email@example.com", "<api_token>")

headers = {
   "Accept": "application/json"
}

response = requests.request(
   "GET",
   url,
   headers=headers,
   auth=auth
)

print(json.dumps(json.loads(response.text), sort_keys=True, indent=4, separators=(",", ": ")))

但是我遇到了 404,我将服务器地址添加到 url 的开头,并将用户替换为有问题的用户名。

好的,我找到了一个解决方案,它不是一个优雅的解决方案,但它确实满足了我的需要。所以这是新功能:

def jira_account_id_from_username(username):
    r = requests.get('https://serverName.atlassian.net/rest/api/3/user?username=' + username, auth=("username",api_key), verify=False)
    value = re.search('"accountId":"(.*?)",', str(r.text)).group(1)
    return value

我强烈建议您不要再依赖 username。您使用的端点已弃用,另请参阅 https://developer.atlassian.com/cloud/jira/platform/deprecation-notice-user-privacy-api-migration-guide/

"new" 或者可能更好的方法是使用 /user/search 端点,如下所述: https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-rest-api-3-user-search-get 在那里你可以定义一个 query 匹配某些属性用户(displayNameemailAddress),或者搜索 accountId(如果您已有)。因此,如果您 link 将用户从云端转移到其他 "user directory" (或者只是您存储了一些用户名的脚本),请使用电子邮件地址或帐户 ID 替换它,这样您就可以正确地 link 你的用户。