Я только что опубликовал пост в блоге со всеми этими плюсами иллюстраций и полным и общедоступным примером приложения. Однако суть этого такова:
Шаг 1. Настройка приложений Heroku
Создание двух приложений Heroku для постановки и производства. Я собираюсь назвать мои toptal-pipeline
и toptal-pipeline-staging
, первое - производственное приложение.
Запишите ваш токен авторизации, используя heroku auth:token
.
Шаг 2: Настройка GitLab CI
Вставьте это в .gitlab-ci.yml
в корне вашего проекта, заменив значения для APPNAME_PRODUCTION
и APPNAME_STAGING
именами приложений Heroku соответственно:
image: ruby:2.4
before_script:
- >
: "${HEROKU_EMAIL:?Please set HEROKU_EMAIL in your CI/CD config vars}"
- >
: "${HEROKU_AUTH_TOKEN:?Please set HEROKU_AUTH_TOKEN in your CI/CD config vars}"
- curl https://cli-assets.heroku.com/install-standalone.sh | sh
- |
cat >~/.netrc <<EOF
machine api.heroku.com
login $HEROKU_EMAIL
password $HEROKU_AUTH_TOKEN
machine git.heroku.com
login $HEROKU_EMAIL
password $HEROKU_AUTH_TOKEN
EOF
- chmod 600 ~/.netrc
- git config --global user.email "ci@example.com"
- git config --global user.name "CI/CD"
stages:
- test
- deploy
variables:
APPNAME_PRODUCTION: toptal-pipeline
APPNAME_STAGING: toptal-pipeline-staging
test:
stage: test
variables:
POSTGRES_USER: test
POSTGRES_PASSSWORD: test-password
POSTGRES_DB: test
DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSSWORD}@postgres/${POSTGRES_DB}
RAILS_ENV: test
services:
- postgres:alpine
before_script:
- curl -sL https://deb.nodesource.com/setup_8.x | bash
- apt-get update -qq && apt-get install -yqq nodejs libpq-dev
- curl -o- -L https://yarnpkg.com/install.sh | bash
- source ~/.bashrc
- yarn
- gem install bundler --no-ri --no-rdoc
- bundle install -j $(nproc) --path vendor
- bundle exec rake db:setup RAILS_ENV=test
script:
- bundle exec rake spec
- bundle exec rubocop
deploy_to_staging:
stage: deploy
environment:
name: staging
url: https://$APPNAME_STAGING.herokuapp.com/
script:
- git remote add heroku https://git.heroku.com/$APPNAME_STAGING.git
- git push heroku master
- heroku pg:backups:capture --app $APPNAME_PRODUCTION
- heroku pg:backups:restore `heroku pg:backups:url --app $APPNAME_PRODUCTION` --app $APPNAME_STAGING --confirm $APPNAME_STAGING
- heroku run rails db:migrate --app $APPNAME_STAGING
only:
- master
- tags
deploy_to_production:
stage: deploy
environment:
name: production
url: https://$APPNAME_PRODUCTION.herokuapp.com/
script:
- git remote add heroku https://git.heroku.com/$APPNAME_PRODUCTION.git
- git push heroku master
- heroku pg:backups:capture --app $APPNAME_PRODUCTION
- heroku run rails db:migrate --app $APPNAME_PRODUCTION
only:
- /^v(?'MAJOR'(?:0|(?:[1-9]\d*)))\.(?'MINOR'(?:0|(?:[1-9]\d*)))\.(?'PATCH'(?:0|(?:[1-9]\d*)))(?:-(?'prerelease'[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?(?:\+(?'build'[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*))?$/
# semver pattern above is adapted from https://github.com/semver/semver.org/issues/59#issuecomment-57884619
Обязательно адаптируйте блоки deploy_to_staging
*1026* и deploy_to_production
разделов для соответствия шагам развертывания, если вы не используете Ruby on Rails.
Также сделайте то же самое для вашего test
блока. Этот текущий работает Rspec и Rubocop.
Шаг 3. Конфигурирование настроек GitLab
- Добавьте две секретные переменные в настройки GitLab CI
HEROKU_EMAIL
: адрес электронной почты для входа в Heroku
HEROKU_AUTH_TOKEN
: ваш токен из шага 1.
- Добавьте
v*
теги к защищенным тегам в настройках GitLab Repository.
Шаг 4. Создание сценариев NPM для упрощения семантического контроля версий
Добавьте standard-version
к вашему devDependencies
с помощью yarn add --dev standard-version
и добавьте следующие сценарии к package.json
:
"scripts": {
"release": "standard-version",
"major": "yarn release --release-as major",
"minor": "yarn release --release-as minor",
"patch": "yarn release --release-as patch"
}
Кроме того, добавьте номер версии в файл package.json
:
"version": "0.0.7"
Шаг 5: Введите свой код
Каким будет ваш новый рабочий процесс кодирования:
- Введите код
- Git push для запуска тестов
- Git push для
master
для развертывания в
- Пометьте выпуск, используя семантическое управление версиями и нажмите для развертывания в производство
Также, чтобы пометить новый номер семантической версии, запустите:
yarn patch
для увеличения номера патча. Например. x.x.1
=> x.x.2
yarn minor
для увеличения младшего номера. Например. x.1.x
=> x.2.x
yarn major
для увеличения старшего номера. Например. 1.x.x
=> 2.x.x
Выйди и сделай что-нибудь потрясающее.