在 Jenkins SCM 管道中确定 运行 p4.run("sync") 之后的 perforce 更改列表编号
Determine perforce changelist number after running p4.run("sync") in Jenkins SCM pipeline
在 Jenkins 服务器上,安装了 Perforce 插件 (P4)。
在我的 Jenkins 服务器作业管道中(在 groovy-lang 中实现为 shared library),有一个管道阶段可以从 perforce 同步到 jenkins 工作区,如下所示:
p4.run("sync")
我想确定此操作的更改列表编号。我需要在管道的后期使用这个变更列表编号。
我想做如下:
p4.run("sync")
changelist_number = p4.run("changes -m1 #have")
这行得通吗?或者给我一个更好的解决方案。我对这个话题也很陌生。如果你能解释一下这一切是什么意思就太好了。
如果您 运行 处于标记模式,则更改列表编号(即与任何同步修订关联的最大更改列表编号)作为 p4 sync
输出的一部分返回:
C:\Perforce\test\merge>p4 changes ...
Change 226 on 2020/11/12 by Samwise@Samwise-dvcs-1509687817 'foo'
Change 202 on 2020/10/28 by Samwise@Samwise-dvcs-1509687817 'Populate //stream/test.'
C:\Perforce\test\merge>p4 -Ztag sync ...
... depotFile //stream/test/merge/foo.txt
... clientFile c:\Perforce\test\merge\foo.txt
... rev 2
... action updated
... fileSize 20
... totalFileSize 20
... totalFileCount 1
... change 226
标记的输出被转换为由 run
方法返回的字典,因此您应该可以这样做:
changelist_number = p4.run("sync")[0]["change"]
同步并获取更改列表编号作为单个操作。
这里有一些极端情况 -- 删除的文件不会同步,因此删除的修订不会计入该更改列表编号。
一个更稳妥的方法是本末倒置——获取当前的更改列表编号(从软件仓库中获取,不限于您客户端中的内容),然后同步到该确切编号。这样就保证了一致性;如果在这两个命令之间提交了新的更改列表,您存储的更改列表编号仍然与您同步到的编号相匹配。
changelist_number = p4.run("changes", "-m1", "-ssubmitted")[0]["change"]
p4.run("sync", "@{changelist_number}")
同步到该变更列表编号的任何其他客户端保证获得相同的修订集(受其 View
约束)。
在 Jenkins 服务器上,安装了 Perforce 插件 (P4)。
在我的 Jenkins 服务器作业管道中(在 groovy-lang 中实现为 shared library),有一个管道阶段可以从 perforce 同步到 jenkins 工作区,如下所示:
p4.run("sync")
我想确定此操作的更改列表编号。我需要在管道的后期使用这个变更列表编号。
我想做如下:
p4.run("sync")
changelist_number = p4.run("changes -m1 #have")
这行得通吗?或者给我一个更好的解决方案。我对这个话题也很陌生。如果你能解释一下这一切是什么意思就太好了。
如果您 运行 处于标记模式,则更改列表编号(即与任何同步修订关联的最大更改列表编号)作为 p4 sync
输出的一部分返回:
C:\Perforce\test\merge>p4 changes ...
Change 226 on 2020/11/12 by Samwise@Samwise-dvcs-1509687817 'foo'
Change 202 on 2020/10/28 by Samwise@Samwise-dvcs-1509687817 'Populate //stream/test.'
C:\Perforce\test\merge>p4 -Ztag sync ...
... depotFile //stream/test/merge/foo.txt
... clientFile c:\Perforce\test\merge\foo.txt
... rev 2
... action updated
... fileSize 20
... totalFileSize 20
... totalFileCount 1
... change 226
标记的输出被转换为由 run
方法返回的字典,因此您应该可以这样做:
changelist_number = p4.run("sync")[0]["change"]
同步并获取更改列表编号作为单个操作。
这里有一些极端情况 -- 删除的文件不会同步,因此删除的修订不会计入该更改列表编号。
一个更稳妥的方法是本末倒置——获取当前的更改列表编号(从软件仓库中获取,不限于您客户端中的内容),然后同步到该确切编号。这样就保证了一致性;如果在这两个命令之间提交了新的更改列表,您存储的更改列表编号仍然与您同步到的编号相匹配。
changelist_number = p4.run("changes", "-m1", "-ssubmitted")[0]["change"]
p4.run("sync", "@{changelist_number}")
同步到该变更列表编号的任何其他客户端保证获得相同的修订集(受其 View
约束)。