使用 JIRA REST 客户端访问 JIRA 敏捷冲刺 api

Access JIRA Agile sprints with JIRA REST Client api

有谁知道如何使用 JIRA java REST 客户端 api 或以其他方式使用 java.

访问 JIRA 敏捷冲刺

1) 我正在尝试检索 JIRA 数据(项目、冲刺、问题等)。我需要一种方法来查询项目,以及使用不同过滤器的冲刺。我猜 JRJC 无法获得敏捷数据。是否有针对整个 JIRA 数据的一站式解决方案?

2) JIRA 在他们的文档中给出了 2 种类型 api:REST Api 和 Java Api。何时使用其中的每一个

  1. 这里有你想要的所有信息:

https://docs.atlassian.com/jira/REST/latest/

请注意,您可以通过以下方式获取项目信息:https://docs.atlassian.com/jira/REST/latest/#api/2/project

a) 至于 sprint 信息——你能用 JQL 得到你需要的信息吗?示例 - 您可以转到问题 > 搜索问题并使用基本搜索吗?在这里,在 "More" 选项下,您会看到可以指定要筛选的 Sprint。

当您 add/remove 冲刺时,您会看到 URL 发生变化。例如,如果我选择查看 Sprint 1 和 Sprint 6 中的所有问题类型,我的 JQL 将如下所示:

?jql=Sprint%20in%20(227%2C%20229)

请注意,这些是冲刺 ID。

现在您可以通过这样的搜索调用其余 api:

https://jira.domain.com/rest/api/2/search?jql=Sprint%20in%20(227%2C%20229)

这里有更多详细信息: https://docs.atlassian.com/jira/REST/latest/#api/2/search

b) 如果您可以通过过滤器获得所需的信息,您只需保存过滤器并使用其余部分调用过滤器 api

https://jira.domain.com/rest/api/2/filter/{filter-id}

此处有更多详细信息:https://docs.atlassian.com/jira/REST/latest/#api/2/filter-getFilter

  1. 你问题的第二部分实际上是另一个 Whosebug 问题: jira REST API 只是一个 REST API - 这是获取数据的 HTTP 方法调用。您可以使用 PHP、Java(例如使用 Jersey)、bash(使用 curl)或什至只使用带有 - Chrome postman 的浏览器来调用它们.

Jira 的 Java API 或 REST Java 客户端是一组不受支持的库,如果您特别想使用 Java打这些休息电话。当然,您可以使用 Jersey 或其他任何您想进行 Rest 调用的工具,但 Java 客户端提供了一些可能有用的库。

试试这个。我用了下面的代码,

    private int setSprint(String sprint, String key, String boardId) {
    String _jiraUser = applicationProperties.get(Constants.JIRAUSER);
    String _jiraPwd = applicationProperties.get(Constants.JIRAPWD);
    String auth = new String(Base64.encode(_jiraUser + ":" + _jiraPwd));

    String agileURL = applicationProperties.get(Constants.JIRAURL)
            + "/rest/agile/1.0/board/" + boardId + "/sprint";

    int sprintId = invokeGetMethod(auth, agileURL, sprint);
    // Constants.REPORT.info(sprintId);

    String issueURL = applicationProperties.get(Constants.JIRAURL)
            + "/rest/agile/1.0/issue/" + key;

    int issueId = getIssueId(auth, issueURL, key);
    // Constants.REPORT.info(issueId);
    return invokePostMethod(auth, sprintId, key, issueId);
    // Constants.REPORT.info(statusCode);

}

private static int invokeGetMethod(String auth, String agileURL,
        String sprint) {

    int sprintId = 0;
    int startAt = 0;
    agileURL = agileURL + "?startAt=" + startAt;
    sprintId = getSprintResult(agileURL, auth, sprint, startAt);
    // sprintId = getSprintId(content, sprint, agileURL);

    return sprintId;
}

private static int getSprintResult(String agileURL, String auth,
        String sprint, int startAt) {
    HttpGet post = new HttpGet(agileURL);
    org.apache.http.impl.client.DefaultHttpClient httpClient = new org.apache.http.impl.client.DefaultHttpClient();
    post.setHeader("Content-type", "application/json");
    post.setHeader("Authorization", "Basic " + auth);
    HttpResponse response = null;
    String content = null;
    try {
        response = httpClient.execute(post);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        content = CharStreams.toString(new InputStreamReader(response
                .getEntity().getContent(), Charsets.UTF_8));
    } catch (IllegalStateException | IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    int SprintId = getSprintId(content, sprint, agileURL, startAt, auth);
    if (SprintId != 0)
        return SprintId;
    return SprintId;
}

static int getSprintId(String content, String sprint, String agileURL,
        int startAt, String auth) {
    boolean flag = false;

    int sprintId = 0;
    Gson gson = new Gson(); // Class<String> data=new Class<String>();
    Data values = gson.fromJson(content, Data.class);
    for (Values data : values.getValues()) { // data.get
        if (data.getName().equalsIgnoreCase(sprint))
        // Constants.REPORT.info(sprintId=data.getId());
        {
            flag = true;
            // Constants.REPORT.info(data);
            // statusCode = response.getEntityInputStream().;
            return sprintId = data.getId();
        }

    }
    if (!flag) {
    //Pagination
        agileURL = agileURL.replaceAll(
                "startAt=" + String.valueOf(startAt),
                "startAt=" + String.valueOf(startAt += 50));
        sprintId = getSprintResult(agileURL, auth, sprint, startAt);
        if (sprintId != 0)
            return sprintId;

    }
    return sprintId;

}

private static int getIssueId(String auth, String agileURL, String key) {

    int issueId = 0;
    try {

        org.apache.http.impl.client.DefaultHttpClient httpClient = new org.apache.http.impl.client.DefaultHttpClient();
        HttpGet post = new HttpGet(agileURL);

        post.setHeader("Content-type", "application/json");
        post.setHeader("Authorization", "Basic " + auth);
        HttpResponse response = httpClient.execute(post);
        String content = CharStreams.toString(new InputStreamReader(
                response.getEntity().getContent(), Charsets.UTF_8));

        Gson gson = new Gson(); // Class<String> data=new Class<String>();

        IssueData issueValues = gson.fromJson(content, IssueData.class);
        if (issueValues.getKey().equalsIgnoreCase(key))
            issueId = issueValues.getId();
        // Constants.REPORT.info(issueValues);
    } catch (Exception e) {
        Constants.ERROR.info(Level.INFO, e);
        // vjErrorLog.info(Level.INFO, e);
    }
    return issueId;
}
private static int invokePostMethod(String auth, int sprintId, String key,
        int issueId) {

    int statusCode = 0;
    try {
        String postUrl = applicationProperties.get(Constants.JIRAURL)
                + "/rest/agile/1.0/sprint/" + sprintId + "/issue";
        String str = "{\"issues\": [\"" + key + "\",\"" + issueId + "\"]}";
        statusCode = invokePostMethod(auth, postUrl, str);

        return statusCode;
    } catch (Exception e) {
        Constants.ERROR.info(Level.INFO, e);
        // vjErrorLog.info(Level.INFO, e);
    }
    return statusCode;
}

创建具有以下属性的 IssueData class。并创建 getter/setter 也覆盖 toString() 方法。

private int id;
private String self;
private String key;