使用 SVN 在 jenkins 管道脚本中重复更改日志
Duplicate changelogs in jenkins pipeline script with SVN
这个问题与 基本相同,只是我使用的是 subversion,而且没有插件更新对我有用。
我正在使用多分支管道设置加载我的 Jenkinsfile 脚本,并且更新日志在每个新的 checkout scm
.
处被复制
因为在我的构建中我使用了多个工作区,通过 node
在 parallel
块内分配,我正在为每个工作区调用新的签出,并且更新日志重复有点烦人。
面临同样的问题。
我正在执行以下操作,直到发布 SVN 插件的修复程序。
currentBuild.getChangeSets().clear()
checkout scm
注意:您可能必须通过 "In-process Script approval" 页面批准脚本调用。
这将从 Jenkins 作业中清除更改日志。更改日志将由 'checkout scm' 调用再次填充。
更新:检查下面我的编辑。这 "solution" 不起作用,因为在重新启动后将删除的修订添加回来......我不明白为什么,但是......
编辑:
好的,现在我找到了一个新方法:
for(i = 0; i < scm.getLocations().length; i++) {
def location = scm.getLocations()[i]
def svn_url = location.remote
checkout changelog: false, poll: false, scm: [$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[credentialsId: '252ad9ab-2f39-46f5-a77a-6196d1679dee', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: svn_url]], workspaceUpdater: [$class: 'UpdateWithRevertUpdater']]
}
您应该使用 "Pipeline Syntax" 页面来获取正确的凭据。
我试过只使用
checkout changelog: false, scm
但这没有用。所以你必须使用上面显示的长版本。
Ben Herfurth 的回答很好,我只是 post 我对它的最终改编,因为我试图将它包装在一个单一的工作函数中。
这个功能对我有用,因为我只有一个 SVN 存储库要签出,其他所有内容(例如密码)都已经配置好了:
def checkout(){
def svnLocation = scm.locations[0]
checkout(changelog: false, scm: [$class: 'SubversionSCM', locations: [svnLocation], workspaceUpdater: [$class: 'UpdateWithCleanUpdater']])
}
我只是在任何需要新工作副本的地方挂断电话。
node('linux') {
checkout()
// ... run ITs on linux ...
}
node('windows') {
checkout() // doesn't duplicate changelog anymore
// ... run ITs on windows ....
}
希望这对其他人有帮助。
无需重新定义 SCM class,仍然可以参考原始 "scm" 对象并禁用更改日志,如下所示:
checkout(changelog: false, scm: scm)
这将在禁用更改日志生成的同时保留 "checkout scm" 的预期行为。
这个问题与
我正在使用多分支管道设置加载我的 Jenkinsfile 脚本,并且更新日志在每个新的 checkout scm
.
因为在我的构建中我使用了多个工作区,通过 node
在 parallel
块内分配,我正在为每个工作区调用新的签出,并且更新日志重复有点烦人。
面临同样的问题。
我正在执行以下操作,直到发布 SVN 插件的修复程序。
currentBuild.getChangeSets().clear()
checkout scm
注意:您可能必须通过 "In-process Script approval" 页面批准脚本调用。
这将从 Jenkins 作业中清除更改日志。更改日志将由 'checkout scm' 调用再次填充。 更新:检查下面我的编辑。这 "solution" 不起作用,因为在重新启动后将删除的修订添加回来......我不明白为什么,但是......
编辑:
好的,现在我找到了一个新方法:
for(i = 0; i < scm.getLocations().length; i++) {
def location = scm.getLocations()[i]
def svn_url = location.remote
checkout changelog: false, poll: false, scm: [$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[credentialsId: '252ad9ab-2f39-46f5-a77a-6196d1679dee', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: svn_url]], workspaceUpdater: [$class: 'UpdateWithRevertUpdater']]
}
您应该使用 "Pipeline Syntax" 页面来获取正确的凭据。 我试过只使用
checkout changelog: false, scm
但这没有用。所以你必须使用上面显示的长版本。
Ben Herfurth 的回答很好,我只是 post 我对它的最终改编,因为我试图将它包装在一个单一的工作函数中。
这个功能对我有用,因为我只有一个 SVN 存储库要签出,其他所有内容(例如密码)都已经配置好了:
def checkout(){
def svnLocation = scm.locations[0]
checkout(changelog: false, scm: [$class: 'SubversionSCM', locations: [svnLocation], workspaceUpdater: [$class: 'UpdateWithCleanUpdater']])
}
我只是在任何需要新工作副本的地方挂断电话。
node('linux') {
checkout()
// ... run ITs on linux ...
}
node('windows') {
checkout() // doesn't duplicate changelog anymore
// ... run ITs on windows ....
}
希望这对其他人有帮助。
无需重新定义 SCM class,仍然可以参考原始 "scm" 对象并禁用更改日志,如下所示:
checkout(changelog: false, scm: scm)
这将在禁用更改日志生成的同时保留 "checkout scm" 的预期行为。