使用gitlab ci,我有一个用于创建所有模板的仓库。
例如,我有一个名为.sonar-scanner.yml
的声纳扫描仪作业模板:
sonar-analysis:
stage: quality
image:
name: sonar-scanner-ci:latest
entrypoint: [""]
script:
- sonar-scanner
-D"sonar.projectKey=${SONAR_PROJECT_NAME}"
-D"sonar.login=${SONAR_LOGIN}"
-D"sonar.host.url=${SONAR_SERVER}"
-D"sonar.projectVersion=${CI_COMMIT_SHORT_SHA}"
-D"sonar.projectBaseDir=${CI_PROJECT_DIR}"
我已经在主gitlab ci文件中将此模板包含为这样的项目:
include:
- project: 'organization/group/ci-template'
ref: master
file: '.sonar-scanner.yml'
据您所知,我有一个名为ci-templates的存储库,在其中创建了所有模板。在另一个仓库中,我使用 include 这些模板进行扩展。
最后,在一个仓库中,当创建一个新的合并请求时,我的声纳作业正在我项目test/quality.yml
中的另一个文件下运行:
sonar:
stage: quality
extends:
- sonar-analysis
allow_failure: true
only:
refs:
- merge_requests
除了替换或覆盖我的环境变量外,其他所有工具都运行良好。确实是我的模板。我有许多声纳服务器或项目名称。我想知道从模板扩展作业时如何覆盖这些变量SONAR_SERVER
和SONAR_PROJECT_NAME
。
在我的主.gitlab-ci.yml
文件中,我有一个变量部分声明,当我在其中覆盖这些变量时,它就起作用了。
但这不是我真正想要的。使用许多阶段和许多微服务,可以以不同的方式重用相同的扩展作业。我真正想做的就是直接在文件test/quality.yml
中覆盖这些变量。
例如,这不起作用:
sonar:
stage: quality
extends:
- sonar-analysis
variables:
SONAR_PROJECT_NAME: foo
SONAR_SERVER: bar
allow_failure: true
only:
refs:
- merge_requests
这也不行:
variables:
SONAR_PROJECT_NAME: foo
SONAR_SERVER: bar
sonar:
stage: quality
extends:
- sonar-analysis
allow_failure: true
only:
refs:
- merge_requests
使这项工作最好的方法是什么?