Как использовать Gitlab CI/CD для развертывания метеорного проекта?

Как заявили на своем веб-сайте, Gitlab может использоваться для автоматического развертывания проектов после того, как какой-то код вставляется в репозиторий, но я не могу понять, как это сделать. Есть много рубиновых учебников, но нет для метеорного или node.

В принципе, мне просто нужно перестроить контейнер Docker на моем сервере, после того как код будет введен в мою главную ветку. Кто-нибудь знает, как его достичь? Я совершенно новичок в материалах .gitlab-ci.yml и очень ценю помощь.

Ответы

Ответ 1

Краткая информация: я запускаю приложение Meteor 1.3.2, размещенное на Digital Ocean (Ubuntu 14.04) с 4 месяцев. Я использую Gitlab v. 8.3.4, работающий на той же капельке Digital Ocean, что и приложение Meteor. Это капелька 2 ГБ /2 (20 долларов США в месяц). Использование встроенного Gitlab CI для CI/CD. Эта настройка работает до сих пор. (В настоящее время мы не используем Docker, однако это не имеет значения.)

Наша стратегия CI/CD:

  • Мы проверяем филиал Master на нашем локальном ноутбуке. Филиал содержит весь проект Meteor, как показано ниже:

введите описание изображения здесь

Мы используем инструмент git CLI в Windows для подключения к нашему серверу Gitlab. (для pull, push и т.д. аналогичные регулярные действия git)

  1. Откройте извлеченный проект в редакторе Atom. Мы также интегрировали Atom с Gitlab. Это помогает в быстром состоянии git status/pull/push и т.д. Внутри самого редактора Atom. Выполняет обычную работу Метеор, а именно. исправлять ошибки и т.д.

  2. После тестирования на локальном ноутбуке мы делаем git push и commit на master. Это инициирует автоматическую сборку с использованием Gitlab CI, и результаты (включая журналы построения) можно увидеть в самом Gitlab, как показано ниже:

введите описание изображения здесь

Ниже изображены все предыдущие журналы построения:

введите описание изображения здесь

Следуйте инструкциям ниже:

  • Установите метеор на капельке DO.

  • Установите Gitlab на DO (при необходимости используйте по одному щелчку мыши) или ручную установку. Убедитесь, что вы устанавливаете Gitlab v. 8.3.4 или более новую версию. Я сделал DO одним щелчком мыши на моей капле. Запустите сервер gitlab и войдите в gitlab из браузера. Откройте проект и перейдите к настройкам проекта → Направляющие из меню слева

введите описание изображения здесь

  1. SSH на ваш сервер DO и настройте новую службу upstart на капли как root:

    vi /etc/init/meteor-service.conf
    

Пример файла:

#upstart service file at /etc/init/meteor-service.conf
description "Meteor.js (NodeJS) application for eaxmple.com:3000"
author "[email protected]"

# When to start the service
start on runlevel [2345]

# When to stop the service
stop on shutdown

# Automatically restart process if crashed
respawn
respawn limit 10 5

script
    export PORT=3000
    # this allows Meteor to figure out correct IP address of visitors
    export HTTP_FORWARDED_COUNT=1
    export MONGO_URL=mongodb://xxxxxx:[email protected]:59672/meteor-db
    export ROOT_URL=http://<droplet_ip>:3000
    exec /home/gitlab-runner/.meteor/packages/meteor-tool/1.1.10/mt-os.linux.x86_64/dev_bundle/bin/node /home/gitlab-runner/erecaho-build/server-alpha-running/bundle/main.js >> /home/gitlab-runner/erecaho-build/server-alpha-running/meteor.log
end script
  1. Установите gitlab-ci-multi-runner отсюда: https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/install/linux-repository.md в соответствии с инструкциями Cheatsheet:

    curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash
    sudo apt-get install gitlab-ci-multi-runner
    sudo gitlab-ci-multi-runner register
    

    Введите данные с шага 2

  2. Теперь новый бегун должен быть зеленым или активировать бегун, если требуется

  3. Создайте .gitlab-ci.yml в каталоге проекта метеоров

    Пример файла:

    before_script:
      - echo "======================================"
      - echo "==== START auto full script v0.1 ====="
      - echo "======================================"
    
    types:
      - cleanup
      - build
      - test
      - deploy
    
    job_cleanup:
      type: cleanup
      script:
      - cd /home/gitlab-runner/erecaho-build
      - echo "cleaning up existing bundle folder"
      - echo "cleaning up current server-running folder"
      - rm -fr ./server-alpha-running
      - mkdir ./server-alpha-running
      only:
      - master
      tags:
      - master
    
    job_build:
      type: build
      script:
      - pwd
      - meteor build /home/gitlab-runner/erecaho-build/server-alpha-running --directory --server=http://example.org:3000 --verbose
      only:
      - master
      tags:
      - master
    
    job_test:
      type: test
      script:
      - echo "testing ----"
      - cd /home/gitlab-runner/erecaho-build/server-alpha-running/bundle
      - ls -la main.js
      only:
      - master
      tags:
      - master
    
    job_deploy:
      type: deploy
      script:
      - echo "deploying ----"
      - cd /home/gitlab-runner/erecaho-build/server-alpha-running/bundle/programs/server/ && /home/gitlab-runner/.meteor/packages/meteor-tool/1.1.10/mt-os.linux.x86_64/dev_bundle/bin/npm install
      - cd ../..
      - sudo restart meteor-service
      - sudo status meteor-service
      only:
      - master
      tags:
      - master
    
  4. Проверьте файл выше в gitlab. Это должно вызвать Gitlab CI, и после завершения процесса сборки новое приложение будет доступно @example.net:3000

Примечание. Приложение не будет доступно после регистрации в .gitlab-ci.yml в первый раз, так как перезапуск службы метеоритов приведет к тому, что служба не будет найдена. Ручной запуск sudo start meteor-service один раз на консоли SS SSH. Опубликуйте это, любая новая регистрация на gitlab master вызовет автоматический CI/CD, и новая версия приложения будет доступна на example.com:3000 после успешного завершения сборки.

P.S.: gitlab ci yaml docs можно найти на http://doc.gitlab.com/ee/ci/yaml/README.html для вашей настройки и понять образец файла yaml выше. Для бегуна, предназначенного для докеров, см. https://gitlab.com/gitlab-org/gitlab-ci-multi-runner