【发布时间】:2012-01-03 18:20:15
【问题描述】:
我想知道如何使用 ftp 和/或 ssh 部署我的网络项目。
我们目前有一个自制的部署系统可以处理这个问题,但我想切换到 Jenkins。
我知道有发布插件,它们在上传构建工件时效果很好。但他们不能删除或移动文件。
您对我的问题有任何提示、提示或想法吗?
【问题讨论】:
标签: deployment ftp ssh jenkins
我想知道如何使用 ftp 和/或 ssh 部署我的网络项目。
我们目前有一个自制的部署系统可以处理这个问题,但我想切换到 Jenkins。
我知道有发布插件,它们在上传构建工件时效果很好。但他们不能删除或移动文件。
您对我的问题有任何提示、提示或想法吗?
【问题讨论】:
标签: deployment ftp ssh jenkins
Publish Over SSH 插件使您可以使用 ssh 向远程服务器发送命令。这很好用,我们还在部署新版本之前执行了一些移动/删除文件,使用这种方法没有任何问题。
【讨论】:
处理删除和移动项目的最简单方法是在使用“Publish over”扩展名之一部署新版本之前删除服务器上的所有内容。我想说这真的是知道部署版本是你想要的版本的唯一方法。如果您想要更多版本控制系统风格的行为,您要么需要使用版本控制系统,要么可能需要使用 rsync 来覆盖其中的一部分。
如果您的要求非常具体,您可以制定自己的约定来标记删除,并让它们由单独的脚本执行(就像您使用 Liquibase 或类似的东西来更改数据库一样)。
顺便说一句:我建议不要在每次构建后使用“发布...”扩展名自动更新您的实时网站。如果我们真的想自动更新实时站点,我们依靠Promoted Builds Plugin 来保持它几乎完全自动化,但增加了一点安全性。
【讨论】:
我想出了一个简单的解决方案,使用简单的 lftp 镜像脚本删除已删除的文件并将更改上传到远程 FTP 服务器,作为 Jenkins 中的构建操作。 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 脚本将
我写了一篇文章,解释了我如何 keep FTP in sync with Git 为我只能通过 FTP 访问的 WordPress 网站。这篇文章解释了如何从 FTP 同步到 Git,然后如何使用 Jenkins 构建和部署回 FTP。这种方法并不完美,但它确实有效。它只上传更改的文件,并从主机上删除已从 git repo 中删除的文件(反之亦然)
【讨论】: