gitlab仅针对特定分支触发管道

时间:2019-10-28 13:58:33

标签: continuous-integration gitlab gitlab-ci pipeline

我已经为我的项目配置了gitlab ci / cd管道。因此,我使用了具有两个阶段的基础模板:构建和打包。 Build阶段构建项目并创建jar文件,package阶段创建映像并将其存储在容器注册表中。并已创建.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

当我们要添加新功能时,我们显然会创建新分支,并且由于该文件也存在于新分支中,因此会触发生成。但是我不想触发所有分支的构建。我只想触发开发和掌握。无论如何,我们可以在项目级别做到这一点,而不是在每个阶段都添加only

2 个答案:

答案 0 :(得分:1)

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

不必写太多文本,可以使用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

(我尚未测试过该文件,请告诉我它是否有问题。)

答案 1 :(得分:1)

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

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..

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

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