我正在配置Jenkins作业,用于将文件从Subversion上传到SFTP。 Publish Over SSH做得很好,但它会在每次构建时上传所有文件。
对于某些项目,我们有数千个文件,上传费用超过1小时,因此无法选择。
有人可以建议只上传最新修订版中更改的文件吗?
答案 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
执行),解析结果并进行复制。
你可以在一个作业中完成所有工作,但它有点复杂,难以调试。
此外,每天(每晚)复制整个存储库可能是谨慎的。