【问题标题】:Deploy from multiple sources with CodePipeline使用 CodePipeline 从多个来源进行部署
【发布时间】:2017-12-18 00:43:37
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: amazon-web-services aws-codepipeline


    【解决方案1】:

    可以使用.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
    

    【讨论】:

    • 我们是否应该让 S3 中的文件公开可用以使其正常工作? (就像任何人都可以直接从 url 访问)?
    【解决方案2】:

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

    这是一个相关的答案,解释了如何做到这一点:https://stackoverflow.com/a/17878600/7433105

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 2016-12-28
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多