[英]AWS CodePipeline: Get CloudFormation outputs in 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.