簡體   English   中英

Yaml Azure DevOps 中的運行時變量

[英]Runtime Variable in Yaml Azure DevOps

如果在 Yaml 中為我們的 CRM 解決方案之一創建了管道,我已經創建了變量 SolutionExit、SolutionName、SolutionVersion

#back-up.yaml
parameters:
  - name: Solution
    displayName: Solution Need to be backed up
    type: object
    default: [solution1,Solution2]

trigger:
- none
variables:
  SolutionExit: ''
  SolutionVersion: ''
  SolutionName: ''
pool:
  vmImage: windows-2019

steps:
- task: MSCRMToolInstaller@12
  inputs:
    nugetFeed: 'official'
    psFeed: 'official'
- ${{each value in parameters.Solution}}:
    - task: MSCRMGetSolution@12
      inputs:
        crmConnectionString: '$(ConnectStr)'
        solutionName: '${{value}}'
        existsVariableName: 'SolutionExit' #replace existing variable with output value True or False
        versionVariableName: 'SolutionVersion' #replace existing variable with output value
        displayVariableName: 'SolutionName' #replace existing variable with output value
    - template: template/validate-solution.yml
      parameters:
        SolutionExit: $(SolutionExit)
#validate-solution.yml
parameters:
  SolutionExit: ""
steps:
- ${{if eq(parameters.SolutionExit, 'True')}}:
    - script: echo "Solution exist $(SolutionExit),$(SolutionVersion),$(SolutionName),${{parameters.SolutionExit}}"
- ${{else}}:
    - bash: echo "solution doesnt exit $(SolutionExit),$(SolutionVersion),$(SolutionName),${{parameters.SolutionExit}}"

但如果條件永遠不滿足,則不接受運行時參數。 如何傳遞運行時參數

這是兩種情況的結果如果解決方案可用

Starting: Bash
==============================================================================
Task         : Bash
Description  : Run a Bash script on macOS, Linux, or Windows
Version      : 3.214.0
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/bash
==============================================================================
Generating script.
Script contents:
echo "solution doesnt exit True,1.0.0.11,Solution1,True"
"C:\Program Files\Git\bin\bash.exe" -c pwd
/d/a/_temp
========================== Starting Command Output ===========================
"C:\Program Files\Git\bin\bash.exe" /d/a/_temp/237f7dc2-debc-4c47-ba88-41a6a97c49d9.sh
solution doesnt exit True,1.0.0.11,soultion1,True
Finishing: Bash

如果解決方案不可用

Starting: Bash
==============================================================================
Task         : Bash
Description  : Run a Bash script on macOS, Linux, or Windows
Version      : 3.214.0
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/bash
==============================================================================
Generating script.
Script contents:
echo "solution doesnt exit False,,,False"
"C:\Program Files\Git\bin\bash.exe" -c pwd
/d/a/_temp
========================== Starting Command Output ===========================
"C:\Program Files\Git\bin\bash.exe" /d/a/_temp/49e5bea1-b380-4a74-a0ce-b89d0dfb3a07.sh
solution doesnt exit False,,,False
Finishing: Bash

如何解決這個問題。 有編譯時和運行時變量,根據微軟我試過 ${{if eq(variables['SolutionExit'], 'True')}}:這也沒有用。 我們不能在 $(SolutionExit) 這樣的條件下使用宏變量

根據您的 YAML 定義,該變量將在管道運行過程中生成。

變量應該是運行時變量。 它將在運行時擴展。 但是 If 表達式和參數將在編譯時展開。

在這種情況下,If 表達式將不起作用。

要解決這個問題,您需要更改為使用Condition來替換 If 表達式。

同時,你不需要使用參數來傳遞變量值。 您可以直接在條件中使用變量。

例如:

總機 YAML:

parameters:
  - name: Solution
    displayName: Solution Need to be backed up
    type: object
    default: [solution1,Solution2]

trigger:
- none
variables:
  SolutionExit: ''
  SolutionVersion: ''
  SolutionName: ''
pool:
  vmImage: windows-2019

steps:
- task: MSCRMToolInstaller@12
  inputs:
    nugetFeed: 'official'
    psFeed: 'official'
- ${{each value in parameters.Solution}}:
    - task: MSCRMGetSolution@12
      inputs:
        crmConnectionString: '$(ConnectStr)'
        solutionName: '${{value}}'
        existsVariableName: 'SolutionExit' #replace existing variable with output value True or False
        versionVariableName: 'SolutionVersion' #replace existing variable with output value
        displayVariableName: 'SolutionName' #replace existing variable with output value
    - template: template/validate-solution.yml

模板 YAML:

steps:
- script: echo "Solution exist $(SolutionExit),$(SolutionVersion),$(SolutionName),${{parameters.SolutionExit}}"
  condition: eq(variables['SolutionExit'], 'true')

- bash: echo "solution doesnt exit $(SolutionExit),$(SolutionVersion),$(SolutionName),${{parameters.SolutionExit}}"
  condition: ne(variables['SolutionExit'], 'true')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM