Skip to content

Instantly share code, notes, and snippets.

@Firemoon777
Created June 4, 2024 16:47
Show Gist options
  • Save Firemoon777/0ace22417de47da0715c4c757c6204ac to your computer and use it in GitHub Desktop.
Save Firemoon777/0ace22417de47da0715c4c757c6204ac to your computer and use it in GitHub Desktop.
# Воркфлоу описывает базовые условия, когда пайплайн должен создаваться
workflow:
rules:
# Пайплайн в контексте MR
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
# Если контекст коммита, но есть открытый MR, то НЕ запускаемся
- if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS'
when: never
# Одинокий коммит ИЛИ тэг
- if: '$CI_COMMIT_BRANCH || $CI_COMMIT_TAG'
stages:
- build-ci
- test
- build-app
- deploy
variables:
CI_IMAGE_NAME: "$CI_REGISTRY_IMAGE/ci-base-image:$CI_COMMIT_SHA"
build:
stage: build-ci
image: docker:latest
before_script:
- docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
script:
- docker build --tag "$CI_IMAGE_NAME" -f ./Dockerfile .
- docker push "$CI_IMAGE_NAME"
check-sort:
stage: test
image: "$CI_IMAGE_NAME"
needs:
- build
script:
- isort --check-only .
- sleep 5
check-style:
stage: test
image: "$CI_IMAGE_NAME"
needs:
- build
script:
- black --check .
- sleep 5
smoke-test:
stage: test
image: "$CI_IMAGE_NAME"
needs:
- build
script:
- sleep 5
full-test:
stage: test
image: "$CI_IMAGE_NAME"
needs:
- smoke-test
- check-sort
- check-style
rules:
- if: '$CI_MERGE_REQUEST_LABELS !~ /skip-tests/'
script:
- echo $CI_MERGE_REQUEST_LABELS
- sleep 30
build-deploy:
stage: build-app
image: "$CI_IMAGE_NAME"
needs:
- job: full-test
optional: true
- job: smoke-test
script:
- echo "build done"
- sleep 5
build-doc:
stage: build-app
image: "$CI_IMAGE_NAME"
needs:
- job: full-test
optional: true
- job: smoke-test
script:
- echo "build done"
- sleep 4
.template-deploy:
stage: deploy
image: docker:latest
script:
- echo "Deploy to $ENV"
when: manual
variables:
ENV: ""
needs:
- build-deploy
before_script:
- export DEPLOY_URL=$ENV.example.com
parallel:
matrix:
- JOB_NAME:
- shell
- alembic
- app
deploy-dev:
extends: .template-deploy
variables:
ENV: 'dev'
deploy-stg:
extends: .template-deploy
variables:
ENV: 'stg'
deploy-prod:
extends: .template-deploy
variables:
ENV: 'prod'
rules:
# Деплой в прод только по тегам и из мастер-ветки
- if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
# Шелл и метка 'shell'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $JOB_NAME =~ /shell/ && $CI_MERGE_REQUEST_LABELS =~ /shell/'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment