Azure Pipeline Build.Repository.Name 替换不需要的前缀

AzurePipeline Build.Repository.Name replace unwanted prefix

在 Azure Pipleine YAML 版本中,Build.Repository.Name 预定义变量在我的例子中包含 workspace/reponame 值。

我想删除 workspace/ 前缀并在后续步骤中使用结果。

我尝试了很多方法都没有成功,但是替换表达式似乎对我有好处。

一个尝试过的解决方案:

variables:
  myVariable: $[replace(variables['Build.Repository.Name'], 'workspace/', '')]

  steps:
    - bash: echo $(myVariable) # show nothing

正如我在文档中所读,Build.Repository.Name 在此阶段无法访问 以下运行时调用显示正确的值

steps:
  - bash: echo $(Build.Repository.Name) # shows: workspace/reponame

我可以做类似的事情吗?正确的方法是什么?

- bash: echo $(replace('$(Build.Repository.Name)', 'workspace/', ''))

根据我的测试,替换表达式可以正常工作。

由于我的repo名称不包含/,我切换到另一个预定义变量($(build.sourcebranch)(例如refs/heads/master))进行测试。

这里有两种方法:

1.Replace表达式:

variables:
  myVariable: $[replace(variables['BUILD.SOURCEBRANCH'], 'refs/heads/', '')]

steps:
  - bash: echo $(myVariable) 

2.Bash 脚本:

steps:
  - task: Bash@3
    inputs:
      targetType: 'inline'
      script: |
        SUBSTRING=$(echo $(BUILD.SOURCEBRANCH)| cut -d'/' -f 3)
        echo $SUBSTRING
        echo "##vso[task.setvariable variable=myvalue]$SUBSTRING"
  - task: Bash@3
    inputs:
      targetType: 'inline'
      script: |
       echo $(myvalue)

结果:

对于您的情况,您可以尝试以下 bash 脚本:

steps:
  - task: Bash@3
    inputs:
      targetType: 'inline'
      script: |
        SUBSTRING=$(echo $(Build.Repository.Name)| cut -d'/' -f 2)
        echo $SUBSTRING
        echo "##vso[task.setvariable variable=myvalue]$SUBSTRING"
  - task: Bash@3
    inputs:
      targetType: 'inline'
      script: |
       echo $(myvalue)