向 GitLab CI yaml 添加需要关系但出现错误:作业未添加到管道中

Han*_*tsy 10 gitlab gitlab-ci

我正在尝试在 Gitlab CI yaml 配置文件中的作业之间添加需求。


stages:
  - build
  - test
  - package
  - deploy

maven-build:
  stage: build
  only:
    - merge_requests
    - master
    - branches
  ...
test:
  stage: test
  needs: [ "maven-build" ]
  only:
    - merge_requests
    - master
  ...
docker-build:
  stage: package
  needs: [ "test" ]
  only:
    - master
  ...
deploy-stage:
  stage: deploy
  needs: [ "docker-build" ]
  only:
    - master
  ...
deploy-prod:
  stage: deploy
  needs: [ "docker-build" ]
  only:
    - master
  when: manual
  ...

Run Code Online (Sandbox Code Playgroud)

我已经使用 GitLab CI 在线 lint 工具来检查我的语法,它是正确的

但是当我推送代码时,它总是抱怨:


    'test' job needs 'maven-build' job
    but it was not added to the pipeline

You can also test your .gitlab-ci.yml in CI Lint
Run Code Online (Sandbox Code Playgroud)

GitLab CI 根本没有运行。

更新:我终于做到了。我认为这个needs位置很敏感,needs在 下全部移动stage,它起作用了。我的原始脚本在它们之间包含了一些其他配置。

小智 8

相互依赖的 CI 作业需要具有相同的限制!

在您的情况下,这意味着共享相同的only目标:

stages:
  - build
  - test

maven-build:
  stage: build
  only:
    - merge_requests
    - master
    - branches

test:
  stage: test
  needs: [ "maven-build" ]
  only:
    - merge_requests
    - master
    - branches
Run Code Online (Sandbox Code Playgroud)

根据我的经验,这应该有效^^

  • 我已经成功了。我认为“需求”的位置很敏感,把所有“需求”移到“舞台”下面,就可以了。我的原始脚本包括它们之间的一些其他配置。 (2认同)

Von*_*onC 8

\n

最后我成功了。我觉得需求位置很敏感,把所有需求移到台下,有效

\n
\n

实际上... GitLab 14.2(2021 年 8 月)可能不再是这种情况:

\n
\n

无级管道

\n

needs在管道配置中使用关键字可以忽略阶段顺序并运行作业而无需等待其他作业完成,从而有助于缩短周期时间。

\n

以前,needs只能在不同阶段的作业之间使用。

\n

在此版本中,我们\xe2\x80\x99 删除了此限制,以便您可以定义needs所需的任何作业之间的关系

\n

因此,您现在可以通过needs在每个作业中包含隐式配置执行顺序来创建完整的 CI/CD 管道,而无需使用阶段。
\n这使您可以定义一个不太冗长的管道,创建时间更少并且运行速度更快。

\n

https://about.gitlab.com/images/14_2/need.png -- 无阶段管道

\n

请参阅文档问题

\n
\n