Azure DevOps执行Pulumi preview报错:Azure CLI订阅获取失败
问题原因
AzureCLI@2任务的登录会话仅在当前任务进程内有效,后续的Pulumi@1任务无法复用该会话,导致Pulumi调用Azure CLI时提示未登录。
解决方案
提供两种可行的修改方式,任选其一即可:
方式一:在AzureCLI@2任务内直接执行pulumi preview
将Pulumi预览操作合并到已完成Azure登录的CLI任务中,直接继承认证上下文:
trigger: - main variables: - name: one value: initialValue pool: vmImage: ubuntu-latest steps: - task: UsePythonVersion@0 inputs: versionSpec: '3.12.1' displayName: 'set Python version' - script: | python -m pip install --upgrade pip pip install -r requirements.txt displayName: 'Install dependencies' - script: 'curl -fsSL https://get.pulumi.com | sh' displayName: 'Installing pulumi' - script: 'pulumi login' displayName: 'Authenticating pulumi' env: PULUMI_ACCESS_TOKEN: $(PULUMI_ACCESS_TOKEN) # 合并Azure订阅设置与Pulumi预览到同一CLI任务 - task: AzureCLI@2 inputs: azureSubscription: '<subscription from service connection>' scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | az account set --subscription <sub id> # 将Pulumi安装路径加入环境变量,确保能找到命令 export PATH=$PATH:$HOME/.pulumi/bin pulumi preview --stack dev
方式二:传递Azure认证变量给Pulumi任务
在AzureCLI@2任务中导出认证所需的环境变量,供后续Pulumi任务直接使用:
trigger: - main variables: - name: one value: initialValue pool: vmImage: ubuntu-latest steps: - task: UsePythonVersion@0 inputs: versionSpec: '3.12.1' displayName: 'set Python version' - script: | python -m pip install --upgrade pip pip install -r requirements.txt displayName: 'Install dependencies' - script: 'curl -fsSL https://get.pulumi.com | sh' displayName: 'Installing pulumi' - script: 'pulumi login' displayName: 'Authenticating pulumi' env: PULUMI_ACCESS_TOKEN: $(PULUMI_ACCESS_TOKEN) - task: AzureCLI@2 inputs: azureSubscription: '<subscription from service connection>' scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | az account set --subscription <sub id> # 获取Azure访问令牌并设置为流水线变量 AZURE_TOKEN=$(az account get-access-token --query accessToken -o tsv) echo "##vso[task.setvariable variable=AZURE_ACCESS_TOKEN]$AZURE_TOKEN" echo "##vso[task.setvariable variable=AZURE_SUBSCRIPTION_ID]<sub id>" - task: Pulumi@1 inputs: command: 'preview' stack: 'dev' env: # 传递认证变量给Pulumi,替代Azure CLI登录 AZURE_ACCESS_TOKEN: $(AZURE_ACCESS_TOKEN) AZURE_SUBSCRIPTION_ID: $(AZURE_SUBSCRIPTION_ID)
额外说明
- 无需同时设置
PULUMI_ACCESS_TOKEN和pulumi.access.token,保留其中一个即可,Pulumi会优先读取环境变量PULUMI_ACCESS_TOKEN。 - 确保
<subscription from service connection>和<sub id>替换为你实际的服务连接名称和订阅ID。
内容的提问来源于stack exchange,提问作者boybakal
相关产品推荐
相关产品推荐

