Azure Pipelines - 从 python 脚本文件到管道变量的输出变量

Scu*_*der 3 yaml azure-devops azure-pipelines

我已经尝试了 Stackoverflow 上的几篇文章和线程,但似乎没有任何进展。我试图从 YAML 步骤中调用的 .py 文件中获取一个变量,并将该变量设置为全局使用。

在我的 。我有py 文件

print(f'##vso[task.setvariable variable=AMLPipelineId;isOutput=true]{pipelineId}')
Run Code Online (Sandbox Code Playgroud)

然后在我的 YAML 管道步骤中我有

- task: AzurePowerShell@5
  displayName: 'Run AML Pipeline'
   inputs:
     azureSubscription: '$(azureSubscription)'
     ScriptType: 'InlineScript'
     name: AmlPipeline
     azurePowerShellVersion: 'LatestVersion'
     pwsh: true
     Inline: |
             $username = "$(ARM_CLIENT_ID)"
             $password = "$(ARM_CLIENT_SECRET)"
             $tenantId = "$(ARM_TENANT_ID)"
                  
             python $(Pipeline.Workspace)/AML_Pipeline/build_aml_pipeline.py --wsName $(wsName) --resourceGroup $(ResourceGroupName) --subscriptionId $(subId)

                 
             $MLPipelineId = $AmlPipeline.AMLPipelineId
Run Code Online (Sandbox Code Playgroud)

但这个变量似乎是空的。我知道还有其他方法可以使用“设置变量”,但这是我最新的尝试,例如print('##vso[task.setvariable variable=version;]%s' % (version))

我目前采用的方法:https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables ?view=azure-devops&tabs=yaml%2Cbatch

小智 5

对于每个为此苦苦挣扎的人来说,这是一个非常简单的例子。就我的口味而言,该文档有点缺乏。正如@qbik所说,不要在同一步骤中设置和使用变量,而是将其设置为单独的步骤。

设置变量.py

if __name__ == '__main__':
    # set name of the variable
    name = 'COLOR'
    # set value of the variable
    value = 'red'
    # set variable
    print(f'##vso[task.setvariable variable={name};]{value}')
Run Code Online (Sandbox Code Playgroud)

azure-pipelines.yml

trigger:
- main

pool:
  vmImage: ubuntu-latest

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.9'
  displayName: 'Use Python 3.9'
# run the script to set the variable
- task: PythonScript@0
  inputs:
    scriptSource: filePath
    scriptPath: set_variable.py
# now you can use the variable in the next step
- bash: echo my favorite color is: $(COLOR)
Run Code Online (Sandbox Code Playgroud)

现在,从技术上讲,您可以在 python 中完成各种很酷的事情,然后按照以下步骤设置和引用变量。就我而言,我必须根据管道中之前设置的 id 从 JSON/YAML 文件中提取特定的包版本号,并将该信息解析为 docker 构建的参数。希望能帮助其他人偶然发现这个答案,寻找一个最小的工作示例:)