SvnAnt 挂起提交重命名的 SVN 文件夹
SvnAnt hangs committing renamed SVN folder
我正在使用 Jenkins 执行构建和 运行 我的 Ant 代码。
Jenkins 负责将 SVN 文件检出到我的工作区。我使用 SvnAnt 提交对文件的更改。在这种情况下,我会在需要时提交新的 FLA 文件。这适用于我的所有构建,但一个构建的主要区别在于,在源 SVN 文件中,检出的文件夹之一中存在错误拼写,用户 SVN 重命名了该文件夹,并且检出的内容位于构建节点已删除。当此构建被修改(需要添加新的 FLA 文件)时,构建一直到提交部分并挂起。
代码如下:
<!-- load the svn task -->
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath" />
<target name="commitFLA">
<echo>=== COMMIT FLA FILES TO THE ${dita.map.filename.root} MODULE FOLDER ===</echo>
<svn username="${username}" password="${password}">
<add dir="${workspace}${dita.map.filename.root}\" force="true" />
<commit dir="${workspace}${dita.map.filename.root}" message="Added FLA Template Files for the ${dita.map.filename.root} Module" />
</svn>
</target>
下面是 Jenkins 显示的内容:
commitFLA:
[echo] === COMMIT FLA FILES TO THE TTWCS_Sys_Admin MODULE FOLDER ===
[svn] <Add> started ...
[svn] <Add> finished.
[svn] <Commit> started ..
现在,如果我已经提交了所有文件并且在构建作业中没有进行任何更改,它就可以正常工作:
commitFLA:
[echo] === COMMIT FLA FILES TO THE TTWCS_Sys_Admin MODULE FOLDER ===
[svn] <Add> started ...
[svn] <Add> finished.
[svn] <Commit> started ...
[svn] <Commit> finished.
此时我不知道该做什么。我需要知道是否有日志输出,我可以将其输出,以便我知道问题出在哪里。此代码用于多个构建作业,除了这个和其他一些与此问题无关但使用类似提交代码结构的作业外,它们都工作正常。我希望解决这个问题可以解决其他问题。
编辑:根据 Chad Nouis 的要求从 JSTACK 添加 Stacktraces
2016-01-07 11:39:02
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.45-b02 mixed mode):
"Timer-0" #27 daemon prio=5 os_prio=0 tid=0x00000000546c3800 nid=0x5120 in Object.wait() [0x0000000056e1e000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Unknown Source)
- locked <0x00000000daf5c040> (a java.util.TaskQueue)
at java.util.TimerThread.run(Unknown Source)
"Thread-11" #25 daemon prio=5 os_prio=0 tid=0x0000000053d87000 nid=0x4d88 in Object.wait() [0x0000000056cdf000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
- locked <0x00000000daf5c1d0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at org.tmatesoft.svn.core.javahl.SVNClientImplTracker.run(SVNClientImplTracker.java:53)
at java.lang.Thread.run(Unknown Source)
"Service Thread" #8 daemon prio=9 os_prio=0 tid=0x0000000052325800 nid=0x5080 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C1 CompilerThread1" #7 daemon prio=9 os_prio=2 tid=0x0000000052320800 nid=0x4544 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" #6 daemon prio=9 os_prio=2 tid=0x00000000522c7000 nid=0x4e58 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Attach Listener" #5 daemon prio=5 os_prio=2 tid=0x00000000522c2800 nid=0x5178 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" #4 daemon prio=9 os_prio=2 tid=0x00000000522c1000 nid=0x5114 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" #3 daemon prio=8 os_prio=1 tid=0x0000000001e99000 nid=0x53a4 in Object.wait() [0x000000005285f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
- locked <0x00000000d5577718> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
"Reference Handler" #2 daemon prio=10 os_prio=2 tid=0x0000000001e97800 nid=0x526c in Object.wait() [0x00000000526de000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Unknown Source)
at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
- locked <0x00000000d55778d0> (a java.lang.ref.Reference$Lock)
"main" #1 prio=5 os_prio=0 tid=0x00000000003af000 nid=0x50c4 runnable [0x00000000020fd000]
java.lang.Thread.State: RUNNABLE
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
- locked <0x00000000c45b9478> (a java.net.DualStackPlainSocketImpl)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.security.ssl.SSLSocketImpl.connect(Unknown Source)
at org.tmatesoft.svn.core.internal.util.SVNSocketFactory.createSSLSocket(SVNSocketFactory.java:65)
at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.connect(HTTPConnection.java:167)
at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:304)
at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:257)
at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:245)
at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.exchangeCapabilities(DAVConnection.java:454)
at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.open(DAVConnection.java:97)
at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.openConnection(DAVRepository.java:643)
at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.getRepositoryRoot(DAVRepository.java:128)
at org.tmatesoft.svn.core.wc.SVNCommitClient.doCommit(SVNCommitClient.java:996)
at org.tmatesoft.svn.core.wc.SVNCommitClient.doCommit(SVNCommitClient.java:891)
at org.tmatesoft.svn.core.wc.SVNCommitClient.doCommit(SVNCommitClient.java:823)
at org.tmatesoft.svn.core.javahl.SVNClientImpl.commit(SVNClientImpl.java:665)
at org.tmatesoft.svn.core.javahl.SVNClientImpl.commit(SVNClientImpl.java:648)
at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.commit(AbstractJhlClientAdapter.java:310)
at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.commit(AbstractJhlClientAdapter.java:284)
at org.tigris.subversion.svnant.commands.Commit.svnCommitDir(Unknown Source)
at org.tigris.subversion.svnant.commands.Commit.execute(Unknown Source)
at org.tigris.subversion.svnant.commands.SvnCommand.executeCommand(Unknown Source)
at org.tigris.subversion.svnant.SvnTask.execute(Unknown Source)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:390)
at org.apache.tools.ant.Target.performTasks(Target.java:411)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1397)
at org.apache.tools.ant.Project.executeTarget(Project.java:1366)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1249)
at org.apache.tools.ant.Main.runBuild(Main.java:801)
at org.apache.tools.ant.Main.startAnt(Main.java:218)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
"VM Thread" os_prio=2 tid=0x0000000001e91800 nid=0x4fb0 runnable
"VM Periodic Task Thread" os_prio=2 tid=0x000000005232a800 nid=0x5330 waiting on condition
JNI global references: 99
我已找到解决此问题的方法。问题是 SVN 的签出版本(来自 Jenkins 插件)对于提交回我们的 jenkins 服务器来说太低了。如果我使用 SVNAnt 检出我想提交更改的存储库,那么我可以使用 SVNAnt 将 Add/Commit 新文件毫无问题地发送到 SVN。
我正在使用 Jenkins 执行构建和 运行 我的 Ant 代码。
Jenkins 负责将 SVN 文件检出到我的工作区。我使用 SvnAnt 提交对文件的更改。在这种情况下,我会在需要时提交新的 FLA 文件。这适用于我的所有构建,但一个构建的主要区别在于,在源 SVN 文件中,检出的文件夹之一中存在错误拼写,用户 SVN 重命名了该文件夹,并且检出的内容位于构建节点已删除。当此构建被修改(需要添加新的 FLA 文件)时,构建一直到提交部分并挂起。
代码如下:
<!-- load the svn task -->
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath" />
<target name="commitFLA">
<echo>=== COMMIT FLA FILES TO THE ${dita.map.filename.root} MODULE FOLDER ===</echo>
<svn username="${username}" password="${password}">
<add dir="${workspace}${dita.map.filename.root}\" force="true" />
<commit dir="${workspace}${dita.map.filename.root}" message="Added FLA Template Files for the ${dita.map.filename.root} Module" />
</svn>
</target>
下面是 Jenkins 显示的内容:
commitFLA:
[echo] === COMMIT FLA FILES TO THE TTWCS_Sys_Admin MODULE FOLDER ===
[svn] <Add> started ...
[svn] <Add> finished.
[svn] <Commit> started ..
现在,如果我已经提交了所有文件并且在构建作业中没有进行任何更改,它就可以正常工作:
commitFLA:
[echo] === COMMIT FLA FILES TO THE TTWCS_Sys_Admin MODULE FOLDER ===
[svn] <Add> started ...
[svn] <Add> finished.
[svn] <Commit> started ...
[svn] <Commit> finished.
此时我不知道该做什么。我需要知道是否有日志输出,我可以将其输出,以便我知道问题出在哪里。此代码用于多个构建作业,除了这个和其他一些与此问题无关但使用类似提交代码结构的作业外,它们都工作正常。我希望解决这个问题可以解决其他问题。
编辑:根据 Chad Nouis 的要求从 JSTACK 添加 Stacktraces
2016-01-07 11:39:02
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.45-b02 mixed mode):
"Timer-0" #27 daemon prio=5 os_prio=0 tid=0x00000000546c3800 nid=0x5120 in Object.wait() [0x0000000056e1e000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Unknown Source)
- locked <0x00000000daf5c040> (a java.util.TaskQueue)
at java.util.TimerThread.run(Unknown Source)
"Thread-11" #25 daemon prio=5 os_prio=0 tid=0x0000000053d87000 nid=0x4d88 in Object.wait() [0x0000000056cdf000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
- locked <0x00000000daf5c1d0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at org.tmatesoft.svn.core.javahl.SVNClientImplTracker.run(SVNClientImplTracker.java:53)
at java.lang.Thread.run(Unknown Source)
"Service Thread" #8 daemon prio=9 os_prio=0 tid=0x0000000052325800 nid=0x5080 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C1 CompilerThread1" #7 daemon prio=9 os_prio=2 tid=0x0000000052320800 nid=0x4544 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" #6 daemon prio=9 os_prio=2 tid=0x00000000522c7000 nid=0x4e58 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Attach Listener" #5 daemon prio=5 os_prio=2 tid=0x00000000522c2800 nid=0x5178 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" #4 daemon prio=9 os_prio=2 tid=0x00000000522c1000 nid=0x5114 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" #3 daemon prio=8 os_prio=1 tid=0x0000000001e99000 nid=0x53a4 in Object.wait() [0x000000005285f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
- locked <0x00000000d5577718> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
"Reference Handler" #2 daemon prio=10 os_prio=2 tid=0x0000000001e97800 nid=0x526c in Object.wait() [0x00000000526de000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Unknown Source)
at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
- locked <0x00000000d55778d0> (a java.lang.ref.Reference$Lock)
"main" #1 prio=5 os_prio=0 tid=0x00000000003af000 nid=0x50c4 runnable [0x00000000020fd000]
java.lang.Thread.State: RUNNABLE
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
- locked <0x00000000c45b9478> (a java.net.DualStackPlainSocketImpl)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.security.ssl.SSLSocketImpl.connect(Unknown Source)
at org.tmatesoft.svn.core.internal.util.SVNSocketFactory.createSSLSocket(SVNSocketFactory.java:65)
at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.connect(HTTPConnection.java:167)
at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:304)
at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:257)
at org.tmatesoft.svn.core.internal.io.dav.http.HTTPConnection.request(HTTPConnection.java:245)
at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.exchangeCapabilities(DAVConnection.java:454)
at org.tmatesoft.svn.core.internal.io.dav.DAVConnection.open(DAVConnection.java:97)
at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.openConnection(DAVRepository.java:643)
at org.tmatesoft.svn.core.internal.io.dav.DAVRepository.getRepositoryRoot(DAVRepository.java:128)
at org.tmatesoft.svn.core.wc.SVNCommitClient.doCommit(SVNCommitClient.java:996)
at org.tmatesoft.svn.core.wc.SVNCommitClient.doCommit(SVNCommitClient.java:891)
at org.tmatesoft.svn.core.wc.SVNCommitClient.doCommit(SVNCommitClient.java:823)
at org.tmatesoft.svn.core.javahl.SVNClientImpl.commit(SVNClientImpl.java:665)
at org.tmatesoft.svn.core.javahl.SVNClientImpl.commit(SVNClientImpl.java:648)
at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.commit(AbstractJhlClientAdapter.java:310)
at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.commit(AbstractJhlClientAdapter.java:284)
at org.tigris.subversion.svnant.commands.Commit.svnCommitDir(Unknown Source)
at org.tigris.subversion.svnant.commands.Commit.execute(Unknown Source)
at org.tigris.subversion.svnant.commands.SvnCommand.executeCommand(Unknown Source)
at org.tigris.subversion.svnant.SvnTask.execute(Unknown Source)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:390)
at org.apache.tools.ant.Target.performTasks(Target.java:411)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1397)
at org.apache.tools.ant.Project.executeTarget(Project.java:1366)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1249)
at org.apache.tools.ant.Main.runBuild(Main.java:801)
at org.apache.tools.ant.Main.startAnt(Main.java:218)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
"VM Thread" os_prio=2 tid=0x0000000001e91800 nid=0x4fb0 runnable
"VM Periodic Task Thread" os_prio=2 tid=0x000000005232a800 nid=0x5330 waiting on condition
JNI global references: 99
我已找到解决此问题的方法。问题是 SVN 的签出版本(来自 Jenkins 插件)对于提交回我们的 jenkins 服务器来说太低了。如果我使用 SVNAnt 检出我想提交更改的存储库,那么我可以使用 SVNAnt 将 Add/Commit 新文件毫无问题地发送到 SVN。