Непрерывное развертывание NodeJS с использованием GitLab

У меня есть API, разработанный в NodeJS, и я успешно настроил непрерывную интеграцию через .gitlab-ci.yml файл. Следующим этапом является настройка непрерывного развертывания в Heroku, если все тесты пройдут в основной ветке.

Существует множество учебных пособий, посвященных развертыванию приложений Ruby и Python, но ничего о NodeJS. В настоящее время мой .gitlab-ci.yml файл выглядит так:

image: node:latest

job1:
  script: "ls -l"

test:
  script: "npm install;npm test"

production:
  type: deploy
  script:
  - npm install
  - npm start
  - gem install dpl
  - dpl --provider=heroku --app=my-first-nodejs --api-key=XXXXXXXXXX
  only:
  - master

В учебниках по Ruby и Python используются dpl инструмент для развертывания, но как я могу запустить сценарий NodeJS на сервере после развертывания?

После добавления рабочего раздела и его отправки тесты запускаются и проходят, но этап развертывания застревает в ожидании. Консоль пуста. Кто-нибудь установил успешный CD-скрипт для NodeJS?

3 ответа

Вы можете использовать гораздо более простой сценарий YAML, где вы можете определить этапы для CI (для запуска тестирования перед производственным развертыванием), затем вы можете использовать другой образ на этапе развертывания Heroku. Таким образом, для приложения узла вы определяете изображение по умолчанию как узел: последний. Затем для производственного развертывания с использованием dpl вы можете использовать образ ruby.

image: node:latest

stages:
  - job1
  - test
  - production

job1:
  stage: job1
  script: "ls -l"

test:
  stage: test
  script: 
    - npm install
    - npm test
  artifacts:
    paths:
      - dist/

production:
  type: deploy
  stage: production
  image: ruby:latest
  script:
    - apt-get update -qy
    - apt-get install -y ruby-dev
    - gem install dpl
    - dpl --provider=heroku --app=my-first-nodejs --api-key=XXXXXXXXXX
  only:
    - master

Ну, это не будет самый длинный ответ, но это может помочь вам.

Вот содержание, если оно когда-либо исчезнет:

  image: node:argon

  before_script:
    - apt-get -qq update
    - apt-get -qq install -y python2.7 python2.7-dev build-essential make gcc g++ libicu-dev
    - npm -g install npm --silent
    - "echo -e \"export default {CLIENT_ID: '$CLIENT_ID'}\" > app/scripts/settings.js"
    - npm set progress=false
    - npm install --silent

  stages:
    - test
    - build
    - clean_up

  run_tests:
    stage: test
    script:
      - npm test

  build_and_deploy_prod:
    stage: build
    script:
      - npm run build
      - mkdir  dist/build
      - tar czfC dist/build/latest.tar.gz dist/$CI_BUILD_REF_NAME/ .
      - tar czfC dist/build/$CI_BUILD_REF.tar.gz dist/$CI_BUILD_REF_NAME/ .
      - apt-get install -yqq ruby ruby-dev
      - gem install dpl
      - dpl --skip_cleanup --provider=s3 --region=eu-west-1 --access-key-id=$AWS_ACCESS_KEY --secret-access-key=$AWS_SECRET_KEY --bucket=$AWS_BUCKET --local-dir=dist/build/ --upload-dir=$CI_BUILD_REF_NAME
    artifacts:
      paths:
        - dist/$CI_BUILD_REF_NAME/
    only:
      - master
      - develop

  clean_up_job:
    stage: clean_up
    script:
      - rm -rf node_modules
      - rm -rf ~/.node-gyp
    when: on_failure

Хорошо объясненная статья для непрерывного развертывания NodeJS с использованием GitLab:

ССЫЛКА НА САЙТ

Другие вопросы по тегам