在Azure管道中使用Azure Devops变量.Yml powershell脚本



我想我可能用错了方法。我有一个蓝色的管道。我正在使用Terraform通过该管道部署基础设施。到目前为止,管道在环境中安装Terraform没有任何问题。我试图使用Powershell脚本运行terraform init,并且遇到了一个错误。在Powershell脚本命令中,我试图引用access_keysecret_key的管道变量。当执行管道时,我得到错误no valid credential sources for S3 Backend found.这很可能发生,因为我引用了我错误设置的变量。我还在我的Terraform变量文件中设置了变量,但我认为这可能不是必要的,因为我试图从管道变量中读取。下面是azure-pipelines.yml的代码和我在管道输出中得到的错误。如有任何建议,不胜感激。

azure-pipelines.yml

trigger:
- master
pool:
vmImage: ubuntu-latest
stages:
- stage: TerraformInstall
displayName: Terraform
jobs:
- job: InstallTerraform
displayName: Install Terraform
steps:
- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-installer.TerraformInstaller@0
- stage: Init
displayName: Init
jobs:
- job: init
displayName: Terraform init
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: 'terraform init -var access_key=${env:ACCESS_KEY} -var secret_key=${env:SECRET_KEY}'

误差

==============================================================================
Task         : PowerShell
Description  : Run a PowerShell script on Linux, macOS, or Windows
Version      : 2.200.0
Author       : Microsoft Corporation
Help         : https://learn.microsoft.com/azure/devops/pipelines/tasks/utility/powershell
==============================================================================
Generating script.
========================== Starting Command Output ===========================
/usr/bin/pwsh -NoLogo -NoProfile -NonInteractive -Command . '/home/vsts/work/_temp/6e333d67-4373-4ae7-bc4b-96cc38572961.ps1'
Initializing the backend...
╷
│ Error: error configuring S3 Backend: no valid credential sources for S3 Backend found.
│ 
│ Please see https://www.terraform.io/docs/language/settings/backends/s3.html
│ for more information about providing credentials.
│ 
│ Error: NoCredentialProviders: no valid providers in chain. Deprecated.
│   For verbose messaging see aws.Config.CredentialsChainVerboseErrors
│ 
│ 
│ 
╵
##[error]PowerShell exited with code '1'.
Finishing: PowerShell

如果不了解如何设置变量,就很难给出完整的解决方案。

首先,我不认为Terraform CLI命令Init接受输入变量(如果我错了请纠正我)。在这里做一个猜测,您将传递ACCESS_KEYSECRET_KEY与您的Terraform后端提供商一起使用。如果是这种情况,请参阅StackOver flow关于如何做到这一点的答案。总结一下答案

  1. 创建一个单独的.tfvars文件,存储将用于后端提供程序的变量

  2. 将.tfvars文件与TerraformInit一起使用,如下所示:

    terraform init -backend-config=backend.tfvars

  3. 除了

Terraform之外,如果你正在使用Azure DevOps Library变量组,你可以使用下面的示例将变量传递给脚本。同样,我不认为这将帮助您初始化您的Terraform。

注意:你可能需要根据你代理的操作系统来调整报价。

本例假设您已经创建了一个名为YourVariableGroupNameHere的ADO库变量组,并在该组中创建了两个名为ACCESS_KEY和SECRET_KEY的变量。

- stage: Init
displayName: Init
jobs:
- job: init
variables:
- group: YourVariableGroupNameHere  
displayName: Terraform init
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: 'terraform init -var access_key=$(ACCESS_KEY) -var secret_key=$(SECRET_KEY)'

最新更新