Домашнее задание №7
Домашнее задание №7
Сделайте форк проекта counter-backend и доработайте следующий пайплайн:
stages:
- build
- test
- publish
variables:
POETRY_IMAGE: registry.devops-teta.ru/materials/ci/images/poetry:1.4.1-3.11.6-bookworm
KANIKO_IMAGE: registry.devops-teta.ru/materials/ci/images/kaniko:1.9.1
POETRY_CACHE_DIR: .cache/poetry
PIP_CACHE_DIR: .cache/pip
GIT_CLONE_PATH: $CI_BUILDS_DIR/$CI_PROJECT_PATH_SLUG
default:
before_script:
- set -eu
Update Cache:
stage: .pre
needs: []
image: &poetry_image
name: $POETRY_IMAGE
entrypoint: [""]
cache:
- &poetry_packages
key: poetry-packages
paths:
- .cache
unprotect: true
- &poetry_venv
key:
prefix: poetry-venv
files:
- poetry.lock
paths:
- .venv
unprotect: true
script:
- &poetry_install poetry install --no-root --no-interaction
Build Package:
stage: build
needs:
- job: Update Cache
artifacts: false
image:
name: $POETRY_IMAGE
entrypoint: [""]
cache:
- \<\<: *poetry_packages
policy: pull
- \<\<: *poetry_venv
policy: pull
script:
- *poetry_install
- mkdir -p dist
- poetry export --without-hashes --format constraints.txt --output dist/constraints.txt
- poetry run python -m pip wheel --isolated --requirement dist/constraints.txt --wheel-dir dist/vendor
- poetry build --format wheel
artifacts:
paths:
- dist
Publish Package:
stage: publish
needs:
- job: Build Package
artifacts: true
interruptible: false
image:
name: $KANIKO_IMAGE
entrypoint: [""]
script:
- b64_auth=$(printf '%s:%s' "$HARBOR_USER" "$HARBOR_PASSWORD" | base64 | tr -d '\n')
- >-
printf '{"auths": {"%s": {"auth": "%s"}}}' "$HARBOR_HOST" "$b64_auth"
>/kaniko/.docker/config.json
- >-
/kaniko/executor
--cache
--use-new-run
--skip-unused-stages
--context "$CI_PROJECT_DIR"
--dockerfile "$CI_PROJECT_DIR/Dockerfile"
--destination "$HARBOR_IMAGE:$IMAGE_TAG"
--cache-repo "$HARBOR_IMAGE/cache"
Во-первых, напишите на основе этого пайплайна шаблон, который необходимо подключить к counter-backend.
Во-вторых, добавьте задачу Run Tests, запускающую unit-тесты при помощи следующего скрипта:
$ poetry install --no-root --no-interaction
$ poetry run pytest --junitxml python.junit.xml
Задача должна экспортировать отчет в формате junit при любом завершении задачи (успешном или с ошибкой). Также исправьте зависимости задач так, чтобы публикация Docker-образа не происходила при ошибке в тестах.
В-третьих, модифицируйте правила задач так, чтобы:
- в запросах на слияние запускались только задачи, проверяющие корректность кода;
- в тегах запускались только задачи, собирающие Docker-образ;
- в ветке по умолчанию запускались все задачи.
Для проверки предоставьте:
- ссылки на отработанные пайплайны в counter-backend;
- ссылку на точку входа в шаблон для backend;
- diff — изменений в шаблонах при подключении шаблона для counter-backend.