我可以在 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})"
它为您提供如下所示的输出;
我正在寻找一种在我的 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})"
它为您提供如下所示的输出;