我对gitlab管道完全陌生,所以我不确定做这件事的最佳方式是什么。我读过关于子模块和依赖关系的文章,这会触发其他管道,但我很难理解什么对我在这里试图实现的目标有帮助。
我有一个project_b,它是project_a的一个子模块。在project_b的.gitlab-ci.yml中,project_a当前正在被克隆,然后project_b被移到project_a中该子模块通常所在的位置:
...
default:
...
before_script:
- git clone (project_a)
- mv project_a /src
- rm -rf /src/submodules/project_b/*
- mount --bind /src/submodules/project_b
...
这是因为project_b依赖于project_a。
不过,据我所知,这意味着project_b位于project_a的下游。
我不想每次运行project_b管道时都克隆整个project_a代码库。
我已经看到了很多关于触发依赖项目的下游管道的信息,但我能找到的唯一一件事似乎与我的情况有关,就是不久前有人问过这个问题,关于gitlab缺乏触发上游管道的功能:Upstream triggering in Gitlab-CI aka pipeline dependencies
是否添加了此功能?因为我肯定在网上找不到任何信息。否则,对于如何克隆整个project_a代码库有什么建议吗?我可能完全说错了,但我想知道的是,是否有某种方法可以让project_b为project_a触发一个特定的管道,只做我需要它做的事情来测试project_b?
如有任何建议,我们将不胜感激,谢谢!
发布于 2021-07-20 00:49:51
Gitlab CI/CD multi-project pipelines没有上行和下行的固有概念,因此您可以通过在trigger
关键字中引用项目名称来创建触发另一个管道的管道:
# inside project B .gitlab-ci.yml
# this stage will trigger project A pipeline to run
merge_requests:
stage: test
trigger: my/project_a
还可以使用rules
关键字在下游管道中运行特定阶段。
# in project A .gitlab-ci.yml
# this will never run when triggered by project B
merge_requests:
stage: test
script: echo "test some things"
rules:
- if: '$CI_PIPELINE_SOURCE == "trigger"'
when: never
# this stage will always run when triggered by project B
merge_request_downstream:
stage: test
rules:
- if: '$CI_PIPELINE_SOURCE == "trigger"'
script: echo "test some specific project B things"
因此,您可以将特定于项目B的测试放入merge_request_downstream
的脚本中。希望这能回答你的问题。我不太确定这是否比仅仅在你的项目B脚本中克隆项目A更好,但这就是你如何使用多项目管道来完成它。
https://stackoverflow.com/questions/68441840
复制相似问题