我想检查字符串是否是 azure devops 表达式中的版本。主要用于设置版本号。这是我的表情
- ${{ if tryparse(variables['Build.SourceBranchName'], True) }}:
- name: myBuildNumber
value: $[Build.SourceBranchName]
- ${{ else }}:
- name: myBuildNumber
value: $[format('0:yyyy\.MM\.dd', pipeline.startTime)]
azure devops 表达式文档声明我使用 C# 版本的 try parse,但没有真正描述如何在 yaml 表达式中使用它。我知道 C# 文档调用 out 参数,但我不确定如何在这种情况下调用或使用该函数。
“
Version.TryParse
”不是 Azure Pipelines 中的用户可用函数。它是管道的后端函数,用于将提供的字符串解析为版本号。
要检查字符串是否为版本号,可以尝试在脚本中使用
if
语句和正则表达式。
请参阅以下示例作为参考。
if语句“
if('$(Build.SourceBranchName)' -match '^\d+(\.\d+){1,3}$')
”可以检查“Build.SourceBranchName
”变量的值是否为版本号格式字符串,该字符串最少包含2段,最多包含4段。
SetVariable
”用于更新“myBuildNumber
”变量的值。
variables:
- name: myBuildNumber
value: $[ format('{0:yyyy\.MM\.dd}', pipeline.startTime) ]
steps:
- task: PowerShell@2
displayName: 'Show myBuildNumber before update'
inputs:
pwsh: true
targetType: inline
script: |
Write-Host "Build.SourceBranchName = $(Build.SourceBranchName)"
Write-Host "myBuildNumber = $(myBuildNumber)"
- task: PowerShell@2
displayName: 'Update myBuildNumber'
inputs:
pwsh: true
targetType: inline
script: |
if('$(Build.SourceBranchName)' -match '^\d+(\.\d+){1,3}$') {
Write-Host "##vso[task.setvariable variable=myBuildNumber;]$(Build.SourceBranchName)"
}
- task: PowerShell@2
displayName: 'Show myBuildNumber after update'
inputs:
pwsh: true
targetType: inline
script: |
Write-Host "Build.SourceBranchName = $(Build.SourceBranchName)"
Write-Host "myBuildNumber = $(myBuildNumber)"