这个管道没有阶段/工作。 (针对分支管道)

8

以下是.gitlab-ci.yml的示例:

---
stages:
  - .pre
  - test
  - build

compile-build-pipeline:
  stage: .pre
  script: [...]
  artifacts:
    paths: [".artifacts/build.yaml"]

lint-source:
  stage: .pre
  script: [...]

run-tests:
  stage: test
  rules:
    - if: '$CI_COMMIT_BRANCH == "$CI_DEFAULT_BRANCH"'
  trigger:
    strategy: depend
    include:
      artifact: .artifacts/tests.yaml
      job: "compile-test-pipeline"
  needs: ["compile-test-pipeline"]

build-things:
  stage: test
  rules:
    - if: '$CI_COMMIT_BRANCH == "$CI_DEFAULT_BRANCH"'
  trigger:
    strategy: depend
    include:
      artifact: .artifacts/build.yaml
      job: "compile-build-pipeline"
  needs: ["compile-build-pipeline"]
...

这个配置应该始终运行(任何分支,任何来源)。测试和构建作业应仅在默认分支上运行。

然而,合并请求不执行作业,在除默认分支之外的分支手动触发管道会给出错误No Jobs/Stages for this Pipeline

我尝试在.pre阶段的作业中明确设置一个始终运行的规则,使用rules: [{if: '$CI_PIPELINE_SOURCE'}],但没有成功。

我哪里做错了?

2个回答

6
根据文档

必须至少有一个作业在.pre或.post以外的阶段中。

在上述配置中,除了
.pre
阶段中的作业外,没有其他作业在合并请求事件中添加,因此根本没有添加任何作业。

1
合并请求事件中只有.pre中的作业被添加,那么testbuild呢?为什么它们不被视为独立于.pre的单独阶段? - Arthur Attout
我的流水线在合并请求上执行 - 因此 CI_COMMIT_BRANCH 不是默认分支(与相关作业的规则要求不同);因此它们未被添加到流水线中。这导致除了 .pre.post 阶段中的作业之外,没有其他作业被添加。 - deepbrook

2

我很高兴你在问题中添加了这些信息:然而,在合并请求中不运行作业

CI_COMMIT_BRANCH 在基于 MR 的事件中不可用。以下是官方文档的一个片段:

The commit branch name. Available in branch pipelines, including pipelines for the default branch.
**Not available in merge request pipelines or tag pipelines.**

当使用MR进行工作并希望检查分支名称时,可以使用以下内容:

CI_MERGE_REQUEST_SOURCE_BRANCH_NAMECI_MERGE_REQUEST_TARGET_BRANCH_NAME

环境变量列表在此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接