fre*_*dev 6 continuous-integration continuous-deployment gitlab sonarqube gitlab-ci
使用 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}"
Run Code Online (Sandbox Code Playgroud)
我已将此模板作为一个项目包含在主 gitlab ci 文件中:
include:
- project: 'organization/group/ci-template'
ref: master
file: '.sonar-scanner.yml'
Run Code Online (Sandbox Code Playgroud)
正如您所理解的,我有一个名为 ci-templates 的存储库,其中创建了我的所有模板。在另一个存储库中,我使用包含这些模板进行扩展。
最后,在存储库中,当创建新的合并请求时,我的声纳作业正在项目中的另一个文件下运行test/quality.yml
:
sonar:
stage: quality
extends:
- sonar-analysis
allow_failure: true
only:
refs:
- merge_requests
Run Code Online (Sandbox Code Playgroud)
除了替换或覆盖我的环境变量之外,一切都运行良好。确实是我的模板。我有很多声纳服务器或项目名称。我想知道如何覆盖这些变量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
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
variables:
SONAR_PROJECT_NAME: foo
SONAR_SERVER: bar
sonar:
stage: quality
extends:
- sonar-analysis
allow_failure: true
only:
refs:
- merge_requests
Run Code Online (Sandbox Code Playgroud)
完成这项工作的最佳方法是什么?
在 2020 年 2 月提出这个问题后,新的 MR使用 CI 包含块中的非预定义变量已合并到 Gitlab 14.2 中,这解决了覆盖作业的问题。
执行包含操作的项目可以在扩展作业时重新定义变量:
include:
- project: 'organization/group/ci-template'
ref: master
file: '.sonar-scanner.yml'
sonar:
stage: quality
extends:
- sonar-analysis
variables:
SONAR_PROJECT_NAME: foo
SONAR_SERVER: bar
allow_failure: true
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,您可能希望模板中的作业以点开头,.sonar-analysis
而不是sonar-analysis
不在sonar-analysis
模板中创建真正的作业(请参阅隐藏作业)。
或者,您也可以直接设置项目中现有作业的变量值(以重新定义它们),该作业执行以下操作:
include:
- project: 'organization/group/ci-template'
ref: master
file: '.sonar-scanner.yml'
sonar-analysis:
variables:
SONAR_PROJECT_NAME: foo
SONAR_SERVER: bar
Run Code Online (Sandbox Code Playgroud)
我用一个测试项目验证了这一点,其中包括来自同行测试项目的模板,当它运行时,会产生两个作业。这是首要作业的作业输出:
$ echo sonar.projectKey=${SONAR_PROJECT_NAME}
sonar.projectKey=foo
$ echo sonar.login=${SONAR_LOGIN}
sonar.login=bob
$ echo sonar.host.url=${SONAR_SERVER}
sonar.host.url=bar
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11953 次 |
最近记录: |