如何直接从我的 Gitlab 存储库部署到 Heroku

Posted

技术标签:

【中文标题】如何直接从我的 Gitlab 存储库部署到 Heroku【英文标题】:How to deploy to Heroku directly from my Gitlab repository 【发布时间】:2016-08-31 02:50:14 【问题描述】:

在我的团队中,我们使用 Gitlab 作为远程存储库,因此我们正在寻找一种将我们的应用程序自动部署到 Heroku 的解决方案。我们从 Github 找到了用于将应用程序自动部署到 Heroku 的 Codeship。

有什么建议吗?技巧?

【问题讨论】:

doc.gitlab.com/ce/ci/deployment/README.html 我已经读过了。在文档中,我们将设置一个 GitLab Runner。它喜欢 Travis CI。 @karmiphuc 404 ... @CharlieSchliesser docs.gitlab.com/ee/ci 【参考方案1】:

完成 dnit13 的回答:

确保您的环境变量不受保护。

转到Settings > CI/CD > Environment variables 并取消选中Protected Variable

更多关于this thread的信息。

【讨论】:

这不是一个好主意。一些变量应该保密。更好的答案是:“确保只在受保护的分支上使用受保护的变量。”【参考方案2】:

如果您不准备使用 Ruby/dpl,您可以按如下方式部署到 Heroku:

查找您的 Heroku API 密钥(帐户设置 -> Heroku Web 控制台上的 API 密钥)并将其作为 Gitlab 秘密变量提供,例如HEROKU_API_KEY(请注意,这些值与 heroku auth:token 返回的值不同......)

然后在您的 .gitlab-ci.yml 配置文件中的相关作业中添加两个脚本行:

git remote add heroku https://heroku:$HEROKU_API_KEY@git.heroku.com/<name of your heroku app>.git

git push -f heroku HEAD:master

详细解释可以在http://blog.thecodewhisperer.com/permalink/deploying-jekyll-to-heroku-using-gitlab-ci看到

【讨论】:

确保在推送到 heroku 时添加 -q 标志,否则您将在输出末尾显示您的 $HEROKU_API_KEY @Zsolt 当我这样做时,推送是空的(heroku 构建因此失败),我在这里缺少什么?我是否需要对 init heroku:master 进行虚拟提交? 在 .gitlab-ci.yml 中运行 git remote add heroku ... 有时会导致 fatal: remote heroku already exists 将其更改为 git remote add heroku ... || true 以强制返回代码为 0【参考方案3】:

Here 是我找到的解决方案,以防链接断开:

配置项目

这是这个项目的 .gitlab-ci.yml 文件的样子:

test:
  script:
  # this configures Django application to use attached postgres database that is run on `postgres` host
  - export DATABASE_URL=postgres://postgres:@postgres:5432/python-test-app
  - apt-get update -qy
  - apt-get install -y python-dev python-pip
  - pip install -r requirements.txt
  - python manage.py test

staging:
  type: deploy
  script:
  - apt-get update -qy
  - apt-get install -y ruby-dev
  - gem install dpl
  - dpl --provider=heroku --app=gitlab-ci-python-test-staging --api-key=$HEROKU_STAGING_API_KEY
  only:
  - master

production:
  type: deploy
  script:
  - apt-get update -qy
  - apt-get install -y ruby-dev
  - gem install dpl
  - dpl --provider=heroku --app=gitlab-ci-python-test-prod --api-key=$HEROKU_PRODUCTION_API_KEY
  only:
  - tags

这个项目有三个工作:

test - 用于测试 Django 应用程序,

staging - 用于在每次推送到 master 分支时自动部署 staging 环境

生产 - 用于为每个创建的标签自动部署生产环境

存储 API 密钥

您需要在 Project > Variables 中创建两个变量:

HEROKU_STAGING_API_KEY - Heroku API key used to deploy staging app,
HEROKU_PRODUCTION_API_KEY - Heroku API key used to deploy production app.

【讨论】:

嗨 dnit13,那条路径 Project &gt; Variables 到底在哪里?我在 Gitlab 中找不到它 @CynthiaSanchez 如下 Zsolt 所述,您将在您的 heroku 帐户中找到 api 密钥 Settings &gt; CI/CD &gt; Environment variables

以上是关于如何直接从我的 Gitlab 存储库部署到 Heroku的主要内容,如果未能解决你的问题,请参考以下文章

我应该将我的 Nuxt 应用程序直接部署到 Google App Engine 还是应该在我的代码存在于存储库中的地方使用 Gitlab CI/CD?

如何将 gitlab 存储库自动部署到 Google Cloud Platform?

在 Jenkins 中配置 GitLab 存储库

如何在gitlab-ci.yml中将文件从存储库复制到用于作业的docker容器中

设置 GitLab CI/CD 以将多个存储库部署到 DigitalOcean Droplet 上的 Docker 容器

如何使用 GitLab 克隆 git 存储库