Azure devops 在bash脚本中访问ADO yaml参数的正确方法是什么?

Azure devops 在bash脚本中访问ADO yaml参数的正确方法是什么?,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我有一个模板,它被调用并传递了一组参数。我想在bash脚本中使用这些。当我定义内联bash脚本时,我可以使用${parameter.foo}轻松打印参数。但是,如果将bash脚本定义为文件并调用它,则无法访问参数 下面是一个示例模板,“内联测试”将在“文件测试”不会显示的地方吐出参数。到目前为止,我可以看到两种可能的解决方案,将参数值定义为“任务变量”并将其访问为$foo(示例内联测试),或者可能将参数作为参数传递给“文件测试”任务(示例文件测试2)。是否有一个选项可以从文件访问现有bash脚本

我有一个模板,它被调用并传递了一组参数。我想在bash脚本中使用这些。当我定义内联bash脚本时,我可以使用${parameter.foo}轻松打印参数。但是,如果将bash脚本定义为文件并调用它,则无法访问参数

下面是一个示例模板,“内联测试”将在“文件测试”不会显示的地方吐出参数。到目前为止,我可以看到两种可能的解决方案,将参数值定义为“任务变量”并将其访问为$foo(示例内联测试),或者可能将参数作为参数传递给“文件测试”任务(示例文件测试2)。是否有一个选项可以从文件访问现有bash脚本中的yaml模板参数,而不是内联定义的参数

parameters:

  - name: webappName #webappName
    type: string
    default: webappName #set default for testing

  - name: resourceGroup #resourceGroup
    type: string
    default: resourceGroupName #set default for testing

  - name: subscription  #subscription 
    type: string
    default: s #set default for testing

  - name: preprod 
    type: boolean
    default: false  #default to false

  - name: env  
    type: string
    default: test

  - name: role  
    type: string
    default: s 

steps:

  - checkout: 'x' #the repo that test.sh lives in

  - task: Bash@3
    inputs:
      displayName: 'Inline test'
      targetType: 'inline'
      script: |
        echo "-----"
        echo ${{ parameters.webappName }}
        echo "-----"
        echo ${{ parameters.resourceGroup }}
        echo "-----"
        echo ${{ parameters.subscription }}
        echo "-----"
        echo ${{ parameters.preprod }}
        echo "-----"
        echo ${{ parameters.env }}
        echo "-----"
        echo ${{ parameters.role }}
        echo "-----"
        echo "##vso[task.setvariable variable=TESTROLE]${{ parameters.role }}"
        echo "-----"


  - task: Bash@3
    displayName: 'File test'
    inputs:
      filePath: './test.sh'

  - task: Bash@3
    displayName: 'File test 2'
    inputs:
      arguments: ${{ parameters.role }}
      filePath: './test.sh'

AzDev只是替换内联脚本中的值,因此
${{name}}
是某种占位符。AzDev不读取脚本文件,因此不会在那里替换值。 您可以将环境变量用于bash任务:


-任务:Bash@3
displayName:“文件测试2”
投入:
文件路径:'./test.sh'
环境:
应用程序角色:${{parameters.ROLE}
然后可以在脚本文件中使用此env变量:


echo$APP_角色

谢谢你的工作!