如何让GitLab CI定时任务用矩阵,手动触发用单一变量?
可以通过定义私有模板+规则继承的方式实现,不用重复编写Job代码,具体配置如下:
# 定义Web触发专用的并行矩阵模板 .parallel_web: parallel: matrix: - VAR: ['x'] # 定义定时触发专用的并行矩阵模板 .parallel_schedule: parallel: matrix: - VAR: ['x', 'y'] firebaseBuild: stage: build script: # 注意:需要把VAR变量传递给Gradle命令,才能编译对应变体 - ./gradlew assembleDebug -PVAR=$VAR - ./gradlew appDistributionUploadDebug -PVAR=$VAR rules: - if: '$CI_PIPELINE_SOURCE == "web"' extends: .parallel_web - if: '$CI_PIPELINE_SOURCE == "schedule"' extends: .parallel_schedule
配置说明
原来的配置问题在于,parallel矩阵的优先级高于rules里设置的变量——即使Web触发时指定了VAR: "x",矩阵仍然会生成两个Job覆盖这个值。而通过模板继承的方式,不同触发源会加载对应的矩阵配置:
- Web手动触发时,加载
.parallel_web模板,矩阵仅包含x,因此只编译一个变体; - 夜间定时触发时,加载
.parallel_schedule模板,矩阵包含x和y,自动编译两个变体。
另外,必须在Gradle命令里通过-PVAR=$VAR把CI变量传递到构建脚本,这样才能根据不同的VAR值编译对应变体。
内容的提问来源于stack exchange,提问作者Vasiliy
相关产品推荐
相关产品推荐

