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便于用户进行持续集成。
5、关键代码片段
Copied!
import os
from huaweicloudsdkcodeartsbuild.v3.codeartsbuild_client import CodeArtsBuildClient
from huaweicloudsdkcodeartsbuild.v3.model.run_job_request import RunJobRequest
from huaweicloudsdkcodeartsbuild.v3.model.run_job_request_body import RunJobRequestBody
from huaweicloudsdkcodeartsbuild.v3.model.show_job_list_by_project_id_request import ShowJobListByProjectIdRequest
from huaweicloudsdkcodeartsbuild.v3.model.show_job_status_request import ShowJobStatusRequest
from huaweicloudsdkcodeartsbuild.v3.model.show_list_history_request import ShowListHistoryRequest
from huaweicloudsdkcodeartsbuild.v3.region.codeartsbuild_region import CodeArtsBuildRegion
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkcore.exceptions.exceptions import ConnectionException
from huaweicloudsdkcore.exceptions.exceptions import RequestTimeoutException
from huaweicloudsdkcore.exceptions.exceptions import ServiceResponseException
from huaweicloudsdkcore.http.http_config import HttpConfig
class CodeArtsBuildBuildTaskDemo:
def __init__(self):
pass
@staticmethod
def main(args):
# 认证用的ak和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
# 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
ak = os.environ["HUAWEICLOUD_SDK_AK"]
sk = os.environ["HUAWEICLOUD_SDK_SK"]
auth = BasicCredentials(
ak=ak,
sk=sk
)
# 创建client实例
client = CodeArtsBuildClient.new_builder() \
.with_credentials(credentials=auth) \
.with_region(region=CodeArtsBuildRegion.CN_NORTH_4) \
.build()
# 查看项目下用户的构建任务列表
request = ShowJobListByProjectIdRequest()
request.project_id = "<YOUR PROJECT ID>"
request.page_index = 0
request.page_size = 1
try:
response = client.show_job_list_by_project_id(request)
print(response)
if not response.jobs:
print("There is no task under the project.")
return
job_id = response.jobs[0].id
CodeArtsBuildBuildTaskDemo.show_list_history(job_id, client)
CodeArtsBuildBuildTaskDemo.run_job(job_id, client)
CodeArtsBuildBuildTaskDemo.show_job_status(job_id, client)
except ConnectionException as e:
print(e)
except RequestTimeoutException as e:
print(e)
except ServiceResponseException as e:
print(e)
print(str(e.status_code))
print(e.error_code)
print(e.error_msg)
@staticmethod
def show_list_history(job_id, client):
# 查看构建任务的构建历史列表
slh_request = ShowListHistoryRequest()
slh_request.interval = 1
slh_request.job_id = job_id
slh_request.offset = 1
slh_request.limit = 1
slh_response = client.show_list_history(slh_request)
print(slh_response)
@staticmethod
def run_job(job_id, client):
# 执行构建任务
rj_request = RunJobRequest()
body = RunJobRequestBody()
body.job_id = job_id
rj_request.body = body
rj_response = client.run_job(rj_request)
print(rj_response)
@staticmethod
def show_job_status(job_id, client):
# 查看任务运行状态
sjs_request = ShowJobStatusRequest()
sjs_request.job_id = job_id
sjs_response = client.show_job_status(sjs_request)
print(sjs_response)
if __name__ == "__main__":
CodeArtsBuildBuildTaskDemo().main(any)
6、运行结果
查看项目下用户的构建任务列表
Copied!
{
"jobs": [
{
"id": "13c6ee...",
"job_name": "Android-63599207",
"job_creator": "e2364f...",
"user_name": "webidea0110",
"last_build_time": 1692945447000.0,
"health_score": 0,
"source_code": "codeci",
"last_build_status": "red",
"is_finished": true,
"disabled": false,
"favorite": true,
"is_modify": true,
"is_delete": true,
"is_execute": true,
"is_copy": true,
"is_forbidden": true,
"is_view": true
}
],
"total": 24
}
查看构建任务的构建历史列表
Copied!
{
"history_records": [
{
"record_id": "20230825.4",
"job_id": "13c6ee...",
"build_number": 33,
"start_time": "2023-08-25T14:35:36+08:00",
"end_time": "2023-08-25T14:36:48+08:00",
"result": "FAILURE"
}
],
"total": 6
}
执行构建任务
Copied!
{
"octopus_job_name": "13c6ee...",
"actual_build_number": "35",
"daily_build_number": "20230825.6"
}
查看任务运行状态
Copied!
{
"result": true
}
1、介绍
什么是编译构建?
编译构建(CodeArts Build)基于云端大规模分布式加速,为客户提供高速、低成本、配置简单的混合语言构建能力,帮助客户缩短构建时间,提升构建效率。
开箱即用:全场景,支持多种语言,多种框架,覆盖主流软件开发场景
极致效率:利用云端构建海量构建资源,采用多样化的云端构建加速手段,实现本地构建无法企及的构建速度
高效扩展:不受编译构建平台约束,用户可自行接入平台未内置的构建环境,实现高效的环境扩展
辅助洞察:提供构建任务可视化分析报告,帮助构建集成工程师对构建效率、构建成功率分析,支撑构建效率优化
您将学到什么?
华为云提供了 CodeArts Build 服务端 SDK,您可以直接集成服务端 SDK 来调用 CodeArts Build 的相关 API,从而实现对 CodeArts Build 的快速操作。
该场景示例代码以执行构建任务为例,介绍如何使用 CodeArts Build SDK获取项目下的构建任务列表、查看构建任务的构建历史列表、执行指定构建任务、查看构建任务执行状态。提供的相关API便于用户进行持续集成。
2、开发时序图
3、前置条件
6.华为云 Python SDK 支持Python3.3以上 的版本。 获取方法
1.获取AK、SK:请在华为云控制台“我的凭证-访问密钥”页面上创建您的 AK/SK。具体步骤如下:

