我可以在 Azure Pipelines 中对变量进行子字符串化吗?

Can I substring a variable in Azure Pipelines?

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

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

我的另一种方法是使用 bash 任务并覆盖那里的变量,但找到可以执行此操作的内置程序将是更好的解决方案。

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

这是一个例子:

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)"'

My other approach would be to use a bash task and overwrite the variable there but finding something build-in that can do this would be way better solution.

我同意卢卡斯的观点。在 Azure DevOps 中没有这样的内置任务来获取 $(Build.SourceVersion) 的前 7 个字符。

我们可以使用命令line/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

希望对您有所帮助。

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

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

这是我用于这项工作的最短版本;

- bash: |
    longcommithash=$(Build.SourceVersion)
    echo "##vso[task.setvariable variable=shorthash;]$(echo ${longcommithash::9})"

它为您提供如下所示的输出;