Deployment Jenkins:FTP/SSH部署,包括删除和移动文件

Deployment Jenkins:FTP/SSH部署,包括删除和移动文件,deployment,ftp,ssh,jenkins,Deployment,Ftp,Ssh,Jenkins,我想知道如何使用ftp和/或ssh部署我的web项目 我们目前有一个自制的部署系统,能够处理这个问题,但我想换成詹金斯 我知道有发布插件,它们在上传构建工件时工作得很好。但他们不能删除或移动文件 您对我的问题有什么提示、提示或想法吗?该插件允许您使用ssh向远程服务器发送命令。这非常有效,在部署新版本之前,我们还执行了一些移动/删除文件的操作,使用这种方法没有任何问题。处理删除和移动项目的最简单方法是在部署新版本之前使用“”扩展名之一删除服务器上的所有内容。我想说,这是知道部署的版本是您想要的版

我想知道如何使用ftp和/或ssh部署我的web项目

我们目前有一个自制的部署系统,能够处理这个问题,但我想换成詹金斯

我知道有发布插件,它们在上传构建工件时工作得很好。但他们不能删除或移动文件


您对我的问题有什么提示、提示或想法吗?

该插件允许您使用ssh向远程服务器发送命令。这非常有效,在部署新版本之前,我们还执行了一些移动/删除文件的操作,使用这种方法没有任何问题。

处理删除和移动项目的最简单方法是在部署新版本之前使用“”扩展名之一删除服务器上的所有内容。我想说,这是知道部署的版本是您想要的版本的唯一方法。如果您想要更多版本控制系统风格的行为,您需要使用版本控制系统,或者可能需要使用rsync来覆盖其中的一部分

如果您的需求非常具体,您可以开发自己的约定来标记删除,并让它们由单独的脚本执行(就像您使用Liquibase或类似的方法更改数据库一样)


顺便说一下:我建议不要在每次构建后使用“发布时间…”扩展自动更新您的实时站点。如果我们真的想让一个实时站点自动更新,我们可以依靠来保持它几乎完全自动化,但增加了一点安全性。

我想出了一个简单的解决方案,在Jenkins中使用一个简单的lftp镜像脚本,删除删除删除的文件并将更改上传到远程FTP服务器

简而言之,在jenkins用户目录~/.netrc中创建一个配置文件,并用FTP凭据填充它

machine ftp.remote-host.com
login mySuperSweetUsername
password mySuperSweetPassword
创建一个lftp脚本deploy.lftp并将其放到.git repo的根目录中

set ftp:list-options -a
set cmd:fail-exit true
open ftp.remote-host.com
mirror --reverse --verbose --delete --exclude .git/ --exclude deploy.lftp  --ignore-time --recursion=always
然后添加一个“execshell”构建操作,在脚本上执行lftp

lftp -f deploy.lftp
lftp脚本将

  • 镜像:复制所有更改的文件
  • 反向:将本地文件推送到远程主机。常规镜像从远程主机拉到本地主机
  • 详细:将所有关于哪些文件被复制到构建日志的注释转储到哪里
  • 删除:删除git repo中不再存在的远程文件
  • 排除:不发布.git目录或deploy.lftp脚本
  • 忽略时间:不会根据文件创建时间发布。如果没有,在我的例子中,所有文件都是在git repo的新克隆更新了文件创建时间戳之后发布的。尽管如此,它仍然可以很好地工作,甚至通过在其中添加单个空间修改的文件也被识别为不同的文件并上传
  • 递归:将分析每个文件,而不是依赖文件夹来确定其中是否有文件可能被修改。这在技术上是不必要的,因为我们忽略了时间戳,但我这里有它

我写了一篇文章,解释了我是如何为一个只能通过FTP访问的WordPress网站做准备的。本文介绍了如何从FTP同步到Git,然后介绍如何使用Jenkins构建并部署回FTP。这种方法并不完美,但确实有效。它只上载更改的文件,并从主机上删除已从git repo中删除的文件(反之亦然)

谢谢,这可能会对我的ssh服务器有所帮助。但是如何获取需要移动/删除哪些文件的信息?Git当然知道这一点,但如何将其集成到部署工作流中?如果您感兴趣移动/删除的文件已经在Git中,您可以在部署服务器上克隆repo,然后使用Git命令行通过ssh发布来获取更改。如果您有静态文件,而不需要编译或检查,只需要部署,那么这可能是一个很好的方法。如果您对源代码和静态文件有单独的repo,可能会工作得最好。谢谢。当我们开发基于php(TYPO3)的软件时,我们的项目都是“静态”文件。我知道我可以使用git获取移动/删除的文件,实际上这就是我们在自己的基于phing的简单部署系统中所做的。我只是想解释一下,似乎没有一个插件涵盖干净高效的ftp/ssh部署。我想知道其他公司如何部署他们的web项目,他们不使用ftp吗?或者只是在live server上使用ssh和/或git进行更昂贵的定制托管?谢谢Simone的建议,我将检查升级的构建插件。无论如何,这对我来说毫无意义,为什么我需要上传一个完整的网站,而我只是简单地更改了一点css或修复了脚本中的一个bug。不知何故,我似乎是唯一一个有这个问题的人,或者其他人要么将他们的网站项目部署到更高级的主机(ssh/git),要么不使用自动部署。