Azure DevOps构建流水线中如何将用户输入的UserStory传入Python脚本
Azure DevOps构建流水线参数传递问题解决
问题出在YAML脚本里的参数引用语法错误,Azure DevOps中引用预先定义的parameters参数,必须使用${{ parameters.UserStory }}格式,而不是直接写${UserStory},这才导致参数值无法正确传递。
下面提供两种可行的解决方法:
方法一:修正环境变量传递方式
修改后的YAML配置如下:
trigger: - main pool: vmImage: 'ubuntu-latest' parameters: - name: UserStory displayName: Enter User Story ID. type: string default: '' steps: - task: UsePythonVersion@0 inputs: versionSpec: '3.x' addToPath: true - script: | echo "Running p1.py with User Story ID ${{ parameters.UserStory }}" export USER_STORY_ID="${{ parameters.UserStory }}" python p1.py displayName: 'Run p1.py'
Python脚本无需修改,依然通过os.getenv读取环境变量即可。
方法二:直接通过命令行参数传递(更直观)
这种方式不需要依赖环境变量,直接把参数作为命令行参数传给Python脚本:
修改后的YAML配置
trigger: - main pool: vmImage: 'ubuntu-latest' parameters: - name: UserStory displayName: Enter User Story ID. type: string default: '' steps: - task: UsePythonVersion@0 inputs: versionSpec: '3.x' addToPath: true - script: | echo "Running p1.py with User Story ID ${{ parameters.UserStory }}" python p1.py "${{ parameters.UserStory }}" displayName: 'Run p1.py'
对应的Python脚本
import sys print('Hello, world!') # 读取命令行参数,sys.argv[0]是脚本本身,sys.argv[1]是传入的UserStory值 user_story2 = sys.argv[1] if len(sys.argv) > 1 else None print(user_story2)
两种方法修改完成后,重新运行构建流水线并输入UserStory ID,就能看到参数值被正确传递并输出了。
内容的提问来源于stack exchange,提问作者Salman
相关产品推荐
相关产品推荐

