基于华为云java SDK,通过ProjectId查询项目下的构建任务列表,选择任务查看构建任务的构建历史列表,然后执行构建任务并查询构建任务是否在运行。
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,获取方法参考前置条件中的步骤。
- 各接口参数说明见接口参数说明小节。
- 各接口运行结果示例见运行结果小节。

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。具体步骤如下:

- 2.获取ProjectId:进入华为云-编译构建页面,选择需要测试的项目进入项目页面,记录地址栏中project后的id。示例如图:

4、接口参数说明
关于接口参数的详细说明可参见:
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、参考
本示例的代码工程仅用于简单演示,实际开发过程中应严格遵循开发指南。访问以下链接可以获取详细信息:开发指南