【问题标题】:How to get Jenkins to perform deletes on remote server如何让 Jenkins 在远程服务器上执行删除
【发布时间】:2015-08-18 22:23:39
【问题描述】:

我正在尝试使用 Jenkins 开始自动构建过程。

到目前为止,我已经设法让 Jenkins 从 BitBucket 构建一个项目,运行测试并使用 Publish Over SSH 插件将文件上传到生产服务器。

当我从我的 git 存储库中删除文件时,我希望在远程服务器上删除这些文件。我已经考虑过几种方法。

  1. 擦除生产服务器上的所有文件,然后上传最新的构建版本。

    • 对我来说似乎是一个糟糕的解决方案,因为这会导致停机时间超出我的预期。
  2. 创建一个驻留在远程服务器上的脚本,以在新的构建过程之后清理文件。我需要从 git 中找出(不知何故?)该提交中删除的文件是什么。

  3. 不要让 Jenkins 使用通过 ssh 发布的插件,而是在生产服务器上安装 git,因此在成功构建后,我们可以让 Jenkins(不知何故?)将项目推送到 git 生产服务器。

这似乎是开发人员的一项常见任务,我觉得我在这里遗漏了一些东西。有没有这方面的标准做法。

【问题讨论】:

  • 您必须区分这是开发沙箱服务器还是生产现场机器。对于生产,始终从明确定义的包进行部署,即删除旧的,上传新的。您可以配置各种diffsrsync 来上传只是的差异。对于 Dev 沙箱,直接在服务器中使用 git 并在 git 中更改文件时更新它并没有错。
  • 对于生产,你建议我应该删除整个包?目前Jenkins需要将近一个小时才能上传,这正常吗?
  • 正常吗?取决于您的包大小、网络带宽和使用的协议。如果“手动”完成,将文件上传到服务器的“正常”时间是什么
  • 包大小大约为 200 mb 并且还在增长,1gb 带宽 p/m,并使用 sftp。如果是通过 ftp 手动传输大约需要 10 分钟
  • 编写一个部署脚本,不要依赖“通过SSH发布”(实际上你仍然可以使用该插件复制包[到临时目录]并部署脚本,然后触发它)。这样,“上传时间”就不会影响您的停机时间。您甚至可以在导致停机之前将包解压缩到临时目录中,最后进行快速“重命名”甚至“符号链接切换”。根据软件/代码,您可能需要也可能不需要重新启动 Web 服务器。 “零停机发布”主题是一个非常冗长和棘手的主题

标签: git deployment jenkins continuous-integration


【解决方案1】:

也许这个答案为时已晚,但我认为其他人会搜索这个。在开发中删除文件后,我找到了在生产服务器上删除文件的解决方案。
在 Jenkins 中,您使用 rsync 在开发和生产之间同步文件。在最后添加到这一行 --删除
这样就可以了

【讨论】:

  • 作者使用“Publish Over SSH 插件”,后者又在后台使用scp,它没有任何--delete 标志(并且插件不提供任何选项来解决此问题太)
猜你喜欢
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 2018-01-23
  • 1970-01-01
  • 2022-01-27
相关资源
最近更新 更多