我正在使用Azure DevOps进行一些应用程序部署。我需要有一个保存的可变内部版本号,每次成功进行构建时都会更新,并将apk/ipa发送到商店。
现在,从我在Azure文档和StackOverflow上的其他帖子中读到的内容来看,我是这样设置脚本的。
这是我的管道变量x1c 0d1x
这是我当前的脚本
输出为:
所以,它似乎更新了我的局部变量,但不是我的管道变量。我不确定为什么,因为这是在任何地方提供的示例。
资料来源:
- https://learn.microsoft.com/en-us/azure/devops/pipelines/process/set-variables-scripts?view=azure-devops&tabs=bash
- how to increment and save variable in azure devops pipeline
谢谢你的帮助!
编辑1:好的,看起来有一个变量/函数叫做counter
。我还没有弄清楚如何使用它,但是正在研究它。
编辑2:更新我的azure-pipelines.yml
variables:
major: 1
minor: 0
patch: 0
build: $[counter(variables['patch'], 1)]
在我的管道上,它看起来像
而我的快速通道(Ruby脚本)通道看起来像这样
lane :tf do
`echo $major`
`echo $minor`
`echo $patch`
`echo $build` # Nothing
`echo $MAJOR`
`echo $MINOR`
`echo $PATCH`
`echo $BUILD` # Nothing
`echo $(major)` # fails
end
那些什么也没显示。
这个Azure DevOps非常令人沮丧。它在这里说我可以对这个变量进行bash调用。x1c4d 1x
4条答案
按热度按时间vmdwslir1#
与宏语法一起使用变量在执行任务之前会在运行时扩展,这就是为什么最后一个日志中有值'1',即使该值在上一步中设置为'2'
https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#runtime-expression-syntax
请尝试改用运行时表达式,它在运行时扩展
q8l4jmvw2#
两个解决方案。
1.使用计数器表达式。
counter(<prefix>, <feed>)
计数器表达式用于管道,它有两个参数:prefix和seed。seed基于prefix。
当前缀被设置并且第一次运行时,计数器结果将从馈送值开始。但是对于基于相同前缀的后续运行,计数器结果将忽略馈送值,它将是“上次计数器结果+ 1”
2,直接更改管道定义。
例如,我可以使用下面的python代码来获取和更改经典管道的变量:
为您编写一个JSON演示,您可以将其导入到DevOps中,并在此基础上设计自己的经典管道:
7uzetpgm3#
它似乎更新了我的局部变量,但没有更新我的管道变量
请参阅本文档:在脚本中设置变量
管道中的脚本可以定义变量,以便管道中的某个后续步骤可以使用该变量。在脚本中设置变量
用于更新管道变量值的方法正确。
它不会在当前任务上起作用,但更新后的值可用于后续任务。
例如:
对于关于使用计数器表达式的要求,可以参考我的另一张票:Azure开发运营:发行版本
gzjq41n44#
我最终使用了这个公式,它不需要黑进国家安全局和联邦调查局来更新版本号。这不是我想要的,但不管怎样,我会处理这个ATM机。
然后在我的ruby脚本中使用
ENV['BUILDNUMBER']
,它用计数器读取env变量。这是我需要的解决方案类型,尽管它并不完全符合我的要求。