我试图将www.example.com文件的输出值重定向outputs.tf到与azure-pipelines. yaml不同的文件。为了实现这一点,我在管道yaml. PFB上使用了AzurePowershell任务。
- stage: terraform_output
dependsOn: ["infrastructure_creation"]
jobs:
- job: output
pool: Ansible
steps:
- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-installer.TerraformInstaller@0
inputs:
terraformVersion: '1.2.3'
- task: TerraformTaskV3@3
inputs:
provider: 'azurerm'
command: 'init'
workingDirectory: '$(System.DefaultWorkingDirectory)/VM'
environmentServiceNameAzureRM: 'xxxxxx'
backendServiceArm: 'xxxxxx'
backendAzureRmResourceGroupName: 'xxxxxxxx'
backendAzureRmStorageAccountName: 'xxxxxx'
backendAzureRmContainerName: 'xxxxx'
backendAzureRmKey: 'xxxxxxxx'
- task: TerraformTaskV3@3
inputs:
provider: 'azurerm'
command: 'output'
workingDirectory: '$(System.DefaultWorkingDirectory)/VM'
environmentServiceNameAzureRM: 'xxxxxxxx'
backendServiceArm: 'xxxxxxxx'
backendAzureRmResourceGroupName: 'xxxxxxx'
backendAzureRmStorageAccountName: 'xxxxxxx'
backendAzureRmContainerName: 'xxxx'
backendAzureRmKey: 'xxxxxxx'
- task: AzurePowerShell@5
inputs:
azureSubscription: 'xxxxxxxx'
ScriptType: 'InlineScript'
Inline: |
(TerraformOutput.jsonOutputVariablesPath) | Out-String | ConvertFrom-Json
foreach(
(
($prop.Value.value)") }
Write-Output
(System.DefaultWorkingDirectory)\ansible-roles\inventory\output.json
workingDirectory: '$(System.DefaultWorkingDirectory)/VM'
preferredAzurePowerShellVersion: '9.5.0'
但这不起作用。得到下面的错误。
Exception: /home/vsts-agent/ansibleadoagent/_work/_tasks/AzurePowerShell_72a1931b-effb-4d2e-8fd8-f8472a07cb62/5.218.0/InitializeAz.ps1:38
Line |
38 | throw ("Could not find the module Az.Accounts with given version. …
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Could not find the module Az.Accounts with given version. If the module
| was recently installed, retry after restarting the Azure Pipelines task
| agent.
我们正在使用托管代理。帐户模块已正确安装&代理已重新启动。
为了检查脚本是否正确,我尝试将“Hello-World”回显到所需的文件中。即使stage成功,output.json文件也从未被修改/更新。
Inline: |
Write-Output "Hello-World" > $(System.DefaultWorkingDirectory)\ansible-roles\inventory\output.json
需要帮助来解决这个问题。
1条答案
按热度按时间oo7oh9g91#
看起来你正在使用ansible并试图输出ansible将使用的json文件。我以前做过这个。你可以从Terraform代码中直接完成这个任务,而无需发布输出并尝试使用powershell解析它。只需在Terraform中生成一个本地对象,其对象结构与JSON/中所需的相同。YAML,然后使用文件提供程序保存一个文件,其中内容设置为jsonencode()方法,其中包含本地对象。这是一个简单得多的解决方案。
顺便说一下,ansible也支持yaml清单文件,所以你也可以使用yamlencode方法。这是我在集成ansible和Terraform时使用的方法。
然后,您可以使用Azure Devops copyfiles任务或发布管道工件在作业之间传递文件。我已经用td计划文件做了一个视频,但同样的方法可以用于文件提供程序生成的文件。