在Jenkins CI中将文件从上一个svn修订版上载到SFTP

时间:2012-02-21 20:33:06

标签: continuous-integration hudson jenkins jenkins-plugins

我正在配置Jenkins作业,用于将文件从Subversion上传到SFTP。 Publish Over SSH做得很好,但它会在每次构建时上传所有文件。

对于某些项目,我们有数千个文件,上传费用超过1小时,因此无法选择。

有人可以建议只上传最新修订版中更改的文件吗?

2 个答案:

答案 0 :(得分:1)

您可以将这些文件保存在单独的存储库中。听起来像像mercurial或git这样的分布式VCS最适合你的情况。您可以在工作区中进行设置,并添加构建步骤以提交已更改的文件,并将提交推送到要将其发布到的服务器(只要您不擦除工作区或构建多个工作区,这应该可以正常工作机器)或添加额外的步骤来克隆/拉出包含来自服务器的工件的回购。

答案 1 :(得分:1)

您可以使用Subversion Plugin轮询SVN更改并运行一项不会执行任何操作的作业。我们称之为 YourPollingJob 。然后通过http调用Jenkins API,如下所示:

http://[jenkins_server]/api/xml?depth=2&xpath=/hudson/job[name='YourPollingJob']/build[id='BUILD_ID']/changeSet

其中BUILD_ID是您刚刚运行的作业的实际构建ID(通常的格式类似于2012-02-21_16-15-49)。检查结果。请注意,自上次构建以来已更改的文件的所有信息都在那里 - 您只需解析它。

现在您可以执行以下操作: YourPollingJob 将调用另一个作业 - 让我们称之为 CopyJob - 并将BUILD_ID作为参数传递给它(通过Parameterized Trigger Plugin;确保将 CopyJob 称为构建后步骤,而不是构建步骤。 CopyJob 然后将通过http查询Jenkins(如上所述,最好的方法是通过wget执行),解析结果并进行复制。

你可以在一个作业中完成所有工作,但它有点复杂,难以调试。

此外,每天(每晚)复制整个存储库可能是谨慎的。