Pipeline
Типы pipeline
Merge request pipelines
Описание
Запускается в момент создания merge requests. Обычно используется для проверяющего merge requests чтобы определить тесты кода прошли успешно или нет
Условия запуска pipeline:
- в CI/CD указан rules CI_PIPELINE_SOURCE == "merge_request_event"
- у вас есть права Developer, Maintainer or Owner роль
.gitlab-ci.yml
stages:
- test
testyrovanie:
stage: test
script:
- echo "test"
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
tags:
- shell
Пример с child pipeline
.gitlab-ci.yml
stages:
- test
- build
- trigger
django tests:
image: python:3.9-alpine
stage: test
script:
- pip install -r requirements.txt
- mkdir db
- python manage.py test
tags:
- docker_test
build docker:
stage: build
image: docker:stable
services:
- docker:dind
variables:
DOCKER_HOST: tcp://docker:2375/
DOCKER_TLS_CERTDIR: ""
script:
- docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
- docker build -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG} .
- if [[ "${CI_COMMIT_BRANCH}" == "${CI_DEFAULT_BRANCH}" ]] ; then
docker tag ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG} ${CI_REGISTRY_IMAGE}:latest;
docker push ${CI_REGISTRY_IMAGE}:latest; fi
- if [[ -z "${CI_COMMIT_TAG}" ]] ; then
docker push ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG};
else
docker tag ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG} ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG};
docker push ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}; fi
needs:
- ["django tests"]
tags:
- docker_test
start cd pipeline:
stage: trigger
trigger:
include:
- local: .gitlab/deploy.yml
strategy: depend
.gitlab/deploy.md
stages:
- deploy
deploy to prod:
stage: deploy
script:
- docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
- docker pull ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}
- docker rm -f ${CI_PROJECT_NAME} || true
- docker run --name ${CI_PROJECT_NAME} -d -p 80:8000 -v db:/app/db ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}
tags:
- shell
результат
Rules
Ручной запуск deply на PROD
Пример файла .gitlab-ci.yml
deploy to prod:
stage: deploy
script:
- docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
- docker pull ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}
- docker rm -f ${CI_PROJECT_NAME} || true
- docker run --name ${CI_PROJECT_NAME} -d -p 80:8000 -v db:/app/db ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}
rules:
- when: manual
tags:
- shell
Правила для запуска по определенной ветке
Используется когда вам нужно запускать pipeline при коммите в определенную ветку
Пример 1:
stages:
- primer
rules_on_one_job:
stage: primer
script:
- |
if [ "$CI_COMMIT_BRANCH" = "$CI_DEFAULT_BRANCH" ]; then
echo "Pipeline run for head branch"
elif [ "$CI_COMMIT_BRANCH" = "devel" ]; then
echo "Pipeline run for branch: devel"
else
echo "Pipeline run for other branch: $CI_COMMIT_BRANCH"
fi
tags:
- shell
Пример 2:
stages:
- primer
- primer_sec
rules_branch:
stage: primer
script:
- echo "run job commit in main branch"
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
tags:
- shell
rules_2_branch:
stage: primer_sec
script:
- echo "run job commit in '$CI_COMMIT_BRANCH' branch"
rules:
- if: '$CI_COMMIT_BRANCH == "devel"'
tags:
- shell
stages:
- primer
- primer_sec
rules_branch:
stage: primer
script:
- echo "run job commit in main branch"
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
tags:
- shell
rules_2_branch:
stage: primer_sec
script:
- echo "run job commit in '$CI_COMMIT_BRANCH' branch"
rules:
- if: '$CI_COMMIT_BRANCH == "devel"'
tags:
- shell
Запуск по тегу
Запускается только когда есть Tag
Пример файла .gitlab-ci.yml
stages:
- debug
rules_on_one_job:
stage: debug
script:
- echo "create tag"
rules:
- if: '$CI_COMMIT_TAG'
tags:
- shell