Amazon cloudformation 从codepipeline中的上一步设置CodeBuild env var
我有以下代码管道(cloudformation模板片段) 我的Amazon cloudformation 从codepipeline中的上一步设置CodeBuild env var,amazon-cloudformation,aws-codepipeline,aws-codebuild,Amazon Cloudformation,Aws Codepipeline,Aws Codebuild,我有以下代码管道(cloudformation模板片段) 我的BuildDeployWebappTest步骤需要在上一个ExecuteChangeSet步骤中创建的s3存储桶的名称 如您所见,BuildDeployWebappTest步骤使用了WebappCodeBuildProjectTestStageCodeBuildProject配置。WEBAPP\u S3\u BUCKETenv变量需要设置为在ExecuteChangeSet步骤中创建的BUCKET名称的值 我怎样才能做到这一点 目前,
BuildDeployWebappTest
步骤需要在上一个ExecuteChangeSet
步骤中创建的s3存储桶的名称
如您所见,BuildDeployWebappTest步骤使用了WebappCodeBuildProjectTestStage
CodeBuildProject配置。WEBAPP\u S3\u BUCKET
env变量需要设置为在ExecuteChangeSet
步骤中创建的BUCKET名称的值
我怎样才能做到这一点
目前,我必须在这个管道之外创建S3 bucket,并将S3 bucket名称作为CloudFormation参数(“code>TestStageS3Bucket)硬编码到下面的管道中
ExecuteChangeSet
生成名为WebAppBucket
的CloudFormation输出。如果需要,我可以导出它
我知道CodeBuild支持多个InputArtifacts
,但我不知道如何在CodeBuild项目配置或CodeBuildSpec.yml文件本身中引用CloudFormationOutputArtifacts
...
WebappCodeBuildProjectTestStage:
Type: AWS::CodeBuild::Project
Properties:
Artifacts:
Type: CODEPIPELINE
Environment:
ComputeType: BUILD_GENERAL1_SMALL
PrivilegedMode: false
Type: LINUX_CONTAINER
Image: !Ref CodeBuildImage
EnvironmentVariables:
- Name: WEBAPP_S3_BUCKET
Value: !Ref TestStageS3Bucket
- Name: APP_STAGE
Value: test
- Name: ANGULAR_BUILD
Value: test
ServiceRole: !Ref CodeBuildRole
Source:
Type: CODEPIPELINE
BuildSpec: !Ref WebappBuildspecPath
TimeoutInMinutes: !Ref BuildTimeout
...
Pipeline:
Type: AWS::CodePipeline::Pipeline
Properties:
ArtifactStore:
Location: !Ref 'ArtifactStoreBucket'
Type: S3
DisableInboundStageTransitions: []
Name: !Ref AWS::StackName
RoleArn: !GetAtt PipelineRole.Arn
Stages:
- Name: Source
Actions:
- Name: Source
ActionTypeId:
Category: Source
Owner: ThirdParty
Provider: GitHub
Version: '1'
OutputArtifacts:
- Name: MyAppCode
Configuration:
Owner: !Ref GithubOrg
Repo: !Select [ 0, !Split [ '--', !Ref 'AWS::StackName' ] ]
PollForSourceChanges: false
Branch: !Select [ 1, !Split [ '--', !Ref 'AWS::StackName' ] ]
OAuthToken: !Ref GithubOAuthToken
RunOrder: 1
- Name: DeployTestResources
Actions:
- Name: CreateChangeSet
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CloudFormation
Version: '1'
InputArtifacts:
- Name: MyAppCode
Configuration:
ActionMode: CHANGE_SET_REPLACE
RoleArn: !GetAtt CFNRole.Arn
Capabilities: CAPABILITY_IAM
StackName: !Sub "${AWS::StackName}--test--gen"
ChangeSetName: !Sub "${AWS::StackName}--test--changeset"
TemplatePath: MyAppCode::aws/cloudformation/template.yml
TemplateConfiguration: !Sub "MyAppCode::${TestCloudFormationTemplateParameters}"
RunOrder: 1
- Name: ExecuteChangeSet
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CloudFormation
Version: '1'
Configuration:
ActionMode: CHANGE_SET_EXECUTE
RoleArn: !GetAtt CFNRole.Arn
StackName: !Sub "${AWS::StackName}--test--gen"
ChangeSetName: !Sub "${AWS::StackName}--test--changeset"
OutputFileName: TestOutput.json
OutputArtifacts:
- Name: DeployTestResourcesOutput
RunOrder: 2
- Name: BuildDeployWebappTest
Actions:
- Name: CodeBuild
InputArtifacts:
- Name: MyAppCode
ActionTypeId:
Category: Build
Owner: AWS
Provider: CodeBuild
Version: '1'
Configuration:
ProjectName: !Ref WebappCodeBuildProjectTestStage
RunOrder: 1