仅在特定分支中触发 gitlab 管道

nan*_*984 3 continuous-integration pipeline gitlab gitlab-ci

到目前为止我所拥有的

我已经为我的项目配置了 gitlab ci/cd 管道。所以我使用了基本模板,它有两个阶段,构建和打包:

构建阶段构建项目并创建一个 jar 文件。打包阶段创建一个镜像并将其存储在容器注册表中。.gitlab-ci.yml 文件已创建。

image: docker:latest
services:
  - docker:dind

stages:
  - build
  - package

build:
  image: gradle:5.6.1-jdk11
  stage: build
  script:
    - gradle clean build -x test
  artifacts:
    paths:
      - build/libs/*.jar

package:
  stage: package
  script:
    - docker build -t registry.gitlab.com/my-project/sample .
    - docker login -u $CI_DOCKER_USERNAME -p $CI_DOCKER_PASSWORD registry.gitlab.com
    - docker push rregistry.gitlab.com/my-project/sample
Run Code Online (Sandbox Code Playgroud)

我的问题

我不想触发所有每个分支的构建。我只想在开发和主分支中触发。

无论如何,我们是否可以在项目级别做到这一点,而不是only在每个阶段添加?

MrB*_*rta 6

限制创建作业的唯一方法是only/except在 .gitlab-ci.yml 文件中使用。

为了不必编写太多文本,您可以使用extends有时也可以使用 yaml 锚点。更多信息请点击这里:

https://docs.gitlab.com/ee/ci/yaml/#extends

和这里:

https://docs.gitlab.com/ee/ci/yaml/#anchors

extends如何使用的示例:

image: docker:latest
services:
  - docker:dind

.only-master-and-develop:
  only:
   - master
   - development

stages:
  - build
  - package

build:
  extends: .only-master-and-develop
  image: gradle:5.6.1-jdk11
  stage: build
  script:
    - gradle clean build -x test
  artifacts:
    paths:
      - build/libs/*.jar

package:
  extends: .only-master-and-develop
  stage: package
  script:
    - docker build -t registry.gitlab.com/my-project/sample .
    - docker login -u $CI_DOCKER_USERNAME -p $CI_DOCKER_PASSWORD registry.gitlab.com
    - docker push rregistry.gitlab.com/my-project/sample
Run Code Online (Sandbox Code Playgroud)

(我没有测试过这个文件,如果有问题请告诉我。)


小智 6

您应该使用 $CI_COMMIT_BRANCH == "<your_branch_name>" 指定目标分支。

rules:
    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"'
      something regarding the project..

    - if: '$CI_PIPELINE_SOURCE == "web" && $CI_COMMIT_BRANCH == "development"'
      something regarding the project..
Run Code Online (Sandbox Code Playgroud)

我希望上面的例子可以帮助任何人!

这里还有这些类型问题的文档。