Reputation: 1017
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
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
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
Reputation: 542
You should add the .gitlab-ci.yml
file in the branch you need to run the CI on.
Upvotes: -12
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