当另一个作业包含“仅”时,在管道中显示 GitLab 作业
Posted
技术标签:
【中文标题】当另一个作业包含“仅”时,在管道中显示 GitLab 作业【英文标题】:Show GitLab job in the pipeline when another job contains 'only' 【发布时间】:2022-01-20 00:54:06 【问题描述】:我需要设置.gitlab-ci.yml
管道,以便在任何地方都执行一些作业(没有 only 和 except),而有些作业(例如 Deploy 步骤)仅在 master 分支上执行。但是当我添加到 Deploy only:
时,如果没有为它们指定 only:
属性,我的其他作业将变得不可见。例如 - Test
作业将到处隐藏。
有没有办法配置 GitLab 以在任何地方显示测试作业而无需仅/除了配置?
---
stages:
- Tests
- Build
- Deploy
Test:
stage: Tests
Build:
stage: Build
only:
- master
- merge_requests
Deploy:
stage: Deploy
only:
- master
管道中所需的作业可见性:
工作分支(和任何其他管道):Tests
合并请求:Tests
, Build
主分支:Tests
,Build
,Deploy
【问题讨论】:
【参考方案1】:您观察到的行为是由于为您的项目创建了合并请求的管道。
您正在观察的缺少作业的管道是合并请求管道。只有only: - merge_requests
的作业才会在合并请求管道中运行。
您会注意到在您的管道列表中还有一个分支管道,它可能或多或少地按照您的预期运行。但是,此管道不会显示在合并请求 UI 中——在 MR UI 中,仅考虑合并请求管道。
要解决此问题,您可以将以下内容添加到测试作业:
Test:
# ...
only:
- pushes
- schedules
- api
- web
- triggers
- merge_requests # enable pipelines for merge requests
或者更简单地使用rules:
Test:
rules: # enable pipelines for merge requests
- when: on_succes
如果您想继续使用管道进行合并请求并避免在测试作业中使用only
/except
,则需要改用rules:
。使用管道进行合并请求时,无法避免以某种方式为此配置测试作业。
或者,您可以避免配置Test
作业,如果您可以避免合并请求功能的管道并使用rules:
(或等效的only
/except
)来获得您想要的行为,但有一些注意事项.
include: # disable pipelines for merge requests
- template: 'Workflows/Branch-Pipelines.gitlab-ci.yml'
Test:
stage: test
# ...
Build:
rules: # run when merge requests are open
- if: $CI_OPEN_MERGE_REQUESTS
when: on_success
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: on_success # run when on default branch
- when: never # otherwise, do not run
Deploy:
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: on_success
- when: never
注意事项:要捕获CI_OPEN_MERGE_REQUESTS
规则,合并请求必须在管道启动之前存在,或者必须在创建 MR 后触发。这显然也排除了使用合并请求管道功能。
【讨论】:
谢谢。它真的很有帮助。现在我使用only:
的组合 - 用于导入的作业,rules:
与我自己的作业的变量。以上是关于当另一个作业包含“仅”时,在管道中显示 GitLab 作业的主要内容,如果未能解决你的问题,请参考以下文章
如何让 Gitlab CI 管道始终运行一些作业,而其他作业仅在合并请求上运行?