GitLab CI: Часть 9, этап deploy в .gitlab-ci.yml (продолжение)

Jun 19, 2017 08:31 · 751 words · 4 minute read gitlab gitlab ci

В данной статье цикла о 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.

tweet Share