# 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](https://docs.gitlab.com/ee/ci/examples/test-and-deploy-ruby-application-to-heroku.html)

*   [Configure the project](#configure-the-project)
*   [Store API keys](#store-api-keys)
*   [Create Heroku application](#create-heroku-application)
*   [Create Runner](#create-runner)

# Test and deploy a Ruby application with GitLab CI/CD[](#test-and-deploy-a-ruby-application-with-gitlab-cicd "Permalink")

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

您还可以查看或派生完整的[示例源，](https://gitlab.com/ayufan/ruby-getting-started)并查看其过去[CI 作业](https://gitlab.com/ayufan/ruby-getting-started/-/jobs?scope=finished)的日志.

## Configure the project[](#configure-the-project "Permalink")

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

```
test:
  stage: test
  script:
  - apt-get update -qy
  - apt-get install -y nodejs
  - bundle install --path /cache
  - bundle exec rake db:create RAILS_ENV=test
  - bundle exec rake test

staging:
  stage: deploy
  script:
  - gem install dpl
  - dpl --provider=heroku --app=gitlab-ci-ruby-test-staging --api-key=$HEROKU_STAGING_API_KEY
  only:
  - master

production:
  stage: deploy
  script:
  - gem install dpl
  - dpl --provider=heroku --app=gitlab-ci-ruby-test-prod --api-key=$HEROKU_PRODUCTION_API_KEY
  only:
  - tags 
```

这个项目有三个工作：

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

## Store API keys[](#store-api-keys "Permalink")

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

*   `HEROKU_STAGING_API_KEY` -Heroku API 密钥，用于部署登台应用程序.
*   `HEROKU_PRODUCTION_API_KEY` -Heroku API 密钥，用于部署生产应用程序.

Find your Heroku API key in [Manage Account](https://dashboard.heroku.com/account).

## Create Heroku application[](#create-heroku-application "Permalink")

对于每个环境，您都需要创建一个新的 Heroku 应用程序. 您可以通过[Heroku 仪表板](https://dashboard.heroku.com/)执行此操作.

## Create Runner[](#create-runner "Permalink")

首先安装[Docker Engine](https://s0docs0docker0com.icopy.site/installation/) .

要构建此项目，您还需要安装[GitLab Runner](https://docs.gitlab.com/runner/) . 您可以使用`gitlab.com`上的公共跑步者或注册自己的跑步者. 首先创建模板配置文件以通过复杂的配置：

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

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

```
gitlab-runner register \
  --non-interactive \
  --url "https://gitlab.com/" \
  --registration-token "PROJECT_REGISTRATION_TOKEN" \
  --description "ruby:2.6" \
  --executor "docker" \
  --template-config /tmp/test-config.template.toml \
  --docker-image ruby:2.6 
```

使用上面的命令，您将创建一个使用[`ruby:2.6`](https://hub.docker.com/_/ruby)图像并使用[PostgreSQL](https://hub.docker.com/_/postgres)数据库的 Runner.

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