我有一个Heroku应用程序已经准备就绪并正在工作,它连接到我的github repo,我在Node.js(准确地说是NestJS)服务器项目上有一个procfile
。 现在发生的情况是,每次我推动我的回购项目,heroku部署服务器时:
web npm run start:prod
作为CI/CD过程的一部分,我的目标是创建两个已部署的服务器:
development
分支推送时-在这种情况下,运行开发服务器版本master
分支进行推送时,并在这种情况下部署生产服务器(2个不同的服务器)。我的问题是,实现这一点的方法是什么?
我想我应该创建另一个Heroku应用程序,并将其连接到我的repo的开发分支,但是我如何确保在这里我运行的是一个开发版本呢? 我是否应该在这些分支上保存两个不同的procfile
? 我真的必须创建另一个Heroku应用程序吗?还是有更好的方法来解决这个问题?
理想情况下,您永远不应该将应用程序的development
版本部署到公共环境中,因为它可能会暴露安全性中的缺陷,这些缺陷以后会在生产服务器上被利用。
您可能正在谈论的是我们所说的staging
环境。 它是一个与production
配置完全相同的环境,但是我们在将代码部署到production
之前对其进行测试。
就Heroku而言--是的,您实际上需要两个Heroku应用程序--一个用于生产
,一个用于分段
。
请注意,staging
环境应该使用node_env=production
运行。
在CI/CD方面,我已经配置了我的CD,以便根据对哪个分支进行推送来部署到不同的Heroku应用程序。 development
转到我们的staging
应用程序,master
转到我们的production
应用程序。 (不过为了简单起见,我将分支重命名为staging
和production
:d)。
我不能为GitHub操作提供一个现成的脚本,因为我使用的是GitLab,尽管CI/CD在这方面非常相似,但也有细微的区别,但是GitHub操作应该有if
条件,其工作方式类似于:
if: github.ref == 'refs/heads/master'
- dpl --provider=heroku --strategy=api --app=$HEROKU_PROD_APP_NAME --api-key=$HEROKU_PROD_API_KEY
此外,您不应该需要两个procfile
,因为如果您希望确保代码在生产中的行为相同,则应该对环境进行相同的配置。