Azure Devops构建静态网站后如何只上传更改的文件到共享托管提供商

178次阅读
没有评论

问题描述

使用Ruby/Jekyll构建流程从Markdown等文件中生成静态网站,通过模板处理的方式,与Github Pages相同的流程,但不是在Github上托管,而是希望能够将其上传到现有的共享托管提供商并从那里提供文件。(用户已经在Web主机上设置了DNS和其他一切。)
托管提供商通过cPanel提供FTP和SSH,但没有直接与Git的连接。
构建过程(目前是手动进行的,但最终将成为自动化构建过程,可能会产生更多问题!)在我的存储库中的“_site”目录中创建/更新静态文件。
我的本地“CI”构建(在我的个人电脑上)使用开发分支,然后在对更改满意后将其推送到主分支。
用户希望能够使用Azure Devops发布流水线将文件传输到Web主机,由主分支合并触发。
用户已经成功运行了这个流程(手动触发,但不认为触发部分是个问题),使用内置的FTP任务来获取“_site”目录的内容作为构件,并将其FTP上传到Web主机。
然而,FTP任务(以及构件)并不是很“智能”,即每次部署时都会重新上传所有内容,即使只有少数文件发生了更改。这显然会花费更长的时间,并且会消耗用户的(按流量计费的)带宽(而且似乎不是很好的DevOps!)
大多数情况下,实际上只有一小部分文件会因构建而更改。这通常是在创建新页面或更改样式表时发生。偶尔,所有文件都会更改,例如,如果“包含”的组件发生更改,那么所有静态页面都必须重新渲染。
用户希望的是一种只上传更改(和新)文件的方法或工作流程,而不是所有文件。听起来应该很容易,所以也许我漏掉了什么。

解决方案

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

方案1

由于FTP没有可靠的内置方法来仅上传更改的文件,因此你需要编写自己的shell脚本来解决这个问题。
以下是一种可能的解决方案:
1. 在服务器上保存文件的哈希值。
2. 在每次构建之前,计算本地文件的哈希值。
3. 将本地文件的哈希值与服务器上保存的哈希值进行比较。
4. 仅上传哈希值不匹配的文件。
这种方法需要你在服务器上保存文件的哈希值,并在每次构建之前计算本地文件的哈希值。然后,只有当哈希值不匹配时,才上传文件。这样可以避免上传没有更改的文件,节省带宽和时间。

方案2

另一种解决方案是使用git-ftp工具。git-ftp可以帮助你自动上传只有更改的文件。
以下是使用git-ftp的步骤:
1. 在Azure Devops中设置一个发布流水线。
2. 在流水线中添加一个任务,用于安装git-ftp工具。
3. 添加一个任务,用于配置git-ftp工具,包括FTP服务器的地址、用户名和密码。
4. 添加一个任务,用于上传只有更改的文件。
使用git-ftp工具可以简化上传只有更改的文件的过程,并自动处理文件的哈希值比较。
请注意,使用git-ftp工具需要在服务器上安装Git,并且需要在Azure Devops中设置发布流水线来使用git-ftp工具。

方案3

你还可以考虑使用其他工具来管理文件的上传。例如,你可以使用rsync工具来仅上传更改的文件。
以下是使用rsync的步骤:
1. 在Azure Devops中设置一个发布流水线。
2. 在流水线中添加一个任务,用于安装rsync工具。
3. 添加一个任务,用于配置rsync工具,包括目标服务器的地址、用户名和密码。
4. 添加一个任务,用于上传只有更改的文件。
使用rsync工具可以实现只上传更改的文件,并且可以根据文件的时间戳和大小进行比较,以确定文件是否发生更改。
请注意,使用rsync工具需要在目标服务器上安装rsync,并且需要在Azure Devops中设置发布流水线来使用rsync工具。

方案4

如果你有完全访问服务器的权限,你可以考虑使用其他部署方法,如使用Git钩子或使用CI/CD工具(如Jenkins)来自动化部署过程。这些方法可以更好地控制文件的上传,并且可以根据需要自定义上传的文件。
请注意,这些方法可能需要更多的配置和设置,并且可能需要更多的技术知识来实现。
以上是几种可能的解决方案,你可以根据自己的需求和限制选择适合你的方法。希望能帮助到你!

正文完