0

我有一个 Heroku 应用程序准备好并且可以运行,它连接到我的 github 存储库,并且我的ProcfileNode.js 准确地说是 NestJS)服务器项目上有一个。目前,每次我推送我的 repo 项目时,heroku 都会使用以下命令部署服务器:

web npm run start:prod

作为 CI/CD 过程的一部分,我的目标是创建 2 个部署的服务器:

  1. 当推送到development分支时 - 在这种情况下运行开发服务器版本
  2. 当推送到master分支时,在这种情况下部署生产服务器(2 个不同的服务器)。

我的问题是实现这一目标的方法是什么?

我想我应该创建另一个 Heroku 应用程序并将其连接到我的 repo 的开发分支,但是我如何确保我在这里运行开发版本?Procfile我应该在这些分支上持有 2 个不同的 s 吗?我真的必须创建另一个 Heroku 应用程序还是有更好的方法?

4

1 回答 1

0

理想情况下,您永远不应该将development您的应用程序版本部署到公共环境,因为除其他外,它可能会暴露您的安全漏洞,这些漏洞以后可能会在您的生产服务器上被利用。

您可能正在谈论的是我们所说的staging环境。它是一个配置完全相同的环境production,但我们在将代码部署到之前测试代码production

Heroku而言- 是的,您实际上需要两个 Heroku 应用程序 - 一个production用于staging.

请注意,staging环境应该与NODE_ENV=production.

就 CI/CD 而言,我已将我的 CD 配置为根据分支推送到不同的 Heroku 应用程序进行部署。development转到我们的staging应用程序并master转到我们的production应用程序。(尽管为简单起见,我将分支重命名为stagingproduction:D)。

我无法为您提供 GitHub Actions 的现成脚本,因为我使用的是 GitLab,尽管 CI/CD 在那里非常相似,但存在细微差别,但 GutHub Actionsif的工作条件应该类似于:

if: github.ref == 'refs/heads/master'
 - dpl --provider=heroku --strategy=api --app=$HEROKU_PROD_APP_NAME --api-key=$HEROKU_PROD_API_KEY

此外,您不应该需要两个Procfiles,因为如果您想确保您的代码在生产环境中的行为相同,则环境应该配置相同。

于 2020-08-11T12:53:41.907 回答