仅限特定分支上的GitLab CI管道

Pro*_*gni 20 git continuous-integration pipeline gitlab gitlab-ci

我正在尝试实施GitLab CI Pipelines来构建和部署Angular应用程序.在我们的项目中,我们有两个一般分支:( master仅限生产)和develop.为了开发,我们feature/some-featuredevelop分支创建分支.当开发完成后,我们创建合并请求feature/some-featuredevelop.当合并请求被批准并合并到develop分支时,我想运行管道以构建应用程序并在某些环境中部署构建.

我在.gitlab-ci.yml中使用以下设置:

image: node:7.5-configured

stages:
    - build
    - deploy

build_job:
    stage: build
    only:
        - develop
    script:
        - /bin/bash <some script here>

...
Run Code Online (Sandbox Code Playgroud)

问题是每次我进入任何feature/some-feature分支时都会执行Pipeline .我的设置有什么问题?我怎样才能迫使管道被执行只有当推进行到develop直接分支?

解决方案 这是我的错误 - 我在develop分支和feature/some-feature分支中有两个不同的.gitlab-ci.yml文件.

小智 7

虽然在这个讨论上已经过去了很多时间,但我想提出一个意见,我大部分时间都在使用它。

rules:
    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"'
      when: on_success
      changes:
        - folder/some_folder/**/* 
    - if: '$CI_PIPELINE_SOURCE == "web" && $CI_COMMIT_BRANCH == "development"'
      when: manual
      changes:
        - folder/some_other_folder/**/* 
Run Code Online (Sandbox Code Playgroud)

这个结构解决了我的各种问题,希望对你有帮助!

问候。

  • 如果您解释为什么这是一个更好的选择,可能会对读者有所帮助。我们将不胜感激 (9认同)

Pro*_*gni 6

这是我的错误 - 我在develop分支和feature/some-feature分支中有两个不同的.gitlab-ci.yml文件,这就是为所有分支执行Pipeline的原因.


Kar*_*amy 6

如果需要,您还可以在全局级别定义规则而不是作业

这是一个例子

image: python:3.8

stages:
 - test

workflow:
  rules:
    - if: $CI_COMMIT_BRANCH == "development" || ($CI_PIPELINE_SOURCE == 'merge_request_event' && ( $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "development" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master" ))

unit_test:
  stage: test
  services:
    - postgres:13.4
  before_script:
    - export PYTHONPATH=$PWD
   script:
    - export AWS_DEFAULT_REGION=us-west-2
    - python -c "import sys;print(sys.path)"

Run Code Online (Sandbox Code Playgroud)