Macke
Macke

Reputation: 25690

How to replace in variable strings inside azure-pipelines.yaml?

I want to set VersionSuffix from Build.Sourcebranch but this fails since SourceBranch contains refs/heads/<branchname>.

- task: DotNetCoreCLI@2
  condition: succeeded()
  inputs: 
    command: 'pack'
    versioningScheme: ByPrereleaseNumber
    majorVersion: '0' 
    minorVersion: '1' 
    patchVersion: '1' 
    packTimezone: 'utc' 
    buildProperties: VersionSuffix=$(Build.SourceBranch)-$(Build.BuildNumber)

I just want to add .Replace('/','_') and a few similar statements to $(Build.SourceBranch), but I can't find anything in the expression syntax on how to do that.

It didn't work to send in another string (i.e. VersionSuffixRaw) and create the VersionSuffix with String.Replace inside the .csproj; it just got ignored for some reason.

Note: There is Build.SourceBranchName which has the last part of a branchname, so if SourceBranch is refs/heads/feature/foo, SourceBranchName will be foo. However a branch namd feature/JIRA-123_foo_unittest will not work since _ is not valid in a version string.

Upvotes: 31

Views: 54034

Answers (3)

Yacuzo
Yacuzo

Reputation: 641

For others finding this through searches, there is now a replace expression: MS Doc

variables:      
  branch: $[replace(variables['Build.SourceBranch'], '/', '-')]

Upvotes: 52

4c74356b41
4c74356b41

Reputation: 72191

I don't think you can do something like that natively yet, what I've been doing is the following:

  - bash: |
      date=$(date --rfc-3339=ns | sed "s/ /T/; s/\(\....\).*-/\1-/g")
      echo "##vso[task.setvariable variable=CONTAINER_BUILD_TIME]$date"

basically using a script step to set a specific value for a specific variable, and later on you can use it like you normally would: $(date)

Upvotes: 3

Levi Lu-MSFT
Levi Lu-MSFT

Reputation: 30353

As @4c74356b41 pointed out. You can try adding powershell scripts to replace the Build.SourceBranch in your yaml build definition. And output the new sourcebranch to a new variable. Then you can use the new variable in the next steps.

Below is just a simple example. Click here for more information

1, replace "/" to "_" for SourceBranch and set the replaced value to variable newSourceBranch

- powershell: |
    $newbranch = "$(Build.SourceBranch)" -replace "/", "_"  
    echo "##vso[task.setvariable variable=newSourceBranch;isOutput=true]$newbranch"
  name: branchsetter 

2, Use the newSourceBranch in the following steps.

- powershell: |
    write-host "$(branchsetter.newSourceBranch)"

Upvotes: 9

Related Questions