huaweicloud-CloudBuild-BuildTask-java:华为云编译构建服务Java SDK使用示例,实现构建任务管理与执行

基于华为云java SDK,通过ProjectId查询项目下的构建任务列表,选择任务查看构建任务的构建历史列表,然后执行构建任务并查询构建任务是否在运行。

分支3Tags0
文件最后提交记录最后更新时间
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前

1、介绍

什么是编译构建?

编译构建(CodeArts Build)基于云端大规模分布式加速,为客户提供高速、低成本、配置简单的混合语言构建能力,帮助客户缩短构建时间,提升构建效率。

开箱即用:全场景,支持多种语言,多种框架,覆盖主流软件开发场景

  • 支持语言:C、C++、Java、Go、Python、C#、PHP、Shell。
  • 支持框架:Maven、Ant、Yarn、NPM、Gulp、Grunt、Cmake、NodeJS、gfortran、mono、Android。
  • 支持计算架构:x86、arm

极致效率:利用云端构建海量构建资源,采用多样化的云端构建加速手段,实现本地构建无法企及的构建速度

  • 云上弹性资源,任务并行执行。
  • 构建加速:全局共享缓存、项目内精准增量构建、分布式编译构建等。

高效扩展:不受编译构建平台约束,用户可自行接入平台未内置的构建环境,实现高效的环境扩展

  • 支持用户自定义构建环境。
  • 支持不同的源码托管服务。
  • 支持用户自定义资源(比如本地环境)接入。

辅助洞察:提供构建任务可视化分析报告,帮助构建集成工程师对构建效率、构建成功率分析,支撑构建效率优化

  • 构建成功率统计及趋势。
  • 构建效率统计及趋势。

您将学到什么?

华为云提供了 CodeArts Build 服务端 SDK,您可以直接集成服务端 SDK 来调用 CodeArts Build 的相关 API,从而实现对 CodeArts Build 的快速操作。

该场景示例代码以执行构建任务为例,介绍如何使用 CodeArts Build SDK获取项目下的构建任务列表、查看构建任务的构建历史列表、执行指定构建任务、查看构建任务执行状态。提供的相关API便于用户进行持续集成。

2、开发时序图

  • 接口所需参数包含AK、SK、ProjectId,获取方法参考前置条件中的步骤。
  • 各接口参数说明见接口参数说明小节。
  • 各接口运行结果示例见运行结果小节。 img.png

3、前置条件

  • 1.开发者已注册华为云账号。
  • 2.已在编译构建服务创建构建任务。
  • 3.开发者在使用前需先获取账号的AK、SK、ProjectId。
  • 4.获取华为云开发工具包SDK,在项目pom.xml文件中加入相应的SDK依赖项,SDK版本号请参见SDK开发中心
  <dependencies>
    <dependency>
      <groupId>com.huaweicloud.sdk</groupId>
      <artifactId>huaweicloud-sdk-codeartsbuild</artifactId>
      <version>3.1.47</version>
    </dependency>
  </dependencies>
  • 5.华为云 Java SDK 支持 Java JDK 1.8 及其以上版本。

获取方法

  • 1.获取AK、SK:请在华为云控制台“我的凭证-访问密钥”页面上创建您的 AK/SK。具体步骤如下: img.png img.png img.png img.png
  • 2.获取ProjectId:进入华为云-编译构建页面,选择需要测试的项目进入项目页面,记录地址栏中project后的id。示例如图: img.png

4、接口参数说明

关于接口参数的详细说明可参见:

a.查看项目下用户的构建任务列表

b.查看构建任务的构建历史列表

c.执行构建任务

d.查看任务运行状态

5、关键代码片段

