Непрерывное развертывание 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 script на сервере после развертывания?

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

Ответ 1

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

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

  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

Ответ 2

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

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