如何在Azure Pipelines(YAML)中传递参数运行PowerShell部署脚本
Azure Pipeline 实现方案
1. 配置可自定义的入参
有两种常用方案可选,都支持运行前/运行时修改值:
方案A:使用流水线变量(适合需要后台预设默认值的场景)
在YAML头部定义变量,同时在Azure DevOps流水线配置页开启「允许用户在运行此管道时重写此值」:
variables: # 应用名默认值,运行时可修改 - name: ApplicationName value: 'HelloWorldApp' # 环境参数,多个用英文逗号分隔,单个直接写环境名即可 - name: Environment value: 'DEV,SIT,UAT'
方案B:使用运行时参数(适合运行时手动选择的场景)
直接在YAML头部定义参数,运行流水线时会自动弹出参数填写/选择框,还可以限制可选值避免输入错误:
parameters: - name: ApplicationName type: string default: 'HelloWorldApp' # 单选环境的配置 - name: Environment type: string default: DEV values: - DEV - SIT - UAT - PROD # 多选环境的配置(和单选二选一即可) - name: MultiEnvironment type: object default: - DEV - SIT
2. 调用PowerShell脚本传递参数
使用Azure PowerShell任务引用Repo中的脚本,把上面定义的变量/参数传入即可,完全复刻本地执行逻辑:
对应变量方案的任务配置
- task: AzurePowerShell@5 inputs: azureSubscription: '替换为你的Azure服务连接名称' # 替换为脚本在你Repo中的实际路径 ScriptPath: '$(Build.SourcesDirectory)/DeployApps.ps1' # 逗号分隔的环境字符串转数组后传入,和本地声明数组的逻辑完全一致 ScriptArguments: '-ApplicationName $(ApplicationName) -Environment @($(Environment).Split(','))' azurePowerShellVersion: 'LatestVersion'
对应参数方案的任务配置
- task: AzurePowerShell@5 inputs: azureSubscription: '替换为你的Azure服务连接名称' ScriptPath: '$(Build.SourcesDirectory)/DeployApps.ps1' # 多选环境用这段 ScriptArguments: '-ApplicationName ${{ parameters.ApplicationName }} -Environment ${{ parameters.MultiEnvironment }}' # 单选环境用这段 # ScriptArguments: '-ApplicationName ${{ parameters.ApplicationName }} -Environment @(${{ parameters.Environment }})' azurePowerShellVersion: 'LatestVersion'
补充说明
- 单环境场景不需要额外调整逻辑,无论是变量传入单个值还是单选参数,最终传给脚本的都是符合要求的单元素数组
- 所有参数值都可以在运行流水线时手动修改,不需要改动YAML代码
内容的提问来源于stack exchange,提问作者hitman126
相关产品推荐
相关产品推荐

