ProximaCygni
ProximaCygni

Reputation: 1017

GitLab CI Pipeline on specific branch only

I'm trying to implement GitLab CI Pipelines to build and deploy an Angular app. In our project we have two general branches: master (for production only) and develop. For development we create feature/some-feature branches from develop branch. When development finished, we create merge request from feature/some-feature to develop. When merge request approved and merged into develop branch I want to run a Pipeline in order to build application and deploy the build on some environment.

I use the following setup in .gitlab-ci.yml:

image: node:7.5-configured

stages:
    - build
    - deploy

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

...

The problem is that Pipeline executed every time I push into any feature/some-feature branch. What's wrong with my setup? How can I force the Pipeline to be executed only when push performed into develop branch directly?

Solution It was my mistake - I had two different .gitlab-ci.yml files in develop branch and feature/some-feature branch.

Upvotes: 64

Views: 135197

Answers (4)

Karthikeyan Balusamy
Karthikeyan Balusamy

Reputation: 373

You can also define the rule at the global level instead of job if you want

Here is the example for that

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)"

Upvotes: 9

Onur G&#252;rdoğan
Onur G&#252;rdoğan

Reputation: 486

Although it has been passed much time on this discussion I would like to suggest an opinion, which I am using most of the time.

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/**/* 

This structure solved my various problems, I hope it helps you to!

Regards.

Upvotes: 32

el3ankaboot
el3ankaboot

Reputation: 542

You should add the .gitlab-ci.yml file in the branch you need to run the CI on.

Upvotes: -12

ProximaCygni
ProximaCygni

Reputation: 1017

It was my mistake - I had two different .gitlab-ci.yml files in develop branch and feature/some-feature branch and that's why the Pipeline was executed for all branches.

Upvotes: 23

Related Questions