企业级从CI服务器传输构建产物到生产服务器的工具

42次阅读
没有评论

问题描述

最近学习了一些基本的DevOps知识,并在DigitalOcean droplet上使用了Travis CI来设置自己的服务器。由于没有DigitalOcean的Travis部署提供程序,他不得不编写自己的部署脚本。然而,他有超过50000个文件,即将近1GB的数据。他尝试了scp、ftp和rsync,但觉得这需要很长时间。
用户想知道在企业级别中使用的传输工具是什么?他们是否也使用rsync或scp?还是有其他比这些更好的工具被中小型企业使用,而他不知道的?
此外,他还有另一个问题,是否有任何可以并行通过ssh传输文件的部署脚本/工具?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

尝试使用LFTP,它具有镜像或并行复制的命令。LFTP可以在许多协议上运行。
您可能遇到的问题是,您正在通过互联网将大量数据从构建服务传输到单个虚拟机。企业使用相同的工具和协议,但他们支付更多的带宽,或确保他们的构建和部署在同一个云提供商内完成。然后,他们使用标准协议(如SCP)和工具(如Ansible)并行部署到多个服务器。单个云提供商(Azure、AWS、GCP)的网络具有优先级。这意味着如果您想要高带宽的部署,并在Digital Ocean上运行,您应该在Digital Ocean上构建。
也许有很多50k个文件中的文件在每次构建时都不会改变。因此,您真正需要的是一个工具,可以查看已部署的文件。我们可以期望这样的工具使用文件名、时间戳、文件大小和校验和来检查文件是否需要上传。如果您的构建是无状态的,并且每次创建1G的新文件,它们的时间戳将比已部署的相同文件的时间戳更新。LFTP有一个“ignore time stamp”选项,可以避免传输更新但相同的文件。请参考这个问题和答案:https://serverfault.com/a/311670

方案2

如果企业只是使用普通的SCP,他们往往会使用像Ansible Tower这样的部署工具或一些“平台”,不是因为它可以更快地传输文件,而是因为它具有基于角色的访问控制,并且可以将ssh密钥/密码隐藏在开发团队中,并保留完整的审计记录。我不认为“企业级DevOps软件”与“更好的技术”等同,因为它们都使用已建立的协议或实际上是基于开源的,如Tower。我认为“企业级DevOps软件”意味着“花费很多钱来增加一些控制和报告,以使管理层满意”。另外,一个采用“免费模式”的构建服务如果不为免费用户限制带宽并优先考虑付费用户,将很快破产。同样,允许“基本级”托管的无限带宽将使托管公司破产,因为任何支付“高级托管”的人都不会看到良好的网络速度。这意味着“便宜”或“免费”意味着“对典型用户来说刚好够用”。尝试部署50k个文件或1G并不是典型用户所需的,所以“不够好”并不奇怪。企业不使用免费或基本服务,他们为高级服务付费。

方案3

虽然这不是关于“企业级文件传输工具”的直接答案,但一种常见的方法是在CI构建中构建应用程序,并将(版本化的)二进制文件/包推送到像Sonatype Nexus或JFrog Artifactory这样的存储库中。然后,在稍后的步骤中,您的构建将从目标机器/从droplet内部拉取这些二进制文件。
根据您的技术栈,有许多打包格式,例如NPM包、JAR包、NuGet包、Gems、Docker镜像等。通常,您还可以定义自己的包格式。
正如我所说,这不是关于“企业级文件传输工具”的直接答案,但这是一种将构建和推送应用程序与拉取/部署应用程序分离的常见方法。

正文完