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

时间:2011-11-22 10:50:05

标签: deployment ftp ssh jenkins

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

我们目前有一个自制的部署系统,可以处理这个,但我想切换到Jenkins。

我知道有发布插件,它们在上传构建工件时效果很好。但他们无法删除或移动文件。

您对我的问题有任何提示,提示或想法吗?

3 个答案:

答案 0 :(得分:3)

Publish Over SSH插件使您可以使用ssh将命令发送到远程服务器。这非常有效,我们还在部署新版本之前执行一些移动/删除文件,并且使用这种方法没有任何问题。

答案 1 :(得分:1)

处理删除和移动项目的最简单方法是在使用其中一个“Publish over”扩展程序部署新版本之前删除服务器上的所有内容。我会说这是了解部署版本的唯一方法就是你想要的版本。如果您想要更多的版本控制系统样式行为,您需要使用版本控制系统或可能覆盖其中一部分的rsync。

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

顺便说一句:我建议不要在每次构建后使用'publish over ...'扩展程序自动更新您的实时网站。如果我们真的希望自动更新实时网站,我们依靠Promoted Builds Plugin使其几乎完全自动化,但增加了一些安全性。

答案 2 :(得分:0)

我想出了一个简单的解决方案来删除已删除的文件,并使用简单的lftp镜像脚本将更改作为Jenkins中的构建操作上载到远程FTP服务器。 Lftp Manual Page

简而言之,您在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

然后添加“Exec Shell”构建操作以在脚本上执行lftp。

lftp -f deploy.lftp

lftp脚本将

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

我写了一篇文章,解释了我只能通过FTP访问WordPress网站的keep FTP in sync with Git。本文介绍了如何从FTP同步到Git以及如何使用Jenkins构建和部署回FTP。这种方法并不完美,但可行。它只上传更改的文件,并从主机上删除已从git repo中删除的文件(反之亦然)