Я только что попал в (замечательный) мир CI / CD и у меня есть работающие конвейеры.Хотя они не оптимальны.
Приложение представляет собой веб-сайт с поддержкой Docker:
- источник должен быть скомпилирован с помощью
webpack
и в конечном итоге dist
- в этом
dist
каталогекопируется в Docker-контейнер - , который затем удаленно создается и развертывается
Моя текущая настройка довольно наивна (я добавил несколько комментариев, чтобы показать, почему я считаю, что необходимы различные элементы /полезно):
# I start with a small image
image: alpine
# before the job I need to have npm and docker
# the problem: I need one in one job, and the second one in the other
# I do not need both on both jobs but do not see how to split them
before_script:
- apk add --update npm
- apk add docker
- npm install
- npm install webpack -g
stages:
- create_dist
- build_container
- stop_container
- deploy_container
# the dist directory is preserved for the other job which will make use of it
create_dist:
stage: create_dist
script: npm run build
artifacts:
paths:
- dist
# the following three jobs are remote and need to be daisy chained
build_container:
stage: build_container
script: docker -H tcp://eu13:51515 build -t widgets-sentinels .
stop_container:
stage: stop_container
script: docker -H tcp://eu13:51515 stop widgets-sentinels
allow_failure: true
deploy_container:
stage: deploy_container
script: docker -H tcp://eu13:51515 run --rm -p 8880:8888 --name widgets-sentinels -d widgets-sentinels
Эта установка работает, биты npm
и docker
установлены в обоих заданиях.Это не нужно и замедляет развертывание. Есть ли способ заявить, что такие-то и такие-то пакеты нужно добавлять для определенных заданий (а не глобально для всех)?
Чтобы было понятно: это не шоустопор (и в действительности это вряд ли будет проблемой), но я боюсь, что мой подход к такой автоматизации работы неверен.