35
votes

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.

3

3 Answers

16
votes

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.

6
votes

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.

2
votes

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