在 JIRA 查询中使用保留的 JQL 关键字进行修复的最佳方法?

Best way to fix using a reserved JQL keyword in a JIRA query?

我正在尝试编写一个 JIRA 查询来查询一堆缺陷。我遇到的问题是,如果我正在查询的缺陷列表中有一个 JQL 关键字,则整个查询将失败并吐出以下错误:

JiraError HTTP 400 - text: Error in the JQL Query: 'update' is a reserved JQL word. 
You must surround it in quotation marks to use it in a query.

我的查询:

jira.search_issues( 'key in ({})'.format(','.join(defects))),
                     validate_query=false, 
                     maxResults = MAX_JIRA_RESULTS )

当缺陷包含单词时失败:'update'。现在它是一个错误的数据错误,但我想确保查询可以容忍恶意输入。

现在我能想到的确保此错误不再发生的唯一方法是确保每个包含 JIRA 关键字的缺陷都转义了该关键字。这显然非常乏味,如果添加任何新的 JQL 关键字,可能会失败。

除了转义我在字符串中找到的每个 JIRA 关键字之外,还有更好的方法吗?此外,Python 中是否有简单的方法来获取 JIRA 关键字?

谢谢!

首先,您可以引用传递给该特定查询的任何内容,因此您不必关心什么是保留字或不是。例如,这有效:

key in ("abc-1","def-2")

如果您要在其中替换单词 "update",它将消除您抱怨的特定错误...但是,不幸的是,您会得到另一个错误:The issue key 'update' for field 'key' is invalid.

幸运的是,有更好的解决方案。您的问题表明您正在使用问题密钥。 JIRA 问题键始终采用以下格式:

<PROJECT>-<ISSUENUM>

其中PROJECT的格式为explicitly defined by JIRA,即:

  • The first character must be a letter,
  • All letters used in the project key must be from the Modern Roman Alphabet and upper case, and
  • Only letters, numbers or the underscore character can be used.

除了将关键字列入黑名单之外,您还可以将与问题密钥正则表达式匹配的所有内容列入白名单并拒绝其他所有内容。

请注意,虽然 JIRA 系统管理员可以在这些准则之外更改项目正则表达式格式,但这相对不常见(而且 Atlassian 不支持该配置中的 JIRA 运行)。