2.获取ProjectId:进入华为云-编译构建页面,选择需要测试的项目进入项目页面,记录地址栏中project后的id。示例如图:
4、接口参数说明
关于接口参数的详细说明可参见:
a.查看项目下用户的构建任务列表
b.查看构建任务的构建历史列表
c.执行构建任务
d.查看任务运行状态
5、关键代码片段
import os from huaweicloudsdkcodeartsbuild.v3.codeartsbuild_client import CodeArtsBuildClient from huaweicloudsdkcodeartsbuild.v3.model.run_job_request import RunJobRequest from huaweicloudsdkcodeartsbuild.v3.model.run_job_request_body import RunJobRequestBody from huaweicloudsdkcodeartsbuild.v3.model.show_job_list_by_project_id_request import ShowJobListByProjectIdRequest from huaweicloudsdkcodeartsbuild.v3.model.show_job_status_request import ShowJobStatusRequest from huaweicloudsdkcodeartsbuild.v3.model.show_list_history_request import ShowListHistoryRequest from huaweicloudsdkcodeartsbuild.v3.region.codeartsbuild_region import CodeArtsBuildRegion from huaweicloudsdkcore.auth.credentials import BasicCredentials from huaweicloudsdkcore.exceptions.exceptions import ConnectionException from huaweicloudsdkcore.exceptions.exceptions import RequestTimeoutException from huaweicloudsdkcore.exceptions.exceptions import ServiceResponseException from huaweicloudsdkcore.http.http_config import HttpConfig class CodeArtsBuildBuildTaskDemo: def __init__(self): pass @staticmethod def main(args): # 认证用的ak和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 ak = os.environ["HUAWEICLOUD_SDK_AK"] sk = os.environ["HUAWEICLOUD_SDK_SK"] auth = BasicCredentials( ak=ak, sk=sk ) # 创建client实例 client = CodeArtsBuildClient.new_builder() \ .with_credentials(credentials=auth) \ .with_region(region=CodeArtsBuildRegion.CN_NORTH_4) \ .build() # 查看项目下用户的构建任务列表 request = ShowJobListByProjectIdRequest() request.project_id = "<YOUR PROJECT ID>" request.page_index = 0 request.page_size = 1 try: response = client.show_job_list_by_project_id(request) print(response) if not response.jobs: print("There is no task under the project.") return job_id = response.jobs[0].id CodeArtsBuildBuildTaskDemo.show_list_history(job_id, client) CodeArtsBuildBuildTaskDemo.run_job(job_id, client) CodeArtsBuildBuildTaskDemo.show_job_status(job_id, client) except ConnectionException as e: print(e) except RequestTimeoutException as e: print(e) except ServiceResponseException as e: print(e) print(str(e.status_code)) print(e.error_code) print(e.error_msg) @staticmethod def show_list_history(job_id, client): # 查看构建任务的构建历史列表 slh_request = ShowListHistoryRequest() slh_request.interval = 1 slh_request.job_id = job_id slh_request.offset = 1 slh_request.limit = 1 slh_response = client.show_list_history(slh_request) print(slh_response) @staticmethod def run_job(job_id, client): # 执行构建任务 rj_request = RunJobRequest() body = RunJobRequestBody() body.job_id = job_id rj_request.body = body rj_response = client.run_job(rj_request) print(rj_response) @staticmethod def show_job_status(job_id, client): # 查看任务运行状态 sjs_request = ShowJobStatusRequest() sjs_request.job_id = job_id sjs_response = client.show_job_status(sjs_request) print(sjs_response) if __name__ == "__main__": CodeArtsBuildBuildTaskDemo().main(any)
6、运行结果
查看项目下用户的构建任务列表
{ "jobs": [ { "id": "13c6ee...", "job_name": "Android-63599207", "job_creator": "e2364f...", "user_name": "webidea0110", "last_build_time": 1692945447000.0, "health_score": 0, "source_code": "codeci", "last_build_status": "red", "is_finished": true, "disabled": false, "favorite": true, "is_modify": true, "is_delete": true, "is_execute": true, "is_copy": true, "is_forbidden": true, "is_view": true } ], "total": 24 }
查看构建任务的构建历史列表
{ "history_records": [ { "record_id": "20230825.4", "job_id": "13c6ee...", "build_number": 33, "start_time": "2023-08-25T14:35:36+08:00", "end_time": "2023-08-25T14:36:48+08:00", "result": "FAILURE" } ], "total": 6 }
执行构建任务
{ "octopus_job_name": "13c6ee...", "actual_build_number": "35", "daily_build_number": "20230825.6" }
查看任务运行状态
{ "result": true }
7、参考
本示例的代码工程仅用于简单演示,实际开发过程中应严格遵循开发指南。访问以下链接可以获取详细信息:开发指南