簡體   English   中英

AWS CodePipeline:如何將CloudFormation操作的輸出傳遞給CodeBuild操作

[英]AWS CodePipeline: How to pass output from CloudFormation action to a CodeBuild action

我在CloudFormation模板中定義了AWS CodePipeline。

管道的一個步驟是CloudFormation操作,它為我的應用程序構建測試環境。 應用程序的Elastic Load Balancer的URL是此模板中定義的輸出之一。

如何訪問此輸出,以便我可以在下一步中使用它,這是一個CodeBuild操作,將對測試環境運行api測試?

我可以在CloudFormation Deploy步驟中指定OutputFileName ,但CodeBuild步驟則需要2個輸入工件,測試代碼和CloudFormation輸出文件,並且最多有1個輸入工件。

我認為我可以有一個步驟將CloudFormation輸出文件推送到S3,以便api測試步驟可以訪問它(或者只是將其作為CloudFormation :: Init代碼的一部分推送到S3),但我希望我可以在CodePipeline步驟中配置更簡單的東西(類似於CloudFormation中的!ImportValue)。

我還認為我可以在CloudFormation步驟中分配一個'測試網址',例如http://test.myapp.com ,以便api測試始終針對該特定網址運行,這將是一個很好的選擇,除了我我正在測試之前動態調整測試環境(因為我不希望它的成本一直在運行),而且我不確定在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

不幸的是,目前沒有解決方法允許CodePipeline的CodeBuild有2個輸入工件。

我現在推薦的替代方法是在構建過程中從CLI調用aws cloudformation describe-stacks ,並從堆棧輸出中提取ELB主機名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM