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