我的团队正在使用Azure Devops管道将Cloudformation堆栈部署到AWS。我们有重复使用的常见Cloudformation模板(例如,一个Lambda.yml Cloudformation模板可重复使用以部署多个Lambda函数)。
与此同时,我正在设置一个步进功能来协调逻辑流程。步骤功能步骤需要引用基础结构各个部分的ARN(在此示例中,重点是lambda函数)。
由于Lambda.yml被重用,因此每次任务重用模板部署新的lambda时,输出变量都会被覆盖。我想在Azure Devops中的变量或参数中捕获每个任务之后的输出。我看了无数的示例和有关变量的文档,但我无法使其正常工作。这里列出了Cloudformation模板和部署脚本的相关部分(YAML格式)。
Lambda.yml(Cloudformation模板)
FFI return struct/union is not implemented
Deploy.yml(Azure Devops管道部署)
AWSTemplateFormatVersion: '2010-09-09'
Description: Template for Lambda function.
Parameters:
FunctionName:
Description: The name of the Lambda function
Type: String
Resources:
LambdaFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: !Ref FunctionName
.....
Outputs:
LambdaFunctionName:
Description: Lambda function name
Value: !Ref LambdaFunction
LambdaFunctionARN:
Description: Lambda ARN
Value:
Fn::GetAtt:
- LambdaFunction
- Arn
答案 0 :(得分:1)
您可以尝试在设置变量的位置命名step,然后将step的名称用作变量名的一部分。您甚至可以将变量名定义为模板参数,以便每次获得唯一的名称。在代码中可能看起来像这样:
template.yaml
class Player:
def __init__(self, hp, image):
self.hp = hp
self.image = image #creating an instance variable
self.pic = ImageTk.PhotoImage(self.image) #making an photoimage instance
self.cv = Map.create_image(updatex, y, image = self.pic) #passing the photo image instance
self.pic.image = self.pic #keeping a reference to the image
和主文件
parameters:
- name: name
type: string
default: 'lambdaNumbertOneFunctionName'
- name: arn
type: string
default: 'lambdaNumberOneFunctionArn'
- name: stepName
type: string
default: 'StepOne'
- name: value
type: string
default: 'testValue'
steps:
- bash: |
echo "##vso[task.setvariable variable=${{ parameters.name }};isOutput=true]${{ parameters.value }}"
echo "##vso[task.setvariable variable=${{ parameters.arn }};isOutput=true]${{ parameters.value }}"
echo "##vso[task.setvariable variable=Test;isOutput=true]${{ parameters.value }}"
echo "##vso[task.setvariable variable=Test2;isOutput=true]Yesy2"
name: ${{ parameters.stepName }}
- script: |
echo $(${{ parameters.stepName }}.${{ parameters.name }})
echo $(${{ parameters.stepName }}.${{ parameters.arn }})
echo $(${{ parameters.stepName }}.Test)
echo $(${{ parameters.stepName }}.Test2)
为此,我得到了
jobs:
- job: myJob
timeoutInMinutes: 10
pool:
vmImage: 'ubuntu-16.04'
steps:
- template: template.yaml
parameters:
name: 'lambdaNumbertOneFunctionName'
arn: 'lambdaNumberOneFunctionArn'
value: 'value-1'
stepName: 'StepOne'
- template: template.yaml
parameters:
name: 'lambdaNumberTwoFunctionName'
arn: 'lambdaNumberTwoFunctionArn'
value: 'value-2'
stepName: 'StepTwo'
- script: |
echo 'lambdaNumbertOneFunctionName - $(StepOne.lambdaNumbertOneFunctionName)'
echo 'lambdaNumberOneFunctionArn - $(StepOne.lambdaNumberOneFunctionArn)'
echo 'lambdaNumberTwoFunctionName - $(StepTwo.lambdaNumberTwoFunctionName)'
echo 'lambdaNumberTwoFunctionArn - $(StepTwo.lambdaNumberTwoFunctionArn)'
希望我能理解您和您的问题,并且能解决问题:)