java - 如何使用 Java 读取 BitBucket/Stash 分支及其链接的 JIRA 票据

标签 java git bitbucket jira bitbucket-server

我想阅读 bitbucket/stash 分支及其受人尊敬的 Jira 问题,当我在寻找它时发现 Atlassian APIs .

我找不到任何合适的例子,比如 如何连接到 bitbucket 服务器,获取任何项目的信息,并读取该项目的分支,以及是否有任何 Jira 问题与分支相关联。

任何帮助或指导都会很棒。

我正在寻找一个 Java 示例。

最佳答案

我找到了一种与 API 交互并从 Bitbucket 获取存储库和用户信息的可能方法。但我必须使用涉及浏览器回调的 OAuth 身份验证。这对于独立应用程序来说可能不太方便。

这就是我所做的:

  1. 在我的 BitBucket 帐户上创建了 OAuth 使用者。此页面对此进行了很好的描述:https://confluence.atlassian.com/bitbucket/oauth-on-bitbucket-cloud-238027431.html 。完成此操作后,我有了一个拥有 key 和 secret 的消费者。

  2. 我直接在浏览器上执行了 GET 查询此链接:https://bitbucket.org/site/oauth2/authorize?client_id= {client_id}&response_type=代码。 {client_id} 实际上是前一项中生成的 key 。这将我带到一个页面,在其中我可以确认对 OAuth 应用程序的授权。确认授权后,浏览器页面将重定向到如下页面列表:http://giltest.org/?code=LcY6FmeyvjqM2xnTyN 。代码“LcY6FmeyvjqM2xnTyN”是下一步将用于生成授权码的代码。

  3. 现在我们生成允许访问 BitBucket REST API 的授权代码。我已经在 Maven 项目中为此创建了一些 Java 代码。有关 pom.xml 的更多详细信息,请参阅下文。使用Unirest库我创建了这些检索访问 token 的方法:

access token retrieval

public JsonNode accessToken(String clientId, String secret, String code) throws UnirestException {
    return Unirest.post("https://bitbucket.org/site/oauth2/access_token").basicAuth(clientId, secret)
                .field("grant_type", "authorization_code").field("code", code)
                .asJson().getBody();
}

此方法的响应将包含 JSON 格式的访问 token :

{"access_token":"xetOO4xZU-xxxxxxxx--LRmbQrmBkDfHIKfE1vz1ZEGnbUyt5UI31ErKojnecuGWxxxxxxxxxx=","refresh_token":"jbad7ajwVWxxxxx","scopes":"webhook snippet:write issue:write pullrequest:write project:write team:write account:write","token_type":"bearer","expires_in":3600}

您可以使用此方法直接提取 token :

public String accessTokenExtract(String clientId, String secret, String code) throws UnirestException {
    return Unirest.post("https://bitbucket.org/site/oauth2/access_token").basicAuth(clientId, secret)
            .field("grant_type", "authorization_code").field("code", code)
            .asJson().getBody().getObject().get("access_token").toString();
}
  • 此后,您可以从 JSON 中提取访问 token 并在请求中使用它。请参阅 this page 上的“提出请求”部分。以下是获取 Bitbucket 用户信息的示例 Java 代码方法:
  • Show user information request

    public String showUserInformation(String authorizationCode) throws UnirestException {
        return Unirest.get("https://api.bitbucket.org/2.0/user")
                .header("Authorization", String.format("Bearer %s", authorizationCode)).asString().getBody();
    }
    

    Show repositories

    public String listRepositories(String authorizationCode) throws UnirestException {
        return Unirest.get("https://api.bitbucket.org/2.0/repositories")
                .header("Authorization", String.format("Bearer %s", authorizationCode)).asString().getBody();
    }
    

    有关 REST API 的更多信息可以在此处找到:

    https://developer.atlassian.com/bitbucket/api/2/reference/resource/

    仅供引用:这是我的玩具项目的 pom.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.fernandes</groupId>
        <artifactId>bitbucket.experiments</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <junit.version>5.0.0-M4</junit.version>
            <bitbucket.version>4.0.0-m27</bitbucket.version>
        </properties>
    
        <repositories>
            <repository>
                <id>Atlassian</id>
                <url>https://maven.atlassian.com/content/repositories/atlassian-public</url>
            </repository>
        </repositories>
    
        <dependencies>
            <dependency>
                <groupId>com.mashape.unirest</groupId>
                <artifactId>unirest-java</artifactId>
                <version>1.4.9</version>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-api</artifactId>
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.assertj/assertj-core -->
            <dependency>
                <groupId>org.assertj</groupId>
                <artifactId>assertj-core</artifactId>
                <version>3.8.0</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
    </project>
    

    关于java - 如何使用 Java 读取 BitBucket/Stash 分支及其链接的 JIRA 票据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44919925/

    相关文章:

    java - 为什么主线程不能比较两个由其他线程更新的变量?

    git - Jenkins Git 全局超时更改

    git - 我如何找到包含特定单词的提交消息?

    bitbucket - terraform 验证错误 : The argument "region" is required, 但未设置

    java - 单独的 TCP/SSL 连接用于身份验证,而 UDP 连接用于主要流量?

    java - ActionSherlockBar 样式 - PopupMenu

    java - 从字符串中提取变量值

    git - 我怎样才能让 git 执行 "did you mean"建议?

    git - 使用 git/bitbucket 突然开始收到 ssh_exchange_identification 错误

    mercurial - 从 BitBucket 存储库自动部署文件