Php Jenkins Mercurial如何从构建中包含的所有变更集中获取所有文件

Php Jenkins Mercurial如何从构建中包含的所有变更集中获取所有文件,php,jenkins,mercurial,Php,Jenkins,Mercurial,我是Jenkins的新手,但随着我的项目开始增长,对完整CI的需求也在增加。因此,我希望有一个部署任务,如果所有任务都通过,它将运行。现在,由于我在服务器上使用PHP,我不想在每次构建时通过SSH发布整个应用程序。我只想推送已更改的文件。现在在詹金斯我可以得到修订,但它只显示我最新的修订。我目前正在使用批处理文件来获取变量值。不过,我需要的是构建中的变更集列表,因为可能有多个变更集。然后使用hg log-r%1:%2——模板“{file\u mods}{file\u adds}\n”从中使用并获

我是Jenkins的新手,但随着我的项目开始增长,对完整CI的需求也在增加。因此,我希望有一个部署任务,如果所有任务都通过,它将运行。现在,由于我在服务器上使用PHP,我不想在每次构建时通过SSH发布整个应用程序。我只想推送已更改的文件。现在在詹金斯我可以得到修订,但它只显示我最新的修订。我目前正在使用批处理文件来获取变量值。不过,我需要的是构建中的变更集列表,因为可能有多个变更集。然后使用hg log-r%1:%2——模板“{file\u mods}{file\u adds}\n”从中使用并获取列表

无论如何,我都愿意实现这个groovy/powershell或bat文件。但任何关于这方面的指导都会有所帮助,因为我在阅读有关这一主题的文章时有些不知所措。我本以为这是件很平常的事,所以也许我错过了什么

提前谢谢

迪安

只是一些肮脏的想法,还没有准备好使用解决方案 评论 我只想推送已更改的文件

明显的问题|补充:“……自/历史上的这一点/以来发生了变化”。您必须以某种方式存储此数据(部署的最新变更集),并将其提供给Jenkins作业

使用hg日志-r%1:%2--要使用的模板“{file\u mods}{file\u adds}\n”

不需要。您甚至可以在第一步使用命令,该命令将为您所需的文件树做准备,并且您拥有它:read
hg help archive

提示
  • 您可以标记每个通过的测试和部署的变更集,以便稍后获得此信息。您确实可以使用任何格式的标记(因为不管使用什么名称,最新的标记总是可以检测为“最新的”),我建议选择模式,它将生成唯一的ID(只是在过程中不那么麻烦),但您可以使用类似于
    hg tag-f DEPLOY的内容(-f表示重复使用标签的现有名称,不是最佳样式,但可能)

  • 通过在任何标记模式的成功部署(而非构建)的最后一步添加标记,您可以在下次部署时始终拥有一组更改集:范围从最新标记到提示

    -r“last(tag()):tip”

  • 毕竟,您有一个命令,用于构建要部署的文件树,如

    hg archive“-Iset:status('last(tag()),'tip',added()或modified())”-X.hgtags-rtip-tfiles“PATH/TO/ROOT/OF/TREE”

  • (注意:
    set
    construction定义变更集范围内的所有文件,阅读
    hg帮助文件集
    last(tag()),tip
    是我们从上述第2页开始的范围,
    added()或modified()
    定义必须添加到集合中的类型:所有更改,
    -X.hgtags
    从存档文件hgtags中排除,hgtags自上次标签修订以来已修改,但现场不需要)

  • 您仍然有一个未解决的问题:如果您的工作目录中有在开发过程中被删除的文件,那么您还以某种方式在prod server上删除了它(
    hg archive
    无法处理此问题)
  • 由于第3-4页的原因,我建议您考虑一下“简单的部署方式”:您可以(?)在站点端克隆存储库,使用工作目录作为站点根目录,在本用例中,将新版本部署到站点将非常简单
  • ssh$SERVER

    cd$SIE-ROOT$

    hg up