- 最新动态
- 功能总览
- 产品介绍
- 快速入门
-
用户指南
- 编译构建服务(CodeArts Build)使用流程
- 开通CodeArts Build
- 配置CodeArts Build项目级角色权限
- 新建构建任务
-
配置构建任务
- 构建任务基础配置
- 选择构建步骤
-
配置构建步骤
- 使用Maven构建
- 使用Android构建
- 使用Npm构建
- 使用Gradle构建
- 使用Yarn构建
- 使用gulp构建
- 使用Grunt构建
- 使用mono构建
- 使用PHP构建
- 使用SetupTool构建
- 使用PyInstaller构建
- 使用shell命令构建
- 使用Gnu-arm构建
- 使用CMake构建
- 使用Ant构建
- 使用Kotlin构建
- 使用Go语言构建
- 使用Ionic Android App构建
- 构建Android快应用
- 使用Sbt构建
- 使用Grails构建
- 使用Bazel构建
- 使用Flutter构建
- 使用HarmonyOS构建
- 通过Docker命令操作镜像
- 生成单元测试报告
- 自定义构建环境
- 使用自定义环境构建
- 下载软件发布库中的软件包
- 上传软件包到软件发布库
- 上传文件到OBS
- 配置构建任务参数
- 配置构建任务执行计划
- 配置构建任务角色权限
- 配置构建任务事件通知
- 执行构建任务
- 查看构建任务
- 管理构建任务
- 查询审计日志
- 参考
- 旧版手册页面
-
最佳实践
- 基于Maven构建产物制作Docker镜像并发布到镜像仓(内置执行机/图形化构建)
- 使用Maven构建上传软件包至私有依赖库(内置执行机/图形化构建)
- 使用Maven构建实现私有依赖包的上传及下载引用(内置执行机/图形化构建)
- 使用NPM构建上传软件包至软件发布库(内置执行机/图形化构建)
- 使用自定义执行机执行Maven构建(自定义执行机/图形化构建)
- 使用Maven构建上传软件包和推送镜像到SWR(内置执行机/代码化构建)
- 使用Maven构建执行多任务构建工程(内置执行机/代码化构建)
- 基于私有依赖库使用Maven构建并上传软件包(内置执行机/图形化构建)
- 使用自定义构建环境执行构建任务(内置执行机/图形化构建)
- API参考
-
常见问题
- 通用构建问题
- Maven构建
- Android构建
- Gradle构建
-
Npm构建
- 执行Npm构建时,报错提示JavaScript heap out of memory
- 执行Npm构建时,报错提示enoent ENOENT: no such file or directory
- 执行Npm构建时,报错提示Module not found: Error: Can't resolve ...
- 执行Npm构建失败,但不显示错误日志
- 执行Npm构建时,报错提示npm cb() never called
- 执行Npm构建时,报错提示gyp ERR! stack Error: EACCES: permission denied
- 执行Npm构建时,报错提示eslint: error 'CLODOP' is not defined
- 执行Npm构建时,报错提示node-sass下载失败
- 执行Npm构建时,报错提示error: could not write config file
- Npm构建耗时且安装依赖缓慢
- 执行Npm构建时,报错提示找不到依赖版本
- 镜像问题
- 视频帮助
- 通用参考
链接复制成功!
使用Maven构建
使用Maven构建Java项目。
图形化构建
在配置构建步骤中,添加“Maven构建”构建步骤,参考表1配置参数。
参数 |
说明 |
---|---|
步骤显示名称 |
构建步骤的名称,可自定义修改。
|
工具版本 |
根据用户实际开发环境的需要,选择对应的工具版本。 CodeArts Build支持的工具版本,可查看构建工具版本。若当前的工具版本不满足您的使用要求,您可以自定义构建环境。 |
命令 |
配置Maven命令,一般使用系统默认生成的命令即可。如果需要配置更多命令,可参考Maven官网。 |
失败后是否继续运行 |
当前步骤执行失败后是否继续执行下一个步骤,根据实际使用场景选择是或否。 |
setting配置 |
“release仓库”和“snapshot仓库”两种仓库对应的使用场景区分如下,使用时要务必注意区分,避免出现如“将依赖上传到软件发布库但是构建时无法下载”此类场景。
|
发布依赖包到CodeArts私有依赖库 |
编译构建服务默认使用私有依赖库作为私有依赖下载源,如果需要将构建产物上传至私有依赖库供其他项目依赖使用,则需要添加此配置。配置前,需已创建私有依赖库。配置方法如下:
上传的私有依赖包,在其他项目添加pom.xml文件中的groupId、artifactId、version坐标即可引用。 |
单元测试 |
如果用户需要对单元测试结果进行处理,可配置此项。详见配置单元测试。 |
缓存配置 |
选择是否使用缓存以提高构建速度,选择“使用缓存”后,每次构建时会把下载依赖包缓存起来,后续构建无需重复拉取,可有效提高构建速度。 maven构建的依赖包存入缓存之后,只有当租户下面构建的项目有引进新的依赖包时,才会更新缓存目录,并不支持对已有的依赖包缓存文件进行更新。 |
代码化构建
参考以下代码示例,修改在创建代码化构建使用的YAML文件中的BUILD部分代码信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
version: 2.0 # 必须是2.0 steps: BUILD: - maven: image: cloudbuild@maven3.5.3-jdk8-open inputs: settings: public_repos: - https://mirrors.example.com/maven cache: true # 是否开启缓存 unit_test: coverage: true ignore_errors: false report_path: "**/TEST*.xml" enable: true coverage_report_path: "**/site/jacoco" command: mvn package -Dmaven.test.failure.ignore=true -U -e -X -B ignore_fail: true |
参数 |
类型 |
说明 |
---|---|---|
image |
string |
填写镜像地址,有以下两种格式。
|
settings |
map |
可选参数。不配置,则默认使用CodeArts提供的setting.xml文件,如果需要使用自定义的“settings.xml”文件,可先添加自定义setting.xml文件,然后在默认的打包命令mvn package -Dmaven.test.failure.ignore=true -U -e -X -B末尾添加--settings settings.xml。 |
cache |
bool |
可选参数。 配置是否开启缓存。
默认值:false。 |
command |
string |
配置执行的Maven命令。如果需要配置更多命令,可参考Maven官网。 |
unit_test |
map |
可选参数。 配置单元测试。详细操作指导参考配置单元测试。 |
ignore_fail |
string |
用于控制当前步骤执行失败后是否继续执行下一个步骤。
|
添加自定义“setting.xml”文件
- 图形化构建
- 在“Maven构建”的命令窗口执行cat /home/build/.m2/settings.xml命令,任务执行完成后,会在构建日志中展示“settings.xml”文件的内容。
- 参考构建日志中的“settings.xml”的信息自定义新的“settings.xml”文件。
- 在“Maven构建”步骤前增加“下载文件管理的文件”构建步骤。
自定义步骤显示名称,工具版本当前仅支持“shell4.2.46-git1.8.3-zip6.00”。
- 单击“上传”,在弹出的窗口中选择2中自定义的文件,添加描述,勾选相关协议,然后单击“保存”。
- 在“下载文件”中选择上传的“setting.xml”文件。
- 代码化构建
参考以下代码示例,修改在创建代码化构建使用的YAML文件中的BUILD部分代码信息。
1 2 3 4 5 6 7
version: 2.0 # 必须是2.0 steps: BUILD: - download_file: inputs: name: settings.xml ignore_fail: true
表3 下载文件管理的文件代码示例参数说明 参数
类型
说明
name
string
setting文件名称。
ignore_fail
string
用于控制当前步骤执行失败后是否继续执行下一个步骤。
- true:是。
- 为空:否。
- 文件大小限制为100k。
- 文件类型限制为:.xml、.key、.keystore、.jks、.crt、.pem。
- 最多支持上传20个文件。
- 在搜索框输入关键字,可搜索文件。
- 单击操作列
,可修改文件名称,并设置是否允许租户内所有成员在编译构建中使用该文件。
- 单击操作列
,可以下载文件。
- 单击操作列
,在下拉框中选择“删除”,可根据弹框提示确认是否删除。
- 单击操作列
,在下拉框中选择“编辑权限”,可在弹出的界面配置用户操作文件的权限。
图1 配置用户操作文件权限表4 文件管理角色权限说明 权限类型
拥有该权限的角色
添加用户
项目下所有用户。
查看
文件创建者、相同租户的用户。
使用
文件创建者、文件创建者配置了使用权限的用户。
更新
文件创建者、文件创建者配置了更新权限的用户。
删除
文件创建者、文件创建者配置了删除权限的用户。
编辑权限
文件创建者。
说明:
创建者默认有所有权限并且不可被删除和修改。
配置单元测试
- 配置单元测试前,需要在项目中编写单元测试代码,且需满足如下条件:
- 单元测试用例代码存放位置需满足Maven默认单元测试用例目录规范及命名规范,或自行在配置中指定用例位置。
如:单元测试用例统一存放在路径为“src/test/java/{{package}}/”,单元测试将在Maven构建过程自动执行。
- 项目中不可存在忽略单元测试用例的配置代码,即确保以下代码未存在于项目的“pom.xml”文件中。
1 2 3 4 5 6 7 8
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <configuration> <skipTests>true</skipTests> </configuration> </plugin>
- “pom.xml”文件中需引入junit依赖,添加的代码示例如下。
1 2 3 4 5
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.1</version> </dependency>
- 单元测试用例代码存放位置需满足Maven默认单元测试用例目录规范及命名规范,或自行在配置中指定用例位置。
- 在代码仓中创建单元测试类,如图2所示。
“Demo.java”文件代码示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
package test; public class Demo { public String test(Integer i) { switch (i) { case 1: return "1"; case 2: return "2"; default: return "0"; } } }
“DemoTest.java”文件代码示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
package test; import org.junit.Test; public class DemoTest { private Demo demo=new Demo(); @Test public void test(){ assert demo.test(1).equals("1"); assert demo.test(2).equals("2"); assert demo.test(3).equals("0"); } }
- 配置构建步骤中的单元测试。
- 图形化构建
- 在“Maven构建”步骤的命令窗口,使用“#”注释命令mvn package -Dmaven.test.skip=true -U -e -X -B。
- 删除#mvn package -Dmaven.test.failure.ignore=true -U -e -X -B命令前的“#”。
- 展开“单元测试”,根据实际需求参考表5配置参数。
表5 单元测试配置参数说明 参数
说明
是否处理单元测试结果
配置是否处理单元测试结果。
- 是:处理。
- 否:不处理。
是否忽略用例失败
当选择处理单元测试结果时,需要配置是否忽略用例失败。
- 是:用例失败时构建任务仍然继续。
- 否:用例失败时构建任务也失败。
单元测试结果文件
测试报告需要采集单元测试结果用以生成可视化报告,需在此处填写单元测试结果文件存放路径。
多数情况下,保留默认路径“**/TEST*.xml”即可满足任务需求。为增加结果准确性,可根据实际情况制定精确的报告路径,如:“target/surefire-reports/TEST*.xml”。
是否处理单元测试覆盖率结果
根据实际需要配置“是否处理单元测试覆盖率结果”,若选“是”,会生成覆盖率测试报告。配置方法请参见使用JaCoCo生成单元测试覆盖率报告。
单元测试覆盖率报告路径
当选择处理单元测试覆盖率结果时,需填写相对于项目根目录的相对路径,如:target/site/jacoco,选择处理单元测试覆盖率结果后,会将此目录下的所有文件进行打包上传。
- 在“Maven构建”步骤的命令窗口,使用“#”注释命令mvn package -Dmaven.test.skip=true -U -e -X -B。
- 代码化构建
参考以下代码示例,修改在创建代码化构建使用的YAML文件中的BUILD部分代码信息。
1 2 3 4 5 6 7 8 9 10 11
version: 2.0 # 必须是2.0 steps: BUILD: - maven: unit_test: coverage: true ignore_errors: false report_path: "**/TEST*.xml" enable: true coverage_report_path: "**/site/jacoco" command: mvn package -Dmaven.test.failure.ignore=true -U -e -X -B
表6 单元测试参数说明 参数
类型
说明
enable
bool
可选参数。
配置是否处理单元测试结果。
- true:处理。配置“true”,需要mvn命令末尾增加-Dmaven.test.failure.ignore=true参数。
- false:不处理。
默认值:true。
ignore_errors
bool
可选参数。
配置是否忽略用例失败。
- true:忽略,用例失败时构建任务仍然继续。
- false:不忽略,用例失败时构建任务也失败
默认值:true。
report_path
String
填写单元测试数据存储路径。可根据实际情况制定精确的报告路径,如:“target/surefire-reports/TEST*.xml”。
coverage
bool
可选参数。
配置是否处理覆盖率数据。若配置“true”,配置方法请参见使用JaCoCo生成单元测试覆盖率报告。
- true:处理。
- false:不处理。
默认值:false。
coverage_report_path
string
可选参数。
当选择处理单元测试覆盖率结果时,需填写相对于项目根目录的相对路径,如:target/site/jacoco,选择处理单元测试覆盖率结果后,会将此目录下的所有文件进行打包上传。
- 图形化构建
- 配置完成后,如果构建任务执行成功,即可在任务执行详情页面的“测试”页签查看测试报告。如果选择了处理单元测试覆盖率报告,会生成覆盖率测试报告,单击“覆盖率报告下载”即可下载。
配置使用JaCoCo生成单元测试覆盖率报告
配置单元测试时,如果选择处理单元测试覆盖率结果,则需要按照如下指导进行配置。
- 单模块项目配置方法
在项目中已添加jacoco-maven-plugin插件用于生成单元覆盖率报告,即在“pom.xml”文件中添加如下配置:
JaCoCo的report目标默认是在verify阶段,这里需要将report目标定义为test阶段。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.5</version> <executions> <execution> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>report</id> <phase>test</phase> #定义report目标的阶段 <goals> <goal>report</goal> </goals> </execution> </executions> </plugin>
- 多模块项目配置方法
假设多模块项目代码结构如下,以此为例为您介绍如何配置生成单元测试覆盖率报告。
1 2 3 4 5 6 7
├── module1 │ └── pom.xml ├── module2 │ └── pom.xml ├── module3 │ └── pom.xml ├── pom.xml
- 在项目下添加一个用来聚合的模块,自定义名称如:report,添加聚合模块后的代码结构如下:
1 2 3 4 5 6 7 8 9
├── module1 │ └── pom.xml ├── module2 │ └── pom.xml ├── module3 │ └── pom.xml ├── report │ └── pom.xml ├── pom.xml
- 在项目根目录的“pom.xml”文件添加jacoco-maven-plugin插件,代码示例如下。
1 2 3 4 5 6 7 8 9 10 11 12 13
<!-- 配置单元测试覆盖率--> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.3</version> <executions> <execution> <goals> <goal>prepare-agent</goal> </goals> </execution> </executions> </plugin>
- 配置聚合模块的“pom.xml”文件。
以dependency形式引入所有依赖模块,并使用report-aggregate定义JaCoCo聚合目标。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
<dependencies> <dependency> <groupId>${project.groupId}</groupId> <artifactId>module1</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>module2</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>module3</artifactId> <version>${project.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.3</version> <executions> <execution> <id>report-aggregate</id> <phase>test</phase> <goals> <goal>report-aggregate</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
- 配置完成后,在项目根目录下执行mvn test,执行成功后会在“report/target/site/jacoco-aggregate”目录下生成各个模块的覆盖率报告。也可以在outputDirectory中自定义报告的输出路径:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.3</version> <executions> <execution> <id>report-aggregate</id> <phase>test</phase> <goals> <goal>report-aggregate</goal> </goals> <configuration> <outputDirectory>target/site/jacoco</outputDirectory> </configuration> </execution> </executions> </plugin>
- 在项目下添加一个用来聚合的模块,自定义名称如:report,添加聚合模块后的代码结构如下: