Continuous integration 将上一个svn版本中的文件上载到Jenkins CI中的SFTP

Continuous integration 将上一个svn版本中的文件上载到Jenkins CI中的SFTP,continuous-integration,hudson,jenkins,jenkins-plugins,Continuous Integration,Hudson,Jenkins,Jenkins Plugins,我正在配置Jenkins作业,以便将文件从Subversion上载到SFTP。做得很好,但它在每次构建时都会上载所有文件 对于一些项目,我们有数千个文件,上传成本超过1小时,所以这不是一个选项 有人能建议一种只上传上一版本中更改的文件的方法吗?您可以将这些文件保存在单独的存储库中。听起来像mercurial或git这样的分布式VCS最适合您的情况。您可以在工作区中设置它,并添加一个构建步骤来提交更改的文件,并将提交推送到您想要发布它的服务器(只要您不删除工作区或在多台计算机上构建,这应该可以工作

我正在配置Jenkins作业,以便将文件从Subversion上载到SFTP。做得很好,但它在每次构建时都会上载所有文件

对于一些项目,我们有数千个文件,上传成本超过1小时,所以这不是一个选项


有人能建议一种只上传上一版本中更改的文件的方法吗?

您可以将这些文件保存在单独的存储库中。听起来像mercurial或git这样的分布式VCS最适合您的情况。您可以在工作区中设置它,并添加一个构建步骤来提交更改的文件,并将提交推送到您想要发布它的服务器(只要您不删除工作区或在多台计算机上构建,这应该可以工作)或者添加其他步骤,从您保持其运行的服务器克隆/拉取带有工件的repo。

您可以使用该步骤轮询SVN更改,并运行不做任何特殊操作的作业。让我们称之为你的调查工作。然后通过http调用Jenkins API,如下所示:

http://[jenkins_server]/api/xml?depth=2&xpath=/hudson/job[name='YourPollingJob']/build[id='BUILD_ID']/changeSet
其中,
BUILD\u ID
是刚刚运行的作业的实际生成ID(通常的格式类似于
2012-02-21\u 16-15-49
)。检查结果。请注意,自上一次构建以来已更改的文件的所有信息都在那里—您只需将其解析出来

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

您可以在一项工作中完成所有工作,但这有点复杂,调试起来也有点困难


此外,每天(每夜)复制一次整个存储库可能是明智的做法。

有任何答案有用吗?