AWS部署:Jenkins + AWS CodeDeploy vs Jenkins +通过SSH进行命令

时间:2018-04-26 13:48:41

标签: amazon-web-services jenkins continuous-deployment aws-code-deploy

我想知道将代码部署到AWS EC2实例的更好方法。

在我的工作场所,我们有一个项目,Jenkins部署的工作将会进行(1):

  • 拉出Jenkins机器上的代码
  • 压缩并上传到S3实例
  • CodeDeploy将代码下载并解压缩到EC2实例
  • 运行迁移,构建资产,重新启动服务器等。

另一方面它会去(2):

  • Jenkins SSH到EC2实例
  • git来自生产分支/发布标签
  • 运行迁移,构建资产,重新启动服务器等。

第二个场景看起来比第一个场景简单得多,即使我经常看到第一个场景,或者它的变体。 我可以看到第一个在实际部署之前运行测试会更好,但除此之外我没有看到它有多大优势。

根据您的经验,哪一个会更好(省略测试部分)? 其中任何一个我都不知道有任何明显的安全问题吗?

1 个答案:

答案 0 :(得分:1)

使用代码部署的第一种方法意味着您可以使用许多部署配置。

这可以用于与应用程序相关的更改或基础结构更改。

正如您所提到的,要部署的应用程序的假象上传到S3,CodeDeploy完成其余部分,具体取决于部署配置。这使您可以灵活地自动回滚更改等。

此外,我相信在使用链接到CodeDeploy的基础架构时不需要ssh访问,因此这减少了与密钥等相关的一些维护和安全问题。

从基础设施方面。在AWS中构建一些负载平衡基础架构(ELB + ASG)并将其链接到CodeDeploy相对容易。代理人就是所需要的。但是,如果您需要调整基础架构,即向外扩展或向上扩展。可以通过CodeDeploy及其部署配置相对容易地引入这些更改。

此外,从S3存储桶中,您可以合并一个由部署阶段组成的CodePipeline,而不是直接转到CodeDeploy,这些部署阶段部署到连接到CodeDeploy的不同环境。这意味着Jenkins运行的某些测试任务可能会被委托给CodeDeploy或CodePipeline中的一个阶段,从而导致最终的CodeDeploy阶段。

这些只是我认为第一种选择更好的原因。总而言之,我认为从长远来看,第一个选项在战略上更有用,假设您的需求可能会发生变化。通过利用CodeDeploy,您可以在以后调整和扩展您的方法。

希望这有帮助! 帕特里克