В настоящий момент официально поддерживается и полностью протестирована работа werf со следующими CI-системами:

Если вы используете одну из них — обращайтесь к соответствующим руководствам. В дальнейшем этот список будет пополняться и другими CI-решениями. Если вы заинтересованы в поддержке конкретной системы — пожалуйста, дайте нам знать в этом issue.

В общем случае, для интеграции werf с CI/CD-системой требуется написать собственный скрипт в соответствии с инструкциями из документации «Что такое переменные ci-env?». Получившийся скрипт необходимо использовать вместо вызова команды werf ci-env. Так же, как и команда, скрипт должен выполняться перед использованием команд werf в начале задания CI/CD.

В этом руководстве мы пошагово пройдём по основным моментам, которые необходимо учесть при создании такого скрипта интеграции с CI.

Настройка CI-окружения

Интеграция с Docker registry

Согласно процедуре интеграции с Docker registry необходимо определить следующие переменные:

Создадим временную папку для конфигураций docker на базе существующей и определим Docker registry для публикации собранных образов:

TMP_DOCKER_CONFIG=$(mktemp -d)
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
[[ -d "$DOCKER_CONFIG" ]] && cp -a $DOCKER_CONFIG/. $TMP_DOCKER_CONFIG
export DOCKER_CONFIG=$TMP_DOCKER_CONFIG
export WERF_IMAGES_REPO=registry.company.com/project

Интеграция с Git

Согласно описанным шагам по интеграции с git необходимо определить следующие переменные:

Интеграция с CI/CD pipeline’ами

Согласно описанным шагам по интеграции с CI/CD pipeline необходимо определить следующие переменные:

Интеграция с CI/CD процессами

Согласно описанным шагам по интеграции с CI/CD процессами необходимо определить следующие переменные:

Общая интеграция с CI/CD системами

Согласно описанным шагам по общей интеграции с CI/CD системами необходимо определить следующие переменные:

Пример скрипта настройки CI-окружения

В корневой папке проекта создадим bash-скрипт werf-ci-env.sh со следующим содержанием:

TMP_DOCKER_CONFIG=$(mktemp -d)
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
[[ -d "$DOCKER_CONFIG" ]] && cp -a $DOCKER_CONFIG/. $TMP_DOCKER_CONFIG
export DOCKER_CONFIG=$TMP_DOCKER_CONFIG
export WERF_IMAGES_REPO=registry.company.com/project

docker login -u USER -p PASSWORD $WERF_IMAGES_REPO

export WERF_TAG_GIT_TAG=GIT_TAG
export WERF_TAG_GIT_BRANCH=GIT_BRANCH
export WERF_ADD_ANNOTATION_PROJECT_GIT="project.werf.io/git=https://cicd.domain.com/project/x"
export WERF_ADD_ANNOTATION_CI_COMMIT="ci.werf.io/commit=b9a1ddd366aa6a20a0fd43fb6612f349d33465ff"
export WERF_ENV=ENV
export WERF_GIT_TAG_STRATEGY_LIMIT=10
export WERF_GIT_TAG_STRATEGY_EXPIRY_DAYS=30
export WERF_LOG_COLOR_MODE=on
export WERF_LOG_PROJECT_DIR=1
export WERF_ENABLE_PROCESS_EXTERMINATOR=1
export WERF_LOG_TERMINAL_WIDTH=95

Исправьте скрипт для работы в своей CI/CD-системе: измените присваиваемые значения переменных WERF_* согласно конкретному случаю. Будет полезно ознакомиться и ориентироваться на статью по интеграции с GitLab CI, чтобы понимать, какие значения для переменных стоит использовать.

Также создадим скрипт werf-ci-env-cleanup.sh со следующим содержимым:

rm -rf $TMP_DOCKER_CONFIG

Скрипт werf-ci-env.sh должен вызываться в начале каждого CI-задания, до вызова любой команды werf. Скрипт werf-ci-env-cleanup.sh должен вызываться в конце каждого CI-задания.