Azure devops Angular(8)应用程序构建一次(使用生产配置)并部署到多个环境
我遇到的情况是,我试图使用生产配置构建angular应用程序,并将其部署到多个环境中,例如,ng build--configuration=production 这里的工作流程是当我使用上面的命令(ng build--configuration=production)构建时,environment.ts文件将替换为environment.prod.ts 我在environment.prod.ts中的配置如下:Azure devops Angular(8)应用程序构建一次(使用生产配置)并部署到多个环境,azure-devops,angular8,azure-pipelines-release-pipeline,build-pipeline,Azure Devops,Angular8,Azure Pipelines Release Pipeline,Build Pipeline,我遇到的情况是,我试图使用生产配置构建angular应用程序,并将其部署到多个环境中,例如,ng build--configuration=production 这里的工作流程是当我使用上面的命令(ng build--configuration=production)构建时,environment.ts文件将替换为environment.prod.ts 我在environment.prod.ts中的配置如下: 导出常量环境={ 制作:对,, 环境:"生产",, _webApiHost:'pro
导出常量环境={
制作:对,,
环境:"生产",,
_webApiHost:'prodsomename.company.com/api/',
};代码>我不会假装这是一个答案,但它足够长的思想不适合在评论区。也许你会发现它很有用。(完全公开:我不是在使用Azure,而是在使用GitLab。因此,如果您发现这种使用方法,则需要进行一些翻译。)
不管怎样,我刚才也问过同样的问题。经过一番挖掘
利用这一指导,我做了以下工作:
首先,我做一个基本的docker构建。在这个版本中,我在一个文件夹中有各种环境文件“随时待命”。实际驱动应用程序的配置文件位于根目录下
然后,我进行另一个docker构建,这个构建的唯一目的是获取第一个构建并为其提供所需的配置。(我这样做是因为第一次构建很慢,但我希望在不重建的情况下推进生产。)
接下来,我要构建我想要的环境
例如,对于暂存:在我的GitLab构建CI/CD管道yaml中,我有这样一行
docker build -t xxxxx --build-arg SERVE_CONFIGURATION=staging -f [A-Docker-File] .
docker文件对于所有环境都是相同的,但基于传入的参数,此docker构建会拉取不同的文件并将其猛击到驾驶员座椅上。由于角度部署中没有秘密,因此文件夹结构中是否有额外的(未使用的)配置文件并不重要(尽管如果有动机,可以轻松删除它们)
不管怎样,在第二个docker建筑里,我有
...
FROM registry.gitlab.com/xxxxxxxxxxxx/compiled as default-config
FROM registry.gitlab.com/xxxxxxxxxxxx/compiled as final-config
COPY --from=default-config /usr/share/nginx/html/environments/environment.$SERVE_CONFIGURATION.js /usr/share/nginx/html/environment.js
因此,这个docker映像只不过是在先前映像的基础上构建的,但是在适当的位置有所需的环境文件
无论如何,我可能遗漏了一些细节,但我不确定这是否会对您有所帮助,请到此为止。在运行时替换应用程序配置。您需要创建包含动态配置的config.json文件(例如,\u webApiHost
)。您可以检入示例代码以获取config.json
在you管道中,您可以添加扩展任务来替换config.json内容,然后再部署到不同的环境(例如测试、生产)
这样,您只需构建angular应用程序一次,并且只需在部署到不同环境之前相应地替换config.json内容
您可以签出的可用扩展名,或
. 您可以查看示例以使用这些任务。Hi@Ananth Asamani您是否尝试了上述扩展,进展如何?Hi Levi Lu,很抱歉耽搁了,我被卷入了其他问题,因此必须解决这些问题。我最后在我的service.ts文件中以下面的方式完成了它,if(window.location.hostname=='account.company.com'){this.\u webApiHost='api.company.com/api/';}else if(window.location.hostname=='test account.company.com'){this.\u webApiHost='testapi.com/api/';}else{this.\u webApiHost='localhost:62603这可能不是一个理想的或正确的方法,但我最终得到了这个(暂时的)。但现在我正试图实现你上面所说的。我会让你知道的。