node.js - 无法在 yml 文件中设置节点环境变量
问题描述
使用 Azure 的 DevOps 和azure-pipeline.yml
文件,我试图定义一个process.env
在我的 node.js 代码中使用的变量,该变量在npm run test
被调用时运行。我将 git commit 版本设置Build.SourceVersion
为process.env.BATCH_ID
.
azure-pipelines.yml
看起来像:
trigger:
- master
pool:
vmImage: 'Ubuntu-16.04'
steps:
- task: NodeTool@0
inputs:
versionSpec: '8.x'
displayName: 'Install Node.js'
- script: |
npm install
process.env['BATCH_ID'] = $(Build.SourceVersion)
process.env['myVar'] = 'nick'
npm run start &
npm run test
在我的 Nodejs 代码中,两者BATCH_ID
都myVar
返回未定义。我意识到此时我没有运行节点进程,这是一个问题。npm run test 正在运行一个玩笑,它正在运行一堆我想要访问这些变量的测试。如何设置这些变量?
解决方案
您可以在.yaml
文件开头定义变量:
# Set variables once
variables:
BATCH_ID: $(Build.SourceVersion)
myVar: nick
steps:
- task: NodeTool@0
inputs:
versionSpec: '8.x'
displayName: 'Install Node.js'
- script: |
npm install
npm run start &
npm run test
在脚本阶段设置变量的另一个选项:
- script: |
npm install
echo '##vso[task.setvariable variable=BATCH_ID]$(Build.SourceVersion)'
echo '##vso[task.setvariable variable=myVar]nick'
npm run start &
npm run test
在 Node.js 中,您可以像每个环境变量一样读取变量。
推荐阅读
- html - CSS HTML 根据字体大小制作图片
- java - 确定列表框项目是否在 selenium 中可见
- python - 这些唯一标识符是否在注册表中?如果是这样,我怎样才能检测到它们?
- java - 使用多个类的不兼容返回类型
- java - 过滤一个可选的
- > 在 java8 中
- ios - 在 ObjectiveC 的共享表中添加打开选项
- php - 根据 Woocommerce 结帐中的复选框显示隐藏订单备注字段
- scrapy - Spider使用scrapy运行,但没有数据存储到csv中
- android - 使用 React Native 的移动原生项目
- nuget - 如何为 dll 文件名与程序集名称不同的程序集正确定义 NuGet 包?