web-dev-qa-db-fra.com

L'affectation de variable conditionnelle peut-elle être effectuée dans les pipelines Azure?

Azure Pipelines a Expressions et Conditions , mais je ne trouve aucun moyen d'affecter l'une des deux valeurs à une variable , en fonction d'une condition.

Existe-t-il un moyen d'accomplir ce que ferait ce pseudo-code?

    ${{ if endsWith( variables['Build.SourceBranchName'], '/master' ) }}: 
      buildVersion: variables['mavenVersion']
    ${{ else }}: 
      buildVersion: variables['Build.SourceBranchName']
9
Mike Murray

Cela devrait faire l'affaire....

BuildVersion est initialisé comme $ (Build.SourceBranch) si c'est la branche principale que vous changez en $ (mavenVersion) sinon aucun changement.

variables:
  mavenVersion: '1.0'
  buildVersion: $(Build.SourceBranch)

pool:
  vmImage: 'ubuntu-latest'

steps:

- script: echo '##vso[task.setvariable variable=buildVersion]$(mavenVersion)'
  displayName: "Set the buildVersion as mavenVersion if the Build.SourceBranch = 'refs/heads/master' "
  condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')

- script: echo $(buildVersion)
  displayName: 'Printing the variable'

non-master branches refs/têtes/branch_name 'qui est mavenVersion non-master branches prints 'refs/heads/branch_name' which is mavenVersion

la branche principale imprime 1.0 qui est mavenVersion master branch prints 1.0 which is mavenVersion

4
Venura Athukorala

J'étais plus proche que je ne le pensais. Ce n'est pas joli, mais ça a marché. (avec plus de contexte yaml)

variables:
  ${{ if eq( variables['Build.SourceBranchName'], 'master' ) }}: 
    buildVersion: ${{ variables['mavenVersion'] }}
  ${{ if ne( variables['Build.SourceBranchName'], 'master' ) }}: 
    buildVersion: ${{ variables['Build.SourceBranchName'] }}

  buildKey: ${{ format('{0}_{1}', variables['supportReleaseNumber'], variables['buildVersion']) }}
  buildNum: $[counter(variables['buildKey'], 1)]  # same as $(Rev:r), but more widely usable 

name: $(buildKey)_$(buildNum)  # build run name
10
Mike Murray

@Mike Murray, merci pour cela! J'essaie de résoudre ce problème depuis des lustres. Lorsque des builds sont déclenchés à partir de demandes d'extraction, SourceBranchName est toujours "fusionné". Votre réponse m'a aidé à trouver cette solution pour obtenir le nom de la branche cible pour les deux scénarios, les constructions manuelles et les générations déclenchées par des pull-requests:

${{ if ne( variables['Build.SourceBranchName'], 'merge' ) }}: 
    environment: ${{ variables['Build.SourceBranchName'] }}
  ${{ if endsWith( variables['System.PullRequest.TargetBranch'], 'dev' ) }}: 
    environment: dev
  ${{ if endsWith( variables['System.PullRequest.TargetBranch'], 'staging' ) }}: 
    environment: staging
  ${{ if endsWith( variables['System.PullRequest.TargetBranch'], 'master' ) }}: 
    environment: prod

Pas très joli, mais ça marche enfin.