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