我所建议的是让你的环境变量存储在EC2参数存储中,你可以在你的CodeBuild buildspec.yml中引用它。
要在您的情况下使用CodePipeline,还需要针对每个环境使用不同的管道和不同的CodeBuild项目。
例如,假设您存放在EC2参数存储(或AWS SSM)以下变量,
DEVELOPMENT_DB_PASSWORD='helloworld'
STAGING_DB_PASSWORD='helloworld'
PRODUCTION_DB_PASSWORD='helloworld'
在你CodeBuild项目中,您必须指定环境变量(例如$ENVIRONMENT=DEVELOPMENT
)。不要为此使用buildspec
。您可以使用AWS Console或CloudFormation。
然后,您可以buildspec.yml
是这样的:
env:
parameter-store:
DEVELOPMENT_DB_PASS: "DEVELOPMENT_DB_PASSWORD"
STAGING_DB_PASS: "DEVELOPMENT_DB_PASSWORD"
PRODUCTION_DB_PASS: "DEVELOPMENT_DB_PASSWORD"
这些变量然后在serverless.yml访问使用${env:ENVIRONMENT}_DB_PASS
像这样:
provider:
environment:
DB_PASS: ${env:${env:ENVIRONMENT}_DB_PASS}
所有你现在要做的就是创建这三个CodePipeline,每个CodePipeline都有自己的CodeBuild项目(每个项目使用不同的$ENVIRONMENT
)。
你有没有读过https://aws.amazon.com/blogs/devops/create-multiple-builds-from-the-same-source-using-different-aws-codebuild-build-specification-files/?它看起来与你想要做的非常相似。 – aderubaru