我正在寻找一种方法来在我的azure-pipelines.yml
文件中定义一个变量,我可以在其中子字符串'Build.SourceVersion'
-> 仅使用前 7 个字符。
似乎文档中没有可以执行此类字符串操作的内置函数。有什么我想念的吗?
我的另一种方法是使用 bash 任务并覆盖那里的变量,但是找到可以做到这一点的内置内容将是更好的解决方案。
我正在寻找一种方法来在我的azure-pipelines.yml
文件中定义一个变量,我可以在其中子字符串'Build.SourceVersion'
-> 仅使用前 7 个字符。
似乎文档中没有可以执行此类字符串操作的内置函数。有什么我想念的吗?
我的另一种方法是使用 bash 任务并覆盖那里的变量,但是找到可以做到这一点的内置内容将是更好的解决方案。
我的另一种方法是使用 bash 任务并覆盖那里的变量,但是找到可以做到这一点的内置内容将是更好的解决方案。
我同意卢卡斯的观点。Azure DevOps 中没有这样的内置任务来获取 $(Build.SourceVersion) 的前 7 个字符。
我们可以使用命令行/powershell 任务将长 sha 拆分为短 sha:
echo $(Build.SourceVersion)
set TestVar=$(Build.SourceVersion)
set MyCustomVar=%TestVar:~0,7%
echo %MyCustomVar%
echo ##vso[task.setvariable variable=ShortSourceVersion]%MyCustomVar%
在这种情况下,我们可以获取 的简短版本Build.SourceVersion
并将其设置为环境变量。
然后我们可以将此命令行任务设置为任务组:
所以,我们可以直接使用这个任务来设置ShortSourceVersion
。
希望这可以帮助。
你是对的,没有本地方法可以做到这一点。您将不得不编写一个脚本来转换变量。
这是一个例子:
trigger:
- master
resources:
- repo: self
stages:
- stage: Build
displayName: Build image
jobs:
- job: Build
displayName: Build
pool:
vmImage: 'ubuntu-latest'
steps:
- task: CmdLine@2
inputs:
script: ' x=`echo "$(Build.SourceVersion)" | head -c 7`; echo "##vso[task.setvariable variable=MyVar]$x"'
- task: CmdLine@2
inputs:
script: 'echo "$(MyVar)"'
你当然可以!如果你绝对必须。这是一个运行时计算,采用 Build.SourceVersion 变量的前 7 个字符。
variables:
example: ${{ format('{0}{1}{2}{3}{4}{5}{6}', variables['Build.SourceVersion'][0], variables['Build.SourceVersion'][1], variables['Build.SourceVersion'][2], variables['Build.SourceVersion'][3], variables['Build.SourceVersion'][4], variables['Build.SourceVersion'][5], variables['Build.SourceVersion'][6]) }}
注意:我无法使用$[
...]
语法,因为变量在初始时显然是空的。