import com.huaweicloud.sdk.codeartsbuild.v3.CodeArtsBuildClient;
import com.huaweicloud.sdk.codeartsbuild.v3.model.RunJobRequest;
import com.huaweicloud.sdk.codeartsbuild.v3.model.RunJobRequestBody;
import com.huaweicloud.sdk.codeartsbuild.v3.model.RunJobResponse;
import com.huaweicloud.sdk.codeartsbuild.v3.model.ShowJobListByProjectIdRequest;
import com.huaweicloud.sdk.codeartsbuild.v3.model.ShowJobListByProjectIdResponse;
import com.huaweicloud.sdk.codeartsbuild.v3.model.ShowJobStatusRequest;
import com.huaweicloud.sdk.codeartsbuild.v3.model.ShowJobStatusResponse;
import com.huaweicloud.sdk.codeartsbuild.v3.model.ShowListHistoryRequest;
import com.huaweicloud.sdk.codeartsbuild.v3.model.ShowListHistoryResponse;
import com.huaweicloud.sdk.codeartsbuild.v3.region.CodeArtsBuildRegion;
import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.core.http.HttpConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CodeArtsBuildBuildTaskDemo {
  private static final Logger LOGGER = LoggerFactory.getLogger(CodeArtsBuildBuildTaskDemo.class.getName());

  public static void main(String[] args) {
    String ak = "<YOUR AK>";
    String sk = "<YOUR SK>";

    ICredential auth = new BasicCredentials()
            .withAk(ak)
            .withSk(sk);
    // 创建client实例
    CodeArtsBuildClient client = CodeArtsBuildClient.newBuilder()
            .withCredential(auth).withRegion(CodeArtsBuildRegion.CN_NORTH_4)
            .withHttpConfig(new HttpConfig().withIgnoreSSLVerification(true).withTimeout(60000)).build();
    // 查看项目下用户的构建任务列表
    ShowJobListByProjectIdRequest request = new ShowJobListByProjectIdRequest();
    request.withProjectId("<YOUR PROJECT ID>");
    request.withPageIndex(0);
    request.withPageSize(1);
    try {
      ShowJobListByProjectIdResponse response = client.showJobListByProjectId(request);
      LOGGER.info(response.toString());
      if (response.getJobs() == null || response.getJobs().isEmpty()) {
        LOGGER.info("There is no task under the project.");
        return ;
      }
      String jobId = response.getJobs().get(0).getId();
      showListHistory(jobId, client);
      runJob(jobId, client);
      showJobStatus(jobId, client);
    } catch (ConnectionException e) {
      LOGGER.error(e.toString());
    } catch (RequestTimeoutException e) {
      LOGGER.error(e.toString());
    } catch (ServiceResponseException e) {
      LOGGER.error(e.toString());
      LOGGER.error(String.valueOf(e.getHttpStatusCode()));
      LOGGER.error(e.getErrorCode());
      LOGGER.error(e.getErrorMsg());
    }
  }

  public static void showListHistory(String jobId, CodeArtsBuildClient client) {
    // 查看构建任务的构建历史列表
    ShowListHistoryRequest slhRequest = new ShowListHistoryRequest();
    slhRequest.withInterval(1);
    slhRequest.withJobId(jobId);
    slhRequest.withOffset(1);
    slhRequest.withLimit(1);
    ShowListHistoryResponse slhResponse = client.showListHistory(slhRequest);
    LOGGER.info(slhResponse.toString());
  }

  public static void runJob(String jobId, CodeArtsBuildClient client) {
    // 执行构建任务
    RunJobRequest rjRequest = new RunJobRequest();
    RunJobRequestBody body = new RunJobRequestBody();
    body.withJobId(jobId);
    rjRequest.withBody(body);
    RunJobResponse RJResponse = client.runJob(rjRequest);
    LOGGER.info(RJResponse.toString());
  }

  public static void showJobStatus(String jobId, CodeArtsBuildClient client) {
    // 查看任务运行状态
    ShowJobStatusRequest sjsRequest = new ShowJobStatusRequest();
    sjsRequest.withJobId(jobId);
    ShowJobStatusResponse sjsResponse = client.showJobStatus(sjsRequest);
    LOGGER.info(sjsResponse.toString());
  }
}

6、运行结果

查看项目下用户的构建任务列表

{
  "total": 1,
  "jobs": [
    {
      "id": "2a86c3c1ed18416399279fe6........",
      "job_name": "demo",
      "job_creator": "ae22fd035f354cfa8d82a3f1........",
      "user_name": "test",
      "last_build_time": 1608004535000,
      "health_score": 75,
      "source_code": "test",
      "last_build_status": "blue",
      "is_finished": true,
      "disabled": true,
      "favorite": true,
      "is_modify": true,
      "is_delete": true,
      "is_execute": true,
      "is_copy": true,
      "is_forbidden": true,
      "is_view": true
    }
  ]
}

查看构建任务的构建历史列表

{
  "total": 1,
  "history_records": {
    "record_id": "20201230.1",
    "job_id": "f9d6c8466d614a9788e9a0ac........",
    "build_number": 55,
    "start_time": "2020-12-30T17:33:11+08:00",
    "end_time": "2020-12-30T17:33:27+08:00",
    "result": "FAILURE"
  }
}

执行构建任务

{
  "octopus_job_name": "j_Oaqg...",
  "actual_build_number": "20",
  "daily_build_number": "20200612.20"
}

查看任务运行状态

{
  "result": true
}

7、参考

本示例的代码工程仅用于简单演示,实际开发过程中应严格遵循开发指南。访问以下链接可以获取详细信息:开发指南

项目介绍

基于华为云java SDK,通过ProjectId查询项目下的构建任务列表,选择任务查看构建任务的构建历史列表,然后执行构建任务并查询构建任务是否在运行。

定制我的领域