Test and deploy a Ruby application with GitLab CI/CD

原文:https://docs.gitlab.com/ee/ci/examples/test-and-deploy-ruby-application-to-heroku.html

Test and deploy a Ruby application with GitLab CI/CD

该示例将指导您如何在 Ruby on Rails 应用程序中运行测试,以及如何将其自动部署为 Heroku 应用程序.

您还可以查看或派生完整的示例源,并查看其过去CI 作业的日志.

Configure the project

这是此项目的.gitlab-ci.yml文件的外观:

  1. test:
  2. stage: test
  3. script:
  4. - apt-get update -qy
  5. - apt-get install -y nodejs
  6. - bundle install --path /cache
  7. - bundle exec rake db:create RAILS_ENV=test
  8. - bundle exec rake test
  9. staging:
  10. stage: deploy
  11. script:
  12. - gem install dpl
  13. - dpl --provider=heroku --app=gitlab-ci-ruby-test-staging --api-key=$HEROKU_STAGING_API_KEY
  14. only:
  15. - master
  16. production:
  17. stage: deploy
  18. script:
  19. - gem install dpl
  20. - dpl --provider=heroku --app=gitlab-ci-ruby-test-prod --api-key=$HEROKU_PRODUCTION_API_KEY
  21. only:
  22. - tags

这个项目有三个工作:

  • test -用于测试 Rails 应用程序.
  • staging -用于每次推送到master分支时自动部署登台环境.
  • production -用于为每个创建的标签自动部署生产环境.

Store API keys

您需要在项目的设置> CI / CD>环境变量中创建两个变量

  • HEROKU_STAGING_API_KEY -Heroku API 密钥,用于部署登台应用程序.
  • HEROKU_PRODUCTION_API_KEY -Heroku API 密钥,用于部署生产应用程序.

Find your Heroku API key in Manage Account.

Create Heroku application

对于每个环境,您都需要创建一个新的 Heroku 应用程序. 您可以通过Heroku 仪表板执行此操作.

Create Runner

首先安装Docker Engine .

要构建此项目,您还需要安装GitLab Runner . 您可以使用gitlab.com上的公共跑步者或注册自己的跑步者. 首先创建模板配置文件以通过复杂的配置:

  1. cat > /tmp/test-config.template.toml << EOF [[runners]]
  2. [runners.docker]
  3. [[runners.docker.services]]
  4. name = "postgres:latest" EOF

最后,注册运行器,并传递新创建的模板配置文件:

  1. gitlab-runner register \
  2. --non-interactive \
  3. --url "https://gitlab.com/" \
  4. --registration-token "PROJECT_REGISTRATION_TOKEN" \
  5. --description "ruby:2.6" \
  6. --executor "docker" \
  7. --template-config /tmp/test-config.template.toml \
  8. --docker-image ruby:2.6

使用上面的命令,您将创建一个使用ruby:2.6图像并使用PostgreSQL数据库的 Runner.

要访问 PostgreSQL 数据库,请以没有密码的用户postgres身份连接到host: postgres .