php - Jenkins Mercurial 如何从构建中包含的所有变更集中获取所有文件
问题描述
我对 Jenkins 很陌生,但是随着我的项目开始增长,对完整 CI 的需求也在增加。所以我希望有一个部署任务,如果所有通过,它将运行。现在,由于我在服务器上使用 PHP,我不想通过 SSH 发布每个构建的整个应用程序。我只想推送已更改的文件。现在在詹金斯我可以得到修订,但它只向我显示最新的修订。我目前正在使用批处理文件来获取变量值。我需要的是构建中的变更集列表,因为可能不止一个。然后使用 hg log -r %1:%2 --template "{file_mods}{file_adds}\n" 使用 from 和 too 来获取列表。
无论如何,我都愿意实现这个 groovy/powershell 或 bat 文件。但是这方面的任何指导都会有所帮助,因为我在浏览有关该主题的文章时有些迷失。我会认为这将是一件常见的事情,所以也许我错过了一些东西。
提前致谢
院长
解决方案
只是肮脏的想法,而不是现成的解决方案
注释
我只想推送已更改的文件
明显的问题|补充:“......自/this point in history/以来发生了变化”。您必须以某种方式存储这些数据(部署的最新变更集)并将其提供给 Jenkins 工作
使用 hg log -r %1:%2 --template "{file_mods}{file_adds}\n" 使用
不,您甚至可以在第一步使用命令,该命令将为您准备所需的文件树,并且您拥有它:阅读hg help archive
提示
您可以标记每个通过的测试和部署的变更集,以便以后获得此信息。您真的可以使用任何格式的标签(因为无论使用什么名称,最新标签总是可以检测为“最新”),我建议选择模式,这将产生唯一的 ID(只是在处理过程中不那么令人头疼),但您可以有类似的东西
hg tag -f DEPLOY
(-f 用于重新使用标签的现有名称,不是最好的样式,但可能)通过在最后一步为任何标签模式成功部署(而不是构建)添加标签,您始终可以拥有一组更改集以在下次部署:它的范围从最新标签到提示。这将是
-r "last(tag()):tip"
毕竟,你有命令,它构建要部署的文件树,比如
hg archive "-Iset:status('last(tag())', 'tip', added() or modified())" -X .hgtags -rtip -tfiles "PATH/TO/ROOT/OF/TREE"
(注意:set
构造定义变更集范围内的所有文件, readhg help filesets
是last(tag()), tip
我们从上面 p.2 开始的范围,added() or modified()
定义必须添加哪些类型来设置:所有更改,-X .hgtags
从存档文件 hgtags 中排除,自上次标记修订以来已修改,但现场不需要)
- 您仍然有一个未解决的问题:如果您在工作目录中有文件,在开发过程中被删除,您也以某种方式在 prod-server 上将其删除(
hg archive
无法处理) - 由于第 3-4 页,我建议考虑“简单的部署方式”:您可以(?)在站点端克隆存储库,使用工作目录作为站点根目录,在这个用例中将新版本部署到站点将非常容易,因为
ssh $SERVER
cd $SIE-ROOT$
hg up
推荐阅读
- python - 有什么方法可以通过 selenium 获取元素的类名
- mysql - 不存在查询
- java - 为什么我不能将 JFrame 中的函数调用到另一个 JFrame?
- android - 如何在包含 ArrayList 的类上实现 Parcelable
? - google-cloud-platform - 删除 Google Cloud Datastore 索引
- java - TestNG 找不到具有继承性的测试方法
- firebase - 直接从 express-fileupload 将图像上传到 Firebase 存储
- pip - 如何将 NEST 的 Python 模块安装到特定的站点包目录中?
- javascript - 在matter.js中按下一个键后,如何使一个事体isStatic为假?
- python - Python pandas 样式“pd.style.applymap.format('{:,.2f}%', subset=col)”不使用任何引擎将“%”符号保存到 excel