使用 CodePipeline 从多个源进行部署

Deploy from multiple sources with CodePipeline

我正在尝试在 AWS 上建立一个项目。我正在使用 CodePipeline 将我的代码部署到 Elastic Beanstalk,源代码来自 git 存储库。这很好用。

该项目有一些我不想包含在 git 存储库中的配置文件(密码和设置等)。由于它们不在 git 存储库中,因此它们未由 CodePipeline 部署。

如何在 CodePipeline 中包含配置文件而不将它们包含在 git 存储库中?

想法: 我尝试在 CodePipeline 中添加额外的 S3 源,其中包含配置文件。然后我不得不添加一个额外的部署操作来部署新的 S3 源。但是随后两个部署过程相互冲突,只有一个成功。如果我重试失败的那个,那么成功的那个部署的任何东西都会被再次删除。似乎不可能将两个输入工件(源)添加到单个部署操作。

与其将配置文件存储在存储库中,我建议使用 Elastic Beanstalk 具有的软件配置功能。

这里有一个解释如何做到这一点的相关答案:

如果你想将你的配置建模为一个单独的源操作,那么你要么必须有一个构建步骤将源工件合并到一个可部署的工件中,要么有一些独立的配置部署过程不会干扰您的应用程序部署(例如,在 Lambda 函数中复制到 S3,然后在您的应用程序启动时拉下配置)。

可以使用 .ebextensions 从 S3 存储桶或其他存储桶复制文件 部署期间的来源。亚马逊在他们的 documentation.

中对其进行了很好的描述

这是一个例子:

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: "s3"
          buckets: ["elasticbeanstalk-us-west-2-123456789012"]
          roleName:
            "Fn::GetOptionSetting":
              Namespace: "aws:autoscaling:launchconfiguration"
              OptionName: "IamInstanceProfile"
              DefaultValue: "aws-elasticbeanstalk-ec2-role"

files:
  "/tmp/data.json" :
    mode: "000755"
    owner: root
    group: root
    authentication: "S3Auth"
    source: https://s3-us-west-2.amazonaws.com/elasticbeanstalk-us-west-2-123456789012/data.json