【问题标题】:How to set a variable dependent on its release stage in DevOps?如何在 DevOps 中根据其发布阶段设置变量?
【发布时间】:2019-03-12 21:41:51
【问题描述】:
有没有一种方法可以根据 Azure DevOps 发布管道中的当前阶段轻松更改 React 应用程序中的变量?例如,假设我设置了三个阶段(开发/QA/生产),并且我希望为每个环境换出应用程序的身份验证配置中的客户端 ID。如何“检测”当前正在使用哪个环境以选择适当的 ID?我宁愿只需要运行一个构建任务并为每个管道阶段使用一个工件,而不是在每个阶段重新构建(如果可能的话)。
【问题讨论】:
标签:
reactjs
typescript
azure
azure-devops
devops
【解决方案1】:
如果您不想为每个阶段单独捆绑,则需要一个服务器来提供您希望提供给客户端的值。
这可以通过在服务器端呈现 HTML 来完成。这是一个简短的示例模板:
<script>
window.valueToExpose = <%= JSON.stringify(value) %>;
</script>
表达式<%= JSON.stringify(value) %> 将由您服务器的模板引擎执行。 (表达式可能会根据您的模板引擎而有所不同)
服务器生成的 HTML 看起来像 value = "Hello World":
<script>
window.valueToExpose = "Hello World";
</script>
在您的 React 应用程序中,您可以访问 window.valueToExpose。
【解决方案2】:
首先,我希望您的应用程序根据环境部署到不同的主机/CNAME。
如果您不想在部署/构建时提供某种环境标识符,该标识符已嵌入到您的代码中,那么检查 URL 可能是一种方法。这样做的缺点是您现在将 URL 模式硬编码到脚本中并将它们映射到环境。您决定权衡取舍。
其次,我同意 Lucas 的回答,即您需要一个外部资源来获取可以在运行时从中提取的配置。
如果您生活在 M$ 生态系统中,我不确定有什么可用的,但从其他堆栈中,我可以推荐 spring cloud config 或 configrd.io,它们可以外部化、服务和提供额外的配置管理功能。