如何直接从我的 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 > Variables
到底在哪里?我在 Gitlab 中找不到它
@CynthiaSanchez 如下 Zsolt 所述,您将在您的 heroku 帐户中找到 api 密钥
在Settings > CI/CD > Environment variables
以上是关于如何直接从我的 Gitlab 存储库部署到 Heroku的主要内容,如果未能解决你的问题,请参考以下文章
我应该将我的 Nuxt 应用程序直接部署到 Google App Engine 还是应该在我的代码存在于存储库中的地方使用 Gitlab CI/CD?
如何将 gitlab 存储库自动部署到 Google Cloud Platform?
如何在gitlab-ci.yml中将文件从存储库复制到用于作业的docker容器中
设置 GitLab CI/CD 以将多个存储库部署到 DigitalOcean Droplet 上的 Docker 容器