Azure devops 是否可以手动更新生成变量$(build.BuildId)

Azure devops 是否可以手动更新生成变量$(build.BuildId),azure-devops,Azure Devops,我正在帮助一位朋友进行VST构建,我们正在使用这两种构建标识符 $(Build.BuildId) $(Build.BuildNumber) 这是特定于Xamarin.iOS构建的,在该构建中,我们使用新的VSTS构建任务来更新Info.Plist。我们需要对版本代码使用$(Build.BuildId),它只是一个递增的数字。然后我们想使用$(Build.BuildNumber)作为实际的版本名。如果要将其格式化为生成字符串,则如下所示: $(Build.BuildNumber)=1.0.0

我正在帮助一位朋友进行VST构建,我们正在使用这两种构建标识符

  • $(Build.BuildId)
  • $(Build.BuildNumber)
这是特定于Xamarin.iOS构建的,在该构建中,我们使用新的VSTS构建任务来更新Info.Plist。我们需要对版本代码使用$(Build.BuildId),它只是一个递增的数字。然后我们想使用$(Build.BuildNumber)作为实际的版本名。如果要将其格式化为生成字符串,则如下所示:

  • $(Build.BuildNumber)
    =1.0.0
  • $(Build.BuildId)
    =148
  • 结果=1.0.0(148)
问题是我们已经向应用商店提交了我们的应用程序,其版本ID比我们当前的版本大。我们希望手动更新BuildId,而不是运行构建X的次数来同步它,这样我们就可以开始在整个工作流中使用它了。

不,这是不可能的

预定义变量
Build.BuildId
的值对于在VSTS帐户中记录回显生成是唯一的

即使您可以通过logging命令更改该值,但它仅适用于当前生成,当您对下一个生成进行排队时,生成ID将继续增加,而不会产生任何影响

例如,当前的
Build.BuildId
是148,即使您在一个构建中通过
Write Host“##vso[task.setvariable=Build.BuildId]2148”
将值设置为100,但当另一个构建排队时,
Build.BuildId
将是149

解决方法是使用用户定义的变量,而不是
Build.BuildId

添加用户定义的变量,如
custom.BuildId
,并使用
($(Build.BuildId)+GapNumber)
设置值

例如,如果当前的
Build.BuildID
是148,而您在app store中提交的Build ID是2148,那么您可以使用
自定义.BuildID
的值
($(Build.BuildID)+2000)
。然后为您的应用程序使用变量
$(custom.BuildId)
$(Build.BuildNumber)

用于下一次构建。
custom.BuildId
值将为1149。

我使用的是:

MyAppVersion$[counter('my-counter-prefix',500)]

MyAppVersion是500501502

  • 此函数只能在定义变量的表达式中使用。它不能用作步骤、作业或阶段条件的一部分
  • 计算随管道每次运行而递增的数字
  • 参数:2<代码>前缀和
    种子
  • 前缀是一个字符串表达式。针对前缀的每个唯一值跟踪计数器的单独值
  • 种子是计数器的起始值
您可以创建一个计数器,该计数器在管道的每次执行中自动递增一。定义计数器时,提供
前缀
种子


这无法更新
Build.BuildId
,但您可以使用日志命令设置
Build.BuildNumber

写入主机“##vso[build.updatebuildnumber]我的新版本号”

目前这是一个很好的解决方法。我和微软的Chris Patterson谈过,他说2018年初会有一个新功能,它支持以种子数递增,类似于BuildID的工作方式。是否有任何更新?2018年初已经过去@AndrewoEfling据我所知,唯一的其他方法是使用@Felix提供的下面答案中的构建计数器。我相信这只在构建yaml中可用,而不是经典编辑器(对此不是100%确定)