【问题标题】:Uploading files from last svn revision to SFTP in Jenkins CI在 Jenkins CI 中将文件从上一个 svn 修订版上传到 SFTP
【发布时间】:2012-02-21 20:33:06
【问题描述】:
我正在配置 Jenkins 作业以将文件从 Subversion 上传到 SFTP。 Publish Over SSH 做得很好,但它会在每次构建时上传所有文件。
对于某些项目,我们有数千个文件,上传时间超过 1 小时,所以这不是一个选择。
任何人都可以建议一种仅上传在上次修订中更改的文件的方法吗?
【问题讨论】:
标签:
continuous-integration
hudson
jenkins
jenkins-plugins
【解决方案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 进行),解析结果并进行复制。
您可以在一项工作中完成所有操作,但它有点复杂且难以调试。
此外,最好每天(每晚)复制整个存储库一次。
【解决方案2】:
您可以将这些文件保存在单独的存储库中。听起来像 mercurial 或 git 这样的分布式 VCS 最适合您的情况。您可以在工作区中设置它并添加构建步骤以提交更改的文件并将提交推送到您要发布它的服务器(只要您不清除工作区或构建多个机器)或添加额外的步骤来克隆/提取带有工件的存储库,从您保留它们的服务器。