11

我正在寻找一种方法来在我的azure-pipelines.yml文件中定义一个变量,我可以在其中子字符串'Build.SourceVersion'-> 仅使用前 7 个字符。

似乎文档中没有可以执行此类字符串操作的内置函数。有什么我想念的吗?

我的另一种方法是使用 bash 任务并覆盖那里的变量,但是找到可以做到这一点的内置内容将是更好的解决方案。

4

3 回答 3

9

我的另一种方法是使用 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

希望这可以帮助。

于 2020-06-15T06:17:04.820 回答
1

你是对的,没有本地方法可以做到这一点。您将不得不编写一个脚本来转换变量。

这是一个例子:

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)"'
于 2020-06-12T17:56:52.357 回答
-2

你当然可以!如果你绝对必须。这是一个运行时计算,采用 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]) }}

注意:我无法使用$[...]语法,因为变量在初始时显然是空的。

于 2021-07-16T08:10:50.463 回答