Ich evaluiere derzeit Azure-Pipelines mit einem kleinen POC und glaube, ich bin auf eine Einschränkung gestoßen, wollte aber wissen, ob jemand eine Problemumgehung hatte.

Hier sind die wichtigsten Teile für das, was ich versuche zu tun.

azure-pipelines.yml

variables:
  - name: FavouriteSportsTeam
    value: "Houston Rockets"
jobs:
  - template: Build1.yml
    parameters:
      SportsTeam: $(FavouriteSportsTeam)
  - template: Build2.yml
    parameters:
      SportsTeam: $(FavouriteSportsTeam)

Build1.yml

parameters:
  SportsTeam: "A Default Team"
jobs:
  - job: SportsTeamPrinter
    steps:
      - script: "echo ${{ parameters.SportsTeam }}"

Wenn ich jetzt versuche, dies auszuführen, wird die aus der Datei azure-pipelines.yml übergebene Variable nicht erweitert und als "$ (FavouriteSportsTeam)" belassen.

Ist es möglich, eine erweiterte Variable als Parameter an eine andere Datei zu übergeben?

24
MAHDTech 18 Jän. 2019 im 03:14

4 Antworten

Beste Antwort

Das funktioniert:

azure-pipelines.yml

variables:
  FavouriteSportsTeam: "Houston Rockets"
jobs:
  - template: Build1.yml
    parameters:
      SportsTeam: $(FavouriteSportsTeam)
  - template: Build2.yml
    parameters:
      SportsTeam: $(FavouriteSportsTeam)

Build1.yml

parameters:
  SportsTeam: "A Default Team"
jobs:
  - job: SportsTeamPrinter
    steps:
      - script: "echo ${{ parameters.SportsTeam }}"
3
Krzysztof Czelusniak 8 Jän. 2020 im 22:32

Ich nehme an, dass Vorlagenparameter ausgewertet werden, bevor Variablen initialisiert werden. Aus diesem Grund erhalten Sie $(FavouriteSportsTeam) anstelle des variablen Werts

Ich habe versucht, den Wert des Vorlagenparameters aus der Variablen auf verschiedene Arten festzulegen, aber kein Glück

In der Vorlage kann der Parameterwert mit format oder ohne (unter Verwendung von $ {{}}) wie aufgelöst werden

#template1
parameters:
  poolname: dev4-kyiv
  versionFile: ''

jobs:
  - job: versionJob 
    pool:
      name: ${{ parameters.poolname }}
    steps:
      - powershell: |
          Write-Host ("${{ parameters.versionFile }}")

Oder mit lokalen Vorlagenvariablen

#template2
parameters:
  releaseFilePath: ''
  packageTags: '' 
jobs:
  - job: build
    variables:
      releaseNotesFile: '${{ parameters.releaseFilePath }}/releaseNotes.txt'
      tags: '${{ parameters.packageTags }}'

Ich kann jedoch nicht herausfinden, wie der Wert des Vorlagenparameters mithilfe einer Variablen aus dem Hauptskript festgelegt wird, das die Vorlage verwendet.

1
oleksa 19 Juni 2019 im 13:27

Ja, aber Sie müssen die Funktion format() verwenden:

Inline: |
  ${{ format('$Tags = (Get-AzureRmResourceGroup -Name {0}).Tags
  $Tags.Version = "$(Build.BuildNumber)"
  $Tags.FailedVersion = "-"; Set-AzureRmResourceGroup -Name {0} -Tag $Tags',
        parameters.resourceGroupName ) }}

Hier ist ein Beispiel. Sie können es auch mehrzeilig machen, um die Lesbarkeit zu verbessern.

https://github.com/Microsoft/azure-pipelines-agent/issues/1686

0
4c74356b41 18 Jän. 2019 im 06:04

Ich hatte das gleiche Problem mit einem Bereitstellungsjob in einer Vorlage, bei dem ich versucht habe, environment abhängig von einem Parameter festzulegen. Der Template-Parameter würde eine Laufzeitvariable $(Environment) empfangen.

Das Problem war, dass Laufzeitvariablen zum Zeitpunkt der Interpretation der Wertübergabe an environment noch nicht verfügbar sind. Die Lösung bestand darin, die Variable nicht in der Laufzeitsyntax zu übergeben, sondern die Ausdruckssyntax ${{ variables.environment }} zu verwenden:

Deploy-appservice.yml

parameters:
- name: environment # don't pass run-time variables

jobs:
- deployment: DeployAppService
  environment: ${{ parameters.environment }}
  strategy: [...]

Azure-pipelines.yml

- stage: QA
  variables: 
    Environment: QA
  jobs:
  - template: templates/deploy-appservice.yml
    parameters:
      environment: ${{ variables.environment }} # use expression syntax

Wenn Sie eine Laufzeitvariable $(Environment) falsch übergeben, versucht der Bereitstellungsjob, die Azure DevOps-Umgebung mit dieser Zeichenfolge zu benennen. Ich denke, da dies kein gültiger Name ist, wird Test als Fallback-Name verwendet, der dann im Menü "Umgebungen" angezeigt wird.

0
officer 2 Apr. 2020 im 07:05