amazon-web-services - AWS CodePipeline : How to pass output from CloudFormation action to a CodeBuild action

标签 amazon-web-services aws-cloudformation aws-codepipeline

我在 CloudFormation 模板中定义了一个 AWS CodePipeline。

管道的步骤之一是 CloudFormation 操作,它为我的应用程序构建测试环境。应用的弹性负载均衡器的 URL 是此模板中定义的输出之一。

如何访问此输出,以便我可以在下一步中使用它,这是一个将针对测试环境运行 api 测试的 CodeBuild 操作?

我可以在 CloudFormation Deploy 步骤中指定 OutputFileName,但 CodeBuild 步骤将需要 2 个输入工件、测试代码和 CloudFormation 输出文件,并且最多有 1 个输入工件.

我认为我可以有一个步骤将 CloudFormation 输出文件推送到 S3,以便 api 测试步骤可以访问它(或者只是将其作为 CloudFormation::Init 代码的一部分推送到 S3),但我我希望能够在 CodePipeline 步骤中配置更简单的东西(类似于 CloudFormation 中的 !ImportValue)。

我还认为我可以分配一个“测试网址”,例如http://test.myapp.com ,在 CloudFormation 步骤中,以便 api 测试始终针对该特定 url 运行,这将是一个不错的选择,除了我在测试之前动态地旋转测试环境(因为我不希望它的成本始终运行),并且我不确定在 api 测试开始运行时 DNS 是否已经传播。

提前致谢

启动测试环境的 CodePipeline CloudFormation 操作的定义

...
Name: DeployApplicationInfra
ActionTypeId:
  Category: Deploy
  Owner: AWS
  Version: 1
  Provider: CloudFormation
Configuration:
  ActionMode: CREATE_UPDATE
  Capabilities: CAPABILITY_IAM
  OutputFileName: test-application-infra-stack.outputs.json
  StackName: test-application-infra-stack
  RoleArn: !Ref CloudFormationServiceRoleArn
  TemplateConfiguration: AppInfraCfnTemplate::test-application-infra.config.json
  TemplatePath: AppInfraCfnTemplate::application-infra.yml
InputArtifacts:
  - Name: AppInfraCfnTemplate
OutputArtifacts:
  -  Name: TestApplicationInfraStackOutputs

定义用于运行 API 测试的 CodePipeline CodeBuild 操作

...
Name: RunApiTests
ActionTypeId:
  Category: Test
  Owner: AWS
  Version: 1
  Provider: CodeBuild
Configuration:
  ProjectName: !Ref ApiTestsBuildProject
InputArtifacts:
  - Name: AppSource

...
ApiTestsBuildProject:
  Type: AWS::CodeBuild::Project
  Properties:
    Name: companyinsight-api-tests-build
    Artifacts:
      Type: CODEPIPELINE
    Environment:
      ComputeType: BUILD_GENERAL1_SMALL
      Image: aws/codebuild/nodejs:8.11.0
      Type: LINUX_CONTAINER
    ServiceRole: !Ref CIServerBuildRoleArn
    Source:
      Type: CODEPIPELINE
      BuildSpec: !Sub |
        version: 0.2
        env:
          variables:
            BASE_URL: <Want to inject test app url here!!!>
        phases:
          install:
            commands:
              - npm install
          build:
            commands:
              - npm run api-test

最佳答案

关于amazon-web-services - AWS CodePipeline : How to pass output from CloudFormation action to a CodeBuild action,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51341699/

相关文章:

amazon-web-services - SSL23_GET_SERVER_HELLO :tlsv1 alert internal error

amazon-web-services - Terraform - 所需字符串列表(AWS 中的 cidr_blocks)

amazon-web-services - 无法执行 AWS Pipeline 错误 : "An error occurred (AccessDenied) when calling the PutObject operation: Access Denied"

aws-codepipeline - 即使测试通过后,代码构建仍显示正在进行中

amazon-web-services - 使用 CloudFormation 模板更新 CloudWatch 中现有日志的 logGroup 保留

amazon-web-services - 使用 Packer 构建时出现身份验证错误

python-3.x - 从 lambda 函数调用 cloudformation

amazon-web-services - 将 AWS CodePipeline 变量传递给操作

ubuntu - 使用cp在docker中复制多个文件

amazon-web-services - Cloudformation 模板禁用回滚嵌套模板