Return 来自 Azure 管道中 node.js 脚本的值?
Return a value from node.js script in azure pipeline?
在 Azure Pipelines 中,我看到您可以在管道 运行 期间从 node.js 中的脚本访问环境变量。但是,我实际上想 return 一个值,然后 capture/use 它。
有人知道怎么做吗?我在文档中找不到有关如何执行此操作的任何参考。
为了保持一致性,最好对所有内容都使用节点脚本,而不是在节点和 bash 之间来回切换。
谢谢
好吧,我终于明白了。 Azure 文档在这个主题上有点混乱,但我的方法如下。在这个例子中,我将制作一个相当无意义的简单脚本,它设置一个变量,其值是源分支的名称,但全部小写。
1) 定义变量
定义变量可以很简单地完成(尽管变量的使用方式有很多深度,我建议查阅有关变量创建的 Azure 文档以了解更多信息)。但是,在您的管道 yaml 文件的顶部,您可以这样定义它:
variables
lowerCaseBranchName: ''
这会创建一个空变量,供您在所有作业中使用。我们将使用此变量作为示例。
2) 创建脚本
从您的脚本“返回一个值”只是意味着通过节点的 stdout
输出它,其输出将被任务消耗以将其设置为管道变量。
要记住的重要一点是,管道中的任何环境变量都可以在节点内使用,它们只是重新格式化并移动到节点的 process.env
全局下。例如,Azure 管道中常用的 Build.SourceBranchName
环境变量可在您的节点脚本中通过其别名 process.env.BUILD_SOURCEBRANCHNAME
访问。这种大写名称转换在所有环境变量中应该是统一的。
这是一个示例 node.js 脚本:
const lowerCaseBranchName = process.env.BUILD_SOURCEBRANCHNAME.toLowerCase();
process.stdout.write(lowerCaseBranchName);
3) 在 azure 管道中使用相关步骤中的输出
要在作业步骤中使用该脚本,请使用脚本任务调用它。请记住,在这种情况下,脚本任务是一个 bash 脚本(尽管您可以使用其他脚本),它在设置变量值时将节点作为命令运行:
- script: |
echo "##vso[task.setvariable variable=lowerCaseBranchName]$(node path/to/your/script)"
displayName: 'Get lower case branch name'
分解语法
在我看来,使用变量定义语法非常丑陋,但一旦理解它就非常容易使用。在脚本中设置变量的基本语法如下:
##vso[task.setvariable variable=SOME_VARIABLE_NAME]SOME_VARIABLE_VALUE
上面,SOME_VARIABLE_NAME
是我们变量的名称 (lowerCaseBranchName
),正如我们一开始在 Azure 管道配置中定义的那样。同样,SOME_VARIABLE_VALUE
是我们要将该变量设置为的值。
您可以在该行上方添加一行来独立创建一个变量,然后您可以使用该变量来设置 env 变量,但是我选择只内联脚本调用,如您在上面的示例中所见,使用$()
语法。
就是这样。在以下任务中,环境变量 lowerCaseBranchName
可以使用任何变量语法,例如 $(lowerCaseBranchName)
、
最终结果
在我们的 yaml 文件中定义我们的变量:
variables
lowerCaseBranchName: ''
我们的 nodejs 脚本:
const lowerCaseBranchName = process.env.BUILD_SOURCEBRANCHNAME.toLowerCase();
process.stdout.write(lowerCaseBranchName);
所述脚本的管道任务implementation/execution:
- script: |
echo "##vso[task.setvariable variable=lowerCaseBranchName]$(node path/to/your/script)"
displayName: 'Get lower case branch name'
使用其输出的以下任务:
- script: |
echo "$(lowerCaseBranchName)"
displayName: 'Output lower case branch name'
这将在运行时将 lower-cased 分支名称打印到管道控制台。
希望这对某人有所帮助!快乐devops-ing!
在 Azure Pipelines 中,我看到您可以在管道 运行 期间从 node.js 中的脚本访问环境变量。但是,我实际上想 return 一个值,然后 capture/use 它。
有人知道怎么做吗?我在文档中找不到有关如何执行此操作的任何参考。
为了保持一致性,最好对所有内容都使用节点脚本,而不是在节点和 bash 之间来回切换。
谢谢
好吧,我终于明白了。 Azure 文档在这个主题上有点混乱,但我的方法如下。在这个例子中,我将制作一个相当无意义的简单脚本,它设置一个变量,其值是源分支的名称,但全部小写。
1) 定义变量
定义变量可以很简单地完成(尽管变量的使用方式有很多深度,我建议查阅有关变量创建的 Azure 文档以了解更多信息)。但是,在您的管道 yaml 文件的顶部,您可以这样定义它:
variables
lowerCaseBranchName: ''
这会创建一个空变量,供您在所有作业中使用。我们将使用此变量作为示例。
2) 创建脚本
从您的脚本“返回一个值”只是意味着通过节点的 stdout
输出它,其输出将被任务消耗以将其设置为管道变量。
要记住的重要一点是,管道中的任何环境变量都可以在节点内使用,它们只是重新格式化并移动到节点的 process.env
全局下。例如,Azure 管道中常用的 Build.SourceBranchName
环境变量可在您的节点脚本中通过其别名 process.env.BUILD_SOURCEBRANCHNAME
访问。这种大写名称转换在所有环境变量中应该是统一的。
这是一个示例 node.js 脚本:
const lowerCaseBranchName = process.env.BUILD_SOURCEBRANCHNAME.toLowerCase();
process.stdout.write(lowerCaseBranchName);
3) 在 azure 管道中使用相关步骤中的输出
要在作业步骤中使用该脚本,请使用脚本任务调用它。请记住,在这种情况下,脚本任务是一个 bash 脚本(尽管您可以使用其他脚本),它在设置变量值时将节点作为命令运行:
- script: |
echo "##vso[task.setvariable variable=lowerCaseBranchName]$(node path/to/your/script)"
displayName: 'Get lower case branch name'
分解语法
在我看来,使用变量定义语法非常丑陋,但一旦理解它就非常容易使用。在脚本中设置变量的基本语法如下:
##vso[task.setvariable variable=SOME_VARIABLE_NAME]SOME_VARIABLE_VALUE
上面,SOME_VARIABLE_NAME
是我们变量的名称 (lowerCaseBranchName
),正如我们一开始在 Azure 管道配置中定义的那样。同样,SOME_VARIABLE_VALUE
是我们要将该变量设置为的值。
您可以在该行上方添加一行来独立创建一个变量,然后您可以使用该变量来设置 env 变量,但是我选择只内联脚本调用,如您在上面的示例中所见,使用$()
语法。
就是这样。在以下任务中,环境变量 lowerCaseBranchName
可以使用任何变量语法,例如 $(lowerCaseBranchName)
、
最终结果
在我们的 yaml 文件中定义我们的变量:
variables
lowerCaseBranchName: ''
我们的 nodejs 脚本:
const lowerCaseBranchName = process.env.BUILD_SOURCEBRANCHNAME.toLowerCase();
process.stdout.write(lowerCaseBranchName);
所述脚本的管道任务implementation/execution:
- script: |
echo "##vso[task.setvariable variable=lowerCaseBranchName]$(node path/to/your/script)"
displayName: 'Get lower case branch name'
使用其输出的以下任务:
- script: |
echo "$(lowerCaseBranchName)"
displayName: 'Output lower case branch name'
这将在运行时将 lower-cased 分支名称打印到管道控制台。
希望这对某人有所帮助!快乐devops-ing!