将对象传递到 Azure DevOps 管道中的模板中

问题描述 投票:0回答:1

我正在尝试重构一个在大约 100 个帐户上运行的 Azure DevOps 作业,目前这些是管道中几乎相同的单独任务。他们碰巧在 AWS 中调用了一些 Cloud Formation,但这并不重要。

我想在管道中有一个模板参数,例如:-

parameters:
- name: stackparams
  type: object
  default:
    - displayname: AWS Test User Account
      awscredentials: TESTAWS-appaccounttest1-AzureDevOps
      templatefile: ./Test/TestApp/SwitchRolesGroupsPolicies.yml
      templateparametersfile: ./Test/LZTestApp/demoparams.json
    - displayname: Second Account
      awscredentials: TESTAWS-appaccounttest2-AzureDevOps
      templatefile: ./Test/Something/SwitchRolesGroupsPolicies.yml
      templateparametersfile: ./Test/Something/demoparams.json

在模板中类似:-

parameters:
- name: stackparams
  type: object

steps:
- ${{ each stackparam in parameters.stackparams }}:
  - checkout: self
  - task: AWSShellScript@1
    inputs:
      awsCredentials: ${{ stackparams.awscredentials }}
      regionName: 'eu-west-1' 
      scriptType: 'inline'
      inlineScript: |
        echo "\$STACKPARAMS_DISPLAYNAME: $STACKPARAMS_DISPLAYNAME"
    displayName: 'This is a test - ${{ stackparams.displayname }}'

但是,我不知道这是否可能,而且关于这样做的文档很少。我暂时仅用 AWSShellScript 替换了 Cloud Formation,只是为了进行概念验证。我目前遇到的错误是:-

> /Templates/CfnUpdateStack/CfnUpdateStack.yml (Line: 25, Col: 23):
> Unrecognized value: 'stackparams'. Located at position 1 within
> expression: stackparams.awscredentials. For more help, refer to
> https://go.microsoft.com/fwlink/?linkid=842996
> /Templates/CfnUpdateStack/CfnUpdateStack.yml (Line: 33, Col: 18):
> Unrecognized value: 'stackparams'. Located at position 48 within
> expression: format('Collect Cost Optimisation Data - {0}',
> stackparams.displayname). For more help, refer to
> https://go.microsoft.com/fwlink/?linkid=842996
> /Templates/CfnUpdateStack/CfnUpdateStack.yml (Line: 25, Col: 23):
> Unrecognized value: 'stackparams'. Located at position 1 within
> expression: stackparams.awscredentials. For more help, refer to
> https://go.microsoft.com/fwlink/?linkid=842996
> /Templates/CfnUpdateStack/CfnUpdateStack.yml (Line: 33, Col: 18):
> Unrecognized value: 'stackparams'. Located at position 48 within
> expression: format('Collect Cost Optimisation Data - {0}',
> stackparams.displayname). For more help, refer to
> https://go.microsoft.com/fwlink/?linkid=842996
azure-devops azure-pipelines
1个回答
4
投票

是的,这是可能的。你就快到了。您的模板中有一个小错误。

${{ stackparams.awscredentials }}
应该是
${{ stackparam.awscredentials }}

并且如果您使用相同的源存储库,则无需在循环中包含

- checkout: self
。因为任务在同一个作业中运行。源存储库只能签出一次。请参阅下面的完整示例:

#azure-pipeline.yaml

parameters:
- name: stackparams
  type: object
  default:
    - displayname: AWS Test User Account
      awscredentials: TESTAWS-appaccounttest1-AzureDevOps
      templatefile: ./Test/TestApp/SwitchRolesGroupsPolicies.yml
      templateparametersfile: ./Test/LZTestApp/demoparams.json
    - displayname: Second Account
      awscredentials: TESTAWS-appaccounttest2-AzureDevOps
      templatefile: ./Test/Something/SwitchRolesGroupsPolicies.yml
      templateparametersfile: ./Test/Something/demoparams.json

trigger: none
pool: 
  vmImage: windows-latest

steps:
- template: stepsTemplate.yml
  parameters:
    stackparams: ${{parameters.stackparams}}  #pass the parameters to template parameters

--

#stepsTemplate.yml

parameters:
- name: stackparams
  type: object

steps:
- ${{ each stackparam in parameters.stackparams }}:
  
  - task: AWSShellScript@1
    inputs:
      awsCredentials: ${{ stackparam.awscredentials }}
      regionName: 'eu-west-1' 
      scriptType: 'inline'
      inlineScript: |
        echo "\$STACKPARAMS_DISPLAYNAME: $STACKPARAMS_DISPLAYNAME"
    displayName: 'This is a test - ${{ stackparam.displayname }}'
© www.soinside.com 2019 - 2024. All rights reserved.