手动将项目逐个文件部署到服务器上是最佳实践吗?


26

我现在工作的公司还没有实现持续交付。我们仍然手动将项目逐个文件部署到服务器。最佳做法是:为每个部署手动部署一个项目工件,还是继续逐个文件进行部署?


12
甚至没有远程执行“针对所有情况的一种做法”的任务。
whatsisname

26
通常,我会链接到为什么问“最佳实践”问题是一件坏事?我认为我们都可以同意这是最糟糕的做法。它的排名略高于“为服务器点火”。


9
我怀疑OP正在问这个问题,因为他已经知道答案了,他的工作地点做错了(tm),OP正在尝试收集证据以为改变他们的做事方式提供依据。
user1936

2
我们在第二个千年就这样做了。应该没事!;)
唐·布兰森

Answers:


103

哪个是最佳做法?在每个部署中手动部署一个项目工件还是继续逐个文件部署文件?

都不行

最佳实践是完全专有地自动化您的部署。这意味着没有人可以手动将任何东西放到服务器上。

“总结摘要的摘要:人是问题。” (道格拉斯·亚当斯)

人们会犯错误。如果您忘记复制的文件之一是已被广泛更改的共享“库”,则可以使整个Production网站崩溃。


17
@JohnHamilton如果自动化编译是一项艰巨的任务,那么从长远来看,这本身就是要解决的问题。您不必具有完全自动部署的完整开发,测试,预生产环境,但是创建标准部署程序包应该是标准做法。
尼尔

20
嗯,公司的规模在一定程度上并不是问题所在。成本将与部署的自动化程度有关,也与生产环境的复杂性有关。但是,自动化的梯度和“成本”(时间/金钱)的梯度是从简单的事情开始的,例如将构建输出复制到生产中的脚本(少量投资,立即节省了实际成本),然后逐渐增加,这更加依赖在管理层买断上比公司规模大。
BurnsBA '17

39
@JohnHamilton:一家管理不善的小公司肯定会自欺欺人。自动复制文件并不是一项艰巨的任务,定期雇用任何员工来进行这项工作的成本将远远超过编写甚至是最琐碎的脚本的成本。
GManNickG

8
@JohnHamilton:必须权衡自动化成本与手动部署过程中发生错误的风险。
罗伯特·哈维

7
您甚至不一定需要詹金斯。只是带有一堆scp命令(或手动上传时使用的任何命令)的签入脚本会有所改善。
user253751 '17

14

手动步骤需要花费很多精力并且存在风险:您可能会忘记必要的文件。也许不是团队中的每个人都知道需要复制哪些文件。所有这些问题使部署变得庞大,艰巨而罕见,这完全是不必要的。自动化解决了这些问题。

即使最简单的自动化步骤也可以带来很大的好处,因为部署变得微不足道。通过(S)FTP或Rsync或其他技术复制文件或工件的脚本是一个很好的第一步。以后,您可以扩展该脚本以在服务器上自动执行部署前和部署后步骤,例如重新启动服务。


如果服务器总数为2个或更少,则手动操作的风险要低于自动设置的风险。自动需要大量的错误检查。我从来没有见过一个平凡的自动解决方案。
约书亚

3
@Joshua我不确定服务器的数量是否应归因于此。当您多次部署到同一服务器时,自动化也很有价值。问题是,您对谁的信任度更高:计算机忠实地执行一次可以运行的脚本,还是您每次都能记住所有必要步骤的能力?作为一个容易犯错并且健忘的人,我强烈希望不要手动做事。有时,我什至只编写一次性任务的脚本,以便可以在运行命令之前对其进行检查。这比手动随机操作直到工作可行的风险要少得多!
阿蒙(Amon)

两种方式我都有丰富的经验。我为手动部署所做的工作是xcopy install,因此确实没有步骤可以忘记其中的一些。
约书亚

9

最佳实践是实施某种自动化过程。

请谨慎检查是否没有特殊原因需要采用“逐个文件”方法。


1
我问这个问题是因为我只想确保它不是世界上的最佳实践。我想知道仍然有任何公司/开发人员仍在手动部署其应用程序/项目,更糟糕的是,每次开发迭代都逐文件进行部署。
杰克·穆勒

4
最好的问题是“为什么我们要这样做?” 我想不出原因,但我确实知道有些公司喜欢手动操作扳机
Ewan

8
@JakeMuller您应该在此答案的两句之间读到的是,应该通过对情况进行推理来做出决定,而不是盲从地坚持不知道它的人所声明的始终是正确答案。
Blrfl

采用逐个文件方法的原因可能是文件之间的依赖性,因此,在对依赖于这些文件的其他文件进行更改之前,应先部署文件更新。以错误的顺序更新文件可能会使系统短暂制动。
bdsl

6

通过连续交付(或实际上是部署)并手动移动每个文件,您将看到两个极端。完全可以理解,您还可以/还不想创建一个全自动的管道。但是,您应该考虑使流程的一部分自动化。

手动移动每个文件的风险很大,例如,可以通过标记代码存储库,在计算机中签出该标记,构建工件并将其上载到服务器来减轻这种风险。这些步骤中的每一个都可以自动化,因此只需单击几下鼠标即可执行,这将大大减少忘记文件或意外推送一些额外文件的风险。

一次执行一次即可自动执行所有操作。您买不起全自动CD管道,这一事实不应妨碍您自动化某些部件。


1

最佳实践是对特定公司的特定部署进行成本/收益分析。

普遍的回答是“不要手动做事,要自动化”。对于一般类型的公司来说,这通常是正确的答案。您收到的答案的一致性应表明社区认为这是最佳做法的强烈程度。如果您的公司认为自动化不是正确的工具,那么他们应该对自动化的独特之处有所了解。唯一性应纳入您的决策过程。当样本集为1时,没有“最佳实践”。

诸如“多少文件”,“多长时间更新一次内容”,“破坏内容的后果是什么”以及“多快可以回滚一次不良更改”之类的问题是需要回答的重要问题。如果实现自动化,这些问题中的许多问题将变得不重要,但是对于正确分配手动更新过程的成本和收益来说,这些问题至关重要。


1

手动逐个文件复制和连续交付之间有很多灰色阴影。

首先降低部署过程的复杂性,例如使用zip文件,rpm样式的打包,将基础设施用作代码管理工具(例如puppet或Chef),甚至只是一个简单的脚本,即可从ftp服务器上的暂存区域。

具有更多手动步骤的部署过程更有可能出现错误(从而失败),就像其他人所说的那样,将人为因素排除在外。

您不需要实施完全连续的交付(这是昂贵的,并且随着时间的推移需要付出努力/投资/创新)-从简单开始,使其工作,展示收益-并从那里开始。


0

它取决于您使用的软件技术(或堆栈)(解释语言,编译语言,桌面应用程序,移动设备等)是否为软件。开发。部门政策,如果您具有使之自动化的工具,那么您的应用程序有多重要,需要考虑的重要一件事就是软件体系结构(应用程序的设计方式)。这就是为什么您在这里有不同的答案。根据经验,最好的方法是减少对部署任务的人工干预,以免出错。良好的做法是在部署之前测试QA服务器中的所有内容(如果预算有限,请考虑使用虚拟服务器),并在灾难发生时采用反向过程将其还原到以前的版本(始终有备份)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.