I have come to find out, my pipeline goes on loop. here is my pipeline
here is what happening,
Problem Summary
- Pipeline Stages and Goals: • Merge Request Submission: • When a Merge Request (MR) is submitted, the pipeline should run tests to
ensure the changes are correct. • Merge to Master: • After merging
an MR to the master branch: • The bump_version job should run to
increment the version in app/meta.py. • The build-prod job should run
to build and push Docker images. • The pipeline should stop after the
build-prod job.- Current Behavior: • When an MR is submitted, the tests run successfully. • When the MR is merged to master, the bump_version job
runs, followed by the build-prod job. • The build-prod job runs
again, leading to an infinite loop, causing the entire pipeline to
re-trigger.- Suspected Cause: • The bump_version job creates a commit on the master branch, which triggers the build-prod job. • The creation of a
Git tag by the bump_version job also triggers the entire pipeline
again.Desired Behavior
• Ensure that the pipeline does not re-trigger itself after the
bump_version and build-prod jobs. • The pipeline should stop after
the build-prod job when the version bump commit and tag are created.Requirements:
- Merge Request (MR) Submission: • Run tests.
- Merge to Master: • Run bump_version job. • Run build-prod job. • Stop the pipeline after build-prod without retriggering.
<code>stages:
- build-ci-image
- lint
- test
- bump_version
- build
- deploy
variables:
build_ci_image:
stage: build-ci-image
image:
name: gcr.io/kaniko-project/executor:v1.14.0-debug
entrypoint: [""]
script:
- /kaniko/executor ...."
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- docker/Dockerfile
- requirements.dev.txt
- requirements.txt
.python_job:
image: ....
interruptible: true
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH == "dev"'
- if: '$CI_COMMIT_TAG'
lint:
stage: lint
extends: .python_job
script:
- make lint
test:
stage: test
script:
- make coverage
bump_version:
stage: bump_version
image: bump2version
script:
- git remote set-url ...
- bump2version $VERSION_PART --current-version $(grep -oP '__VERSION__ = "K[0-9.]+(?=")' app/meta.py) app/meta.py
- git push origin HEAD:master --tags
artifacts:
paths:
- app/meta.py
rules:
- if: $CI_COMMIT_MESSAGE =~ /^Bump version:/
when: never
- if: $CI_COMMIT_BRANCH == "master"
build:
stage: build
image:
name: gcr.io/kaniko-project/executor:v1.14.0-debug
entrypoint: [""]
before_script:
- ....
script:
- /kaniko/executor ..."
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
- if: '$CI_COMMIT_TAG'
build-prod:
stage: build
image:
name: gcr.io/kaniko-project/executor:v1.14.0-debug
entrypoint: [""]
before_script:
- ....
script:
- |
new_version=$(grep -o '__VERSION__ = "[0-9.]+"' app/meta.py | sed 's/__VERSION__ = "//;s/"//')
/kaniko/executor ...."
dependencies:
- bump_version
artifacts:
paths:
- app/meta.py
rules:
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"'
- if: '$CI_COMMIT_TAG'
deploy-staging:
stage: deploy
environment:
name: staging
url:
image:
name: bitnami/kubectl:latest
entrypoint: ['']
script:
- kubectl ....
rules:
- if: $CI_COMMIT_BRANCH == "dev"
- if: $CI_COMMIT_TAG
</code>
<code>stages:
- build-ci-image
- lint
- test
- bump_version
- build
- deploy
variables:
build_ci_image:
stage: build-ci-image
image:
name: gcr.io/kaniko-project/executor:v1.14.0-debug
entrypoint: [""]
script:
- /kaniko/executor ...."
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- docker/Dockerfile
- requirements.dev.txt
- requirements.txt
.python_job:
image: ....
interruptible: true
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH == "dev"'
- if: '$CI_COMMIT_TAG'
lint:
stage: lint
extends: .python_job
script:
- make lint
test:
stage: test
script:
- make coverage
bump_version:
stage: bump_version
image: bump2version
script:
- git remote set-url ...
- bump2version $VERSION_PART --current-version $(grep -oP '__VERSION__ = "K[0-9.]+(?=")' app/meta.py) app/meta.py
- git push origin HEAD:master --tags
artifacts:
paths:
- app/meta.py
rules:
- if: $CI_COMMIT_MESSAGE =~ /^Bump version:/
when: never
- if: $CI_COMMIT_BRANCH == "master"
build:
stage: build
image:
name: gcr.io/kaniko-project/executor:v1.14.0-debug
entrypoint: [""]
before_script:
- ....
script:
- /kaniko/executor ..."
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
- if: '$CI_COMMIT_TAG'
build-prod:
stage: build
image:
name: gcr.io/kaniko-project/executor:v1.14.0-debug
entrypoint: [""]
before_script:
- ....
script:
- |
new_version=$(grep -o '__VERSION__ = "[0-9.]+"' app/meta.py | sed 's/__VERSION__ = "//;s/"//')
/kaniko/executor ...."
dependencies:
- bump_version
artifacts:
paths:
- app/meta.py
rules:
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"'
- if: '$CI_COMMIT_TAG'
deploy-staging:
stage: deploy
environment:
name: staging
url:
image:
name: bitnami/kubectl:latest
entrypoint: ['']
script:
- kubectl ....
rules:
- if: $CI_COMMIT_BRANCH == "dev"
- if: $CI_COMMIT_TAG
</code>
stages:
- build-ci-image
- lint
- test
- bump_version
- build
- deploy
variables:
build_ci_image:
stage: build-ci-image
image:
name: gcr.io/kaniko-project/executor:v1.14.0-debug
entrypoint: [""]
script:
- /kaniko/executor ...."
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes:
- docker/Dockerfile
- requirements.dev.txt
- requirements.txt
.python_job:
image: ....
interruptible: true
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH == "dev"'
- if: '$CI_COMMIT_TAG'
lint:
stage: lint
extends: .python_job
script:
- make lint
test:
stage: test
script:
- make coverage
bump_version:
stage: bump_version
image: bump2version
script:
- git remote set-url ...
- bump2version $VERSION_PART --current-version $(grep -oP '__VERSION__ = "K[0-9.]+(?=")' app/meta.py) app/meta.py
- git push origin HEAD:master --tags
artifacts:
paths:
- app/meta.py
rules:
- if: $CI_COMMIT_MESSAGE =~ /^Bump version:/
when: never
- if: $CI_COMMIT_BRANCH == "master"
build:
stage: build
image:
name: gcr.io/kaniko-project/executor:v1.14.0-debug
entrypoint: [""]
before_script:
- ....
script:
- /kaniko/executor ..."
rules:
- if: '$CI_COMMIT_BRANCH == "dev"'
- if: '$CI_COMMIT_TAG'
build-prod:
stage: build
image:
name: gcr.io/kaniko-project/executor:v1.14.0-debug
entrypoint: [""]
before_script:
- ....
script:
- |
new_version=$(grep -o '__VERSION__ = "[0-9.]+"' app/meta.py | sed 's/__VERSION__ = "//;s/"//')
/kaniko/executor ...."
dependencies:
- bump_version
artifacts:
paths:
- app/meta.py
rules:
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"'
- if: '$CI_COMMIT_TAG'
deploy-staging:
stage: deploy
environment:
name: staging
url:
image:
name: bitnami/kubectl:latest
entrypoint: ['']
script:
- kubectl ....
rules:
- if: $CI_COMMIT_BRANCH == "dev"
- if: $CI_COMMIT_TAG