gpt4 book ai didi

asp.net-core - 如何在 devops Azure 管道中设置 process.env.var

转载 作者:行者123 更新时间:2023-12-03 17:32:46 25 4
gpt4 key购买 nike

我的任务是将 aspnet 核心 React 应用程序部署到 2 个不同的环境:开发环境和生产环境。每个环境都应单独配置。

我将 Azure DevOps 用于 CI/CD

AspNet 项目包含以下用于构建应用程序的命令

    <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build" />

我使用 adal 进行授权,这就是为什么我必须传递一些对于 Dev 和 Prod 不同的 secret 变量
const adalConfig = {
tenant: process.env.REACT_APP_TENANT,
clientId: process.env.REACT_APP_CLIENT_ID,
redirectUri: process.env.REACT_APP_REDIRECT_URI,

在 Azure devops 中,我使用以下命令设置参数:
echo ##vso[task.setvariable variable=REACT_APP_TENANT;isOutput=true]c00000-00ce-000-0f00-0000000004000

在 azure devops 中,我有下一个用于 aspnet 核心构建应用程序的标准命令
  • .Net 核心安装程序
  • 资源
  • 运行命令(设置环境变量)
  • 构建
  • 发布

  • 问题:
  • 未设置环境变量。
  • 我什至不知道如何为生产而不是为开发构建另一个人工制品。

  • 也许您已经有将核心 react 应用程序部署到 2 个不同环境的任务?或者,如果我需要更改部署策略,请提供建议。

    我发现的唯一解决方案是使用 .env 文件,但我必须将此文件提交给 git - 从 master 部署它。而且我仍然不知道如何为 dev 和 prod 使用不同的文件。

    最佳答案

    TLDR;

  • 您有 isOutput=true在您的 task.setvariable命令。这只会在流水线引擎中设置一个变量,以供其他步骤使用,但实际上并未映射到 env 变量。删除 isOutput你会看到 REACT_APP_TENANT环境变量。
  • 但仅在以下步骤中 - 无法在同一管道步骤中立即访问 env 变量。
  • 您可以 define variables在管道级别,如果您预先知道它们的值 - 这应该可以简化事情。 task.setvariable对动态变量更有用。
  • 如果您需要针对不同环境的不同进程(或一组不同的变量),我建议使用 multistage YAML pipelinesclassic Releases .它们都允许设置不同的阶段,每个阶段都有自己的变量集。

  • 很长的故事
    我们需要区分两个独立的过程:
  • 在 CI 代理上执行的部署管道
  • 可以通过多种不同方式托管的 Web 应用程序 - Azure Web 应用程序、自托管、docker/k8s 等。

  • echo ##vso[task.setvariable ...]设置管道中的变量 (1.)。
    读取变量的位置(如 tenant: process.env.REACT_APP_TENANT )并不是那么明显。如果是nodejs服务端代码,会在2中执行。如果是某个构建脚本的一部分,则会在1中读取。
    React 很棘手,因为:
  • react behaves differently in development and release mode .在 Release模式下,在构建阶段,整个客户端代码被编译成静态 JS 文件。所以你在管道中设置的环境变量应该可以工作。
  • 它不能简单地访问任何 env 变量(以防止您在客户端浏览器上意外暴露您的服务器 env 变量)。如果使用 create-react-app (这是 ASP.NET React App 默认所做的),你必须 prefix env variables with REACT_APP_ 使用它们。如果直接使用 Webpack,则需要一些插件。
  • 关于asp.net-core - 如何在 devops Azure 管道中设置 process.env.var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58591548/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com