如何在Azure发布阶段为Nx单体仓库配置环境变量值?
在Nx单体仓库发布阶段设置环境变量的方案
要在发布阶段而非构建阶段注入环境变量,核心思路是让构建产物保持通用,在发布时动态替换或注入变量,以下是几种可行的落地方法:
方法一:发布脚本动态替换占位符
这是最直接的方案,适合传统服务器部署:
- 步骤1:构建时使用占位符
把代码中原本的process.env.NX_API_URL替换为不会被Nx构建工具处理的占位符,比如__NX_API_URL__。 - 步骤2:创建环境配置文件
在项目根目录新建env-configs文件夹,按环境创建配置文件:env-configs/qa.env:NX_API_URL=api-url-qa.comenv-configs/test.env:NX_API_URL=api-url-test.com
- 步骤3:编写发布脚本
以Shell脚本为例,编写publish-to-qa.sh:
同理编写#!/bin/bash # 加载QA环境变量 source env-configs/qa.env # 替换构建产物中的占位符(替换路径根据你的实际构建产物位置调整) sed -i "s/__NX_API_URL__/$NX_API_URL/g" dist/apps/your-app/index.html # 执行发布命令(比如rsync上传到服务器、调用云平台部署接口) your-deploy-commandpublish-to-test.sh对应Test环境。 - 步骤4:添加npm脚本
在package.json中添加快捷命令:
发布时直接运行{ "scripts": { "publish:qa": "./publish-to-qa.sh", "publish:test": "./publish-to-test.sh" } }npm run publish:qa即可。
方法二:容器化部署时的运行时注入
如果用Docker/K8s这类容器化部署,推荐这种方式:
- 步骤1:构建通用镜像
构建Nx应用时不固化环境变量,保持产物通用性。 - 步骤2:编写启动脚本
新建start.sh脚本,在容器启动时生成动态配置文件:#!/bin/bash # 将环境变量写入前端可访问的配置文件 echo "window.NX_ENV = { API_URL: '$NX_API_URL' };" > /usr/share/nginx/html/env-config.js # 启动服务(以Nginx为例,根据你的服务类型调整) nginx -g 'daemon off;' - 步骤3:在前端引入配置
在index.html中添加脚本引入:<script src="/env-config.js"></script> - 步骤4:代码中读取变量
前端代码通过window.NX_ENV.API_URL获取环境变量。 - 步骤5:发布时传入变量
部署容器时传入对应环境的变量,比如Docker命令:docker run -e NX_API_URL=api-url-qa.com your-nx-app-image
方法三:CI/CD平台直接注入变量
如果用GitHub Actions、GitLab CI这类工具,可以直接利用平台的环境变量能力:
- 步骤1:在CI/CD平台配置环境变量
分别在QA、Test环境的变量设置中添加NX_API_URL的对应值(建议用保密变量存储敏感信息)。 - 步骤2:CI/CD流程中替换占位符
以GitHub Actions为例,在发布步骤中添加替换逻辑:
这样每次触发QA环境的发布流程时,CI/CD平台会自动注入对应环境的变量。jobs: publish-qa: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 20 - name: Build Nx app run: nx build your-app - name: Replace API URL run: sed -i "s/__NX_API_URL__/${{ secrets.NX_API_URL_QA }}/g" dist/apps/your-app/index.html - name: Deploy to QA environment run: your-deploy-command
内容的提问来源于stack exchange,提问作者codythedev
相关产品推荐
相关产品推荐

