В настоящий момент официально поддерживается и полностью протестирована работа 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 системами необходимо определить следующие переменные:
WERF_GIT_TAG_STRATEGY_LIMIT
;WERF_GIT_TAG_STRATEGY_EXPIRY_DAYS
;WERF_LOG_COLOR_MODE
;WERF_LOG_PROJECT_DIR
;WERF_ENABLE_PROCESS_EXTERMINATOR
;WERF_LOG_TERMINAL_WIDTH
.
Пример скрипта настройки 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-задания.