GitLab CI: Часть 9, этап deploy в .gitlab-ci.yml (продолжение)
Jun 19, 2017 08:31 · 751 words · 4 minute read
В данной статье цикла о continuous integration и особенностях ее реализации в GitLab продолжаем максимально подробно разбирать этап деплоя изменений на ревью с помощью docker-образов.
Давайте разберемся с содержимым файла docker-compose-staging.yml
и посмотрим, что у нас получилось!
Как и обещал в предыдущей статье, привожу содержимое конфигурационного файла docker-compose-staging.yml
, который используется для создания и запуска docker-контейнеров на ревью (сервер с именем staging.lc):
version: '2'
services:
### Applications Code Container #############################
applications:
container_name: application
image: registry.gitlab.lc:5000/develop/ed:develop.sources.last
### Applications1 Code Container ############################
applications1:
container_name: application1
image: registry.gitlab.lc:5000/develop/ed:docker.sources.last
### PHP-FPM Container #######################################
php-fpm:
container_name: php-fpm
image: registry.gitlab.lc:5000/develop/ed:php-fpm-ed-sq
volumes_from:
- applications
- applications1
expose:
- "9000"
### Nginx Server Container ##################################
nginx:
container_name: nginx
image: registry.gitlab.lc:5000/develop/ed:nginx-ed-sq
volumes_from:
- applications
- applications1
depends_on:
- "websocket"
ports:
- "${HTTP_PORT}:80"
- "443:443"
links:
- php-fpm
### Redis Container #########################################
redis:
container_name: redis
image: registry.gitlab.lc:5000/develop/ed:redis-ed-sq
volumes:
- redis:/data
ports:
- "6379:6379"
links:
- php-fpm
### Memcached Container #####################################
memcached:
container_name: memcached
image: registry.gitlab.lc:5000/develop/ed:memcached-ed-sq
volumes:
- memcached:/var/lib/memcached
ports:
- "11211:11211"
links:
- php-fpm
### Websocket Container ######################################
websocket:
container_name: websocket
restart: always
image: registry.gitlab.lc:5000/develop/ed:websocket-ed-sq
depends_on:
- "redis"
environment:
- WS_PORT=${WS_PORT}
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}
- REDIS_PASS=${REDIS_PASS}
volumes_from:
- applications
- applications1
ports:
- "${WS_PORT}:${WS_PORT}"
### SDCV Container ##########################################
sdcv:
container_name: sdcv
image: registry.gitlab.lc:5000/develop/ed:sdcv-ed-sq
ports:
- "9095:9095"
### Volumes Setup ###########################################
volumes:
memcached:
driver: "local"
redis:
driver: "local"
На мой взгляд, содержимое данного файла не требует дополнительных пояснений, однако если у вас возникнут вопросы — буду рад ответить на них в комментариях.
На вкладке pipelines подробности выполнения этапа деплоя выглядят так:
Running with gitlab-ci-multi-runner 1.10.0 (4a71a97)
Using Docker executor with image registry.gitlab.lc:5000/develop/ed:tmaier-dc-ssh ...
Starting service registry.gitlab.lc/develop/ed:my-docker-dind ...
Using locally found image version due to if-not-present pull policy
Waiting for services to be up and running...
Using locally found image version due to if-not-present pull policy
Running on runner-9e68759f-project-8-concurrent-0 via c7662d5025ba...
Fetching changes...
Removing .env
Removing bin/
Removing build/all.html
Removing build/complexity.html
Removing build/coupling.html
Removing build/css/
Removing build/images/
Removing build/index.html
Removing build/js/
Removing build/loc.html
Removing build/oop.html
Removing build/panel.html
Removing build/relations.html
Removing build/violations.html
Removing public/default_img/user/en/
Removing public/default_img/user/ru/
Removing public/dsd/css/style.css
Removing public/dsd/css/style.css.map
Removing public/dsd/js/bundles/
Removing public/dsd/js/templates.hbs.js
Removing public/dsd/js/templates.html.js
Removing public/dsd/js/utils/routes.js
Removing public/dsd/mix/tmp-pages-bundle/
Removing public/dsl/css/
Removing public/dsl/js/bundles/
Removing public/dsm/css/ltr-style.css
Removing public/dsm/css/ltr-style.css.map
Removing public/dsm/css/rtl-style.css
Removing public/dsm/css/rtl-style.css.map
Removing public/dsm/js/main-build.js
Removing public/dsm/js/main-build.js.map
Removing public/vendor/
Removing vendor/
HEAD is now at 635e14c14a Merge branch 'develop' into 'develop'
Checking out 635e14c1 as develop...
Skipping Git submodules setup
Downloading artifacts for compile (2609)...
Downloading artifacts from coordinator... ok id=2609 responseStatus=200 OK token=ERugScWJ
Downloading artifacts for testing (2610)...
Downloading artifacts from coordinator... ok id=2610 responseStatus=200 OK token=uv5PAJbp
$ eval $(ssh-agent -s)
Agent pid 14
$ ssh-add <(echo "$SSH_PRIVATE_KEY")
Identity added: /dev/fd/63 (/dev/fd/63)
$ scp $ENV_FILE $DC_FILE provisioner@staging.lc:~/docker
Warning: Permanently added 'staging.lc,192.168.0.140' (ECDSA) to the list of known hosts.
$ ssh provisioner@staging.lc 'bash -s' < ./docker/deploy.sh
Warning: Permanently added 'staging.lc,192.168.0.140' (ECDSA) to the list of known hosts.
Pulling applications (registry.gitlab.lc:5000/develop/ed:develop.sources.last)...
develop.sources.last: Pulling from develop/ed
Digest: sha256:fdea81e5367ba5c37f1a19c4bdb0900b0702ab38c8b4d675a5305d03eacd2bfe
Status: Downloaded newer image for registry.gitlab.lc:5000/develop/ed:develop.sources.last
Pulling applications1 (registry.gitlab.lc:5000/develop/ed:docker.sources.last)...
docker.sources.last: Pulling from develop/ed
Digest: sha256:a9ad02b5c1c92f40eb0f908954cbece15052b76b2d2f8a43964a26d88705f127
Status: Image is up to date for registry.gitlab.lc:5000/develop/ed:docker.sources.last
Pulling php-fpm (registry.gitlab.lc:5000/develop/ed:php-fpm-ed-sq)...
php-fpm-ed-sq: Pulling from develop/ed
Digest: sha256:b335cb7f1e29f120d38d2baa3b3f0c3681f24124858b79bffd6df7e1fdb4ccb5
Status: Image is up to date for registry.gitlab.lc:5000/develop/ed:php-fpm-ed-sq
Pulling redis (registry.gitlab.lc:5000/develop/ed:redis-ed-sq)...
redis-ed-sq: Pulling from develop/ed
Digest: sha256:07292eb9cc8e873b81ca3cfc4b1685b42fa5136ad185857a11e6a9168346deb2
Status: Image is up to date for registry.gitlab.lc:5000/develop/ed:redis-ed-sq
Pulling websocket (registry.gitlab.lc:5000/develop/ed:websocket-ed-sq)...
websocket-ed-sq: Pulling from develop/ed
Digest: sha256:fd9d07def9039da373e5fe4a1bf00b98f123f64c3f76eaa3aa0021f80456d3c5
Status: Image is up to date for registry.gitlab.lc:5000/develop/ed:websocket-ed-sq
Pulling nginx (registry.gitlab.lc:5000/develop/ed:nginx-ed-sq)...
nginx-ed-sq: Pulling from develop/ed
Digest: sha256:89fe4ff99bf343205418cd136dbb192e48a1905445d9a4b7751d11694141c9d3
Status: Image is up to date for registry.gitlab.lc:5000/develop/ed:nginx-ed-sq
Pulling memcached (registry.gitlab.lc:5000/develop/ed:memcached-ed-sq)...
memcached-ed-sq: Pulling from develop/ed
Digest: sha256:d6d57917ce5a6c01f570eb9b7b3b0205ef0c0100489cfbecbab2f28583a4b3f9
Status: Image is up to date for registry.gitlab.lc:5000/develop/ed:memcached-ed-sq
Stopping nginx ...
Stopping websocket ...
Stopping redis ...
Stopping memcached ...
Stopping php-fpm ...
Stopping memcached ... done
Stopping nginx ... done
Stopping websocket ... done
Stopping redis ... done
Stopping php-fpm ... done
Removing nginx ...
Removing websocket ...
Removing redis ...
Removing memcached ...
Removing php-fpm ...
Removing application ...
Removing application1 ...
Removing websocket ... done
Removing application1 ... done
Removing redis ... done
Removing php-fpm ... done
Removing application ... done
Removing memcached ... done
Removing nginx ... done
Removing network docker_default
Creating network "docker_default" with the default driver
Creating application1
Creating application
Creating php-fpm
Creating memcached
Creating redis
Creating websocket
Creating nginx
Build succeeded
Занимает все это действие чуть менее полутора минут (01:26).
Для быстрого доступа к сайту после деплоя можно воспользоваться вебинтерфейсом GitLab - достаточно перейти на вкладку “Pipelines -> Environments” и кликнуть мышкой по ссылке “Open”.
В завершающей статье цикла о настройке GitLab CI мы рассмотрим этап удаления контейнеров и данных, использовавшихся при сборке проекта, а также увидим полную версию конфигурационного файла .gitlab-ci.yml
.