Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用CodeDeploy和CI工具部署分布式应用程序的好方法是什么?_Amazon Web Services_Deployment_Cloud_Travis Ci_Aws Code Deploy - Fatal编程技术网

Amazon web services 使用CodeDeploy和CI工具部署分布式应用程序的好方法是什么?

Amazon web services 使用CodeDeploy和CI工具部署分布式应用程序的好方法是什么?,amazon-web-services,deployment,cloud,travis-ci,aws-code-deploy,Amazon Web Services,Deployment,Cloud,Travis Ci,Aws Code Deploy,在使用AWS时,通过AWS CodeDeploy将应用程序部署到新创建的实例似乎是一种不错的方法。这项工作如下: 为应用程序设置自动缩放组 为自动伸缩组编写一个用户数据bash脚本,该组从S3中提取CodeDeploy代理,安装并启动它 设置部署到自动缩放组的CodeDeploy部署组 现在,当应用程序包(例如jar或debian包)部署到部署组时,它将自动部署到自动扩展组中启动的新实例 我的问题是:这种部署策略如何与Travis CI这样的CI工具相匹配 具体而言: CodeDeploy如何

在使用AWS时,通过AWS CodeDeploy将应用程序部署到新创建的实例似乎是一种不错的方法。这项工作如下:

  • 为应用程序设置自动缩放组
  • 为自动伸缩组编写一个用户数据bash脚本,该组从S3中提取CodeDeploy代理,安装并启动它
  • 设置部署到自动缩放组的CodeDeploy部署组
  • 现在,当应用程序包(例如jar或debian包)部署到部署组时,它将自动部署到自动扩展组中启动的新实例

    我的问题是:这种部署策略如何与Travis CI这样的CI工具相匹配

    具体而言:

    • CodeDeploy如何获取由像Travis CI这样的CI工具构建的包?构建作业是否需要将包上载到S3
    • 如何使用CodeDeploy逐步部署应用程序(例如,一次部署一个实例)
    • 此部署策略是否要求关闭并替换每个正在运行的实例,或者是在现有实例上部署应用程序的新版本?如果是前者,机器IP地址将在部署期间发生变化,那么其他服务如何发现新部署的应用程序(即没有硬编码的IP地址)
      • tl;dr版本:

        • 构建作业需要将包上载到S3
        • 使用一次一个的部署配置
        • 新版本的应用程序部署在现有实例上

        好的,下面是长版本:

        我建议您尝试或查看文档中的。它将帮助您更快地熟悉CodeDeploy

        如果不想,不必将自动缩放组与CodeDeploy一起使用。CodeDeploy与AutoScaling集成允许您管理需要与部署到其上的代码分开动态更改大小的车队,但这不是使用CodeDeploy的要求。您还可以手动启动一些EC2实例,安装host agent,然后将它们标记到部署组中—但它们不会像自动缩放实例那样在启动时自动部署。无论哪种情况,您都可以创建车队范围的部署

        您必须做一些工作才能将其与CI工具集成。CodeDeploy不会直接管理构建工件,因此构建过程需要这样做。要实现自动部署,您需要:

      • 使用
        appspec.yml
        、处理安装/升级所需的任何脚本以及构建构件创建归档包
      • 将捆绑包上载到S3
      • 在CodeDeploy中创建部署
      • 您可能希望将其视为与CodeDeploy集成的连续交付系统的一个示例

        CodeDeploy使用部署配置来控制部署到您的团队中的实例的力度。(自动部署会忽略此配置,因为每个实例都是单独处理的。)如果CodeDeploy无法在不违反部署配置中的约束的情况下使另一个实例失败,则它将使您的部署失败并停止部署到新实例

        有三种部署配置,您可以通过CLI创建自己的配置,或者如果需要其他配置,也可以创建自己的配置。要一次只部署到一个实例,您可以使用
        CodeDeployDefault.OneAtATime
        deployment配置,该配置在任何给定时间最多允许一台不健康的主机。

        对于其他任何人(如我),请查看如何将Travis CI与CodeDeploy真正集成的示例:

        • 配置应用程序、部署组和实例,如中所述
        • 使用aws cli命令将第一个修订版成功部署到CodeDeploy目标实例
        • 部署并运行应用程序后,配置Travis以触发部署
        • CodeDeploy
          appspec.yml
          文件和用于部署的任何脚本都应打包在应用程序包中(在下面的示例中为
          latest.zip
        以下
        .travis.yml
        配置对我有效:

        script: npm run build
        before_deploy:
          - zip -r latest dist/*
          - mkdir -p dpl_cd_upload
          - mv latest.zip dpl_cd_upload/latest.zip
        deploy:
          - provider: s3
            access_key_id: "XXXX"
            secret_access_key: "YYYYY"
            bucket: "deployments-bucket-name"
            local_dir: dpl_cd_upload
            skip_cleanup: true
          - provider: codedeploy
            access_key_id: "ZZZZZ"
            secret_access_key: "WWWW"
            bucket: "deployments-bucket-name"
            key: latest.zip
            bundle_type: zip
            application: CodeDeployAppName
            deployment_group: CodeDeployDeploymentGroupName
        
        这些例子非常有用:

        感谢您提供的详细答案-过去一周我一直在尝试CodeDeploy,它似乎是一个不错的工具。我有一个关于部署新版本API的问题。假设我们有一个跨5个EC2实例进行负载平衡的API,我们绝不希望实例运行不同版本的API时处于不一致的状态。在这个场景中,我们可能需要部署到5个新实例,并在完成后切换ELB。应该如何使用CodeDeploy来实现这一点?您是否会为每个版本创建5个新实例和一个新的部署组?您所描述的方法会奏效。按照一般的最佳实践,您应该始终假设您有时将以混合模式运行,并且您的卷展栏应该设计为与以前的版本一起工作。这确实会使模式迁移更加痛苦(两次部署而不是三次部署),但您的部署将更加安全。