【发布时间】:2015-08-18 22:23:39
【问题描述】:
我正在尝试使用 Jenkins 开始自动构建过程。
到目前为止,我已经设法让 Jenkins 从 BitBucket 构建一个项目,运行测试并使用 Publish Over SSH 插件将文件上传到生产服务器。
当我从我的 git 存储库中删除文件时,我希望在远程服务器上删除这些文件。我已经考虑过几种方法。
-
擦除生产服务器上的所有文件,然后上传最新的构建版本。
- 对我来说似乎是一个糟糕的解决方案,因为这会导致停机时间超出我的预期。
创建一个驻留在远程服务器上的脚本,以在新的构建过程之后清理文件。我需要从 git 中找出(不知何故?)该提交中删除的文件是什么。
不要让 Jenkins 使用通过 ssh 发布的插件,而是在生产服务器上安装 git,因此在成功构建后,我们可以让 Jenkins(不知何故?)将项目推送到 git 生产服务器。
这似乎是开发人员的一项常见任务,我觉得我在这里遗漏了一些东西。有没有这方面的标准做法。
【问题讨论】:
-
您必须区分这是开发沙箱服务器还是生产现场机器。对于生产,始终从明确定义的包进行部署,即删除旧的,上传新的。您可以配置各种
diffs和rsync来上传只是的差异。对于 Dev 沙箱,直接在服务器中使用git并在git中更改文件时更新它并没有错。 -
对于生产,你建议我应该删除整个包?目前Jenkins需要将近一个小时才能上传,这正常吗?
-
正常吗?取决于您的包大小、网络带宽和使用的协议。如果“手动”完成,将文件上传到服务器的“正常”时间是什么是?
-
包大小大约为 200 mb 并且还在增长,1gb 带宽 p/m,并使用 sftp。如果是通过 ftp 手动传输大约需要 10 分钟
-
编写一个部署脚本,不要依赖“通过SSH发布”(实际上你仍然可以使用该插件复制包[到临时目录]并部署脚本,然后触发它)。这样,“上传时间”就不会影响您的停机时间。您甚至可以在导致停机之前将包解压缩到临时目录中,最后进行快速“重命名”甚至“符号链接切换”。根据软件/代码,您可能需要也可能不需要重新启动 Web 服务器。 “零停机发布”主题是一个非常冗长和棘手的主题
标签: git deployment jenkins continuous-integration