如何处理AWS CodePipelines的配置文件?

时间:2017-09-25 16:17:01

标签: git amazon-web-services staging aws-codepipeline aws-codebuild

我是一群使用Git作为版本控制的开发人员。

我们希望至少有3个阶段的开发过程:分段,开发和生产。

这些阶段之间唯一应该改变的是单个配置文件,告诉无服务器框架命名lambda函数的内容,S3存储桶以及需要为CloudFormation堆栈创建的任何其他资源。

然而,这使得源代码控制更加困难。如果我们将配置文件直接放在源代码中,那么我们必须确保在提交/推送到源时不会覆盖这些文件。但CodeBuild必须以某种方式访问​​它,并且必须确保为指定的阶段获取正确的配置文件。

我更希望解决这个问题,这是AWS生态系统的一部分。

2 个答案:

答案 0 :(得分:3)

我建议将您的环境变量存储在EC2 Parameter Store中,您可以在CodeBuild buildspec.yml中引用它。

要在您的案例中使用CodePipeline,您还需要为每个环境使用不同的管道和不同的CodeBuild项目。

例如,假设您将以下变量存储在EC2 Parameter Store(或AWS SSM)中,

DEVELOPMENT_DB_PASSWORD='helloworld'
STAGING_DB_PASSWORD='helloworld'
PRODUCTION_DB_PASSWORD='helloworld'

在CodeBuild项目中,您必须将环境指定为变量(例如$ENVIRONMENT=DEVELOPMENT)。不要使用buildspec。您可以使用AWS控制台或CloudFormation。

然后,您的buildspec.yml可能如下所示:

env:
  parameter-store:
    DEVELOPMENT_DB_PASS: "DEVELOPMENT_DB_PASSWORD"
    STAGING_DB_PASS: "DEVELOPMENT_DB_PASSWORD"
    PRODUCTION_DB_PASS: "DEVELOPMENT_DB_PASSWORD"

然后可以使用${env:ENVIRONMENT}_DB_PASS在您的serverless.yml中访问这些变量,如下所示:

provider:
  environment:
    DB_PASS: ${env:${env:ENVIRONMENT}_DB_PASS}

现在你要做的就是创建这三个CodePipelines,每个CodePipelines都有自己的CodeBuild项目(每个项目使用不同的$ENVIRONMENT)。

答案 1 :(得分:2)

为什么不使用三个配置文件?每个阶段一个。