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