将快照JAR发布到Artifactory Maven存储库无法部署

问题描述

我的团队正在尝试将Jenkins作业生成的JAR部署到我们设置为Maven快照存储库的Artifactory Pro 7.6.2实例中的存储库中。但是,当从项目中实际上载生成的JAR文件时,部署失败并显示错误500。

这是Jenkins作业的控制台输出中的内容

[consumer_0] deploying artifact: http://<artifactory URL>/maven-dev/com/example/example-client/0.0.1-SNAPSHOT/example-client-0.0.1-20200817.130343-1-javadoc.jar
[consumer_1] deploying artifact: http://<artifactory URL>/maven-dev/com/example/example-client/0.0.1-SNAPSHOT/example-client-0.0.1-20200817.130343-1-sources.jar
[consumer_2] deploying artifact: http://<artifactory URL>/maven-dev/com/example/example-client/0.0.1-SNAPSHOT/example-client-0.0.1-20200817.130343-1.jar
[consumer_1] deploying artifact: http://<artifactory URL>/maven-dev/com/example/example-client/0.0.1-SNAPSHOT/example-client-0.0.1-20200817.130343-1.module
[consumer_0] An exception occurred during execution:
java.lang.RuntimeException: java.io.IOException: Failed to deploy file. Status code: 500 Response message: Artifactory returned the following errors: 
 Status code: 500
    at org.jfrog.build.extractor.clientConfiguration.util.spec.SpecDeploymentConsumer.consumerRun(SpecDeploymentConsumer.java:44)
    at org.jfrog.build.extractor.producerConsumer.ConsumerRunnableBase.run(ConsumerRunnableBase.java:11)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Failed to deploy file. Status code: 500 Response message: Artifactory returned the following errors: 
 Status code: 500
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.uploadFile(ArtifactoryBuildInfoClient.java:685)
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.doDeployArtifact(ArtifactoryBuildInfoClient.java:367)
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.deployArtifact(ArtifactoryBuildInfoClient.java:355)
    at org.jfrog.build.extractor.clientConfiguration.util.spec.SpecDeploymentConsumer.consumerRun(SpecDeploymentConsumer.java:39)
    ... 2 more

[consumer_1] An exception occurred during execution:
java.lang.RuntimeException: java.io.IOException: Failed to deploy file. Status code: 500 Response message: Artifactory returned the following errors: 
 Status code: 500
    at org.jfrog.build.extractor.clientConfiguration.util.spec.SpecDeploymentConsumer.consumerRun(SpecDeploymentConsumer.java:44)
    at org.jfrog.build.extractor.producerConsumer.ConsumerRunnableBase.run(ConsumerRunnableBase.java:11)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Failed to deploy file. Status code: 500 Response message: Artifactory returned the following errors: 
 Status code: 500
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.uploadFile(ArtifactoryBuildInfoClient.java:685)
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.doDeployArtifact(ArtifactoryBuildInfoClient.java:367)
    at org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryBuildInfoClient.deployArtifact(ArtifactoryBuildInfoClient.java:355)
    at org.jfrog.build.extractor.clientConfiguration.util.spec.SpecDeploymentConsumer.consumerRun(SpecDeploymentConsumer.java:39)
    ... 2 more

在Artifactory服务器端,如果失败,则会在日志中显示以下内容(对每个失败的文件重复此操作,这里仅举一个示例):

2020-08-18T22:27:33.042Z [jfrt ] [ERROR] [6c7ca1a483dd3f03] [o.a.r.d.DbStoringRepoMixin:291] [tp-nio-8081-exec-407] - Couldn't save resource maven-dev:com/example/example-client/0.0.1-SNAPSHOT/example-client-0.0.1-20200818.222406-1-sources.jar,reason:
java.lang.reflect.UndeclaredThrowableException: null
    at com.sun.proxy.$Proxy46.next(UnkNown Source)
    at org.artifactory.storage.db.fs.dao.NodesDao.getChildren(NodesDao.java:247)
    at org.artifactory.storage.db.fs.service.FileServiceImpl.loadChildren(FileServiceImpl.java:272)
    at org.artifactory.storage.fs.tree.FolderNode.getChildrenItemNode(FolderNode.java:74)
    at org.artifactory.storage.fs.tree.FolderNode.getChildren(FolderNode.java:56)
    at org.artifactory.maven.MavenMetadataCalculator.folderContainsPoms(MavenMetadataCalculator.java:422)
    at org.artifactory.maven.MavenMetadataCalculator.createSnapshotsMetadata(MavenMetadataCalculator.java:210)
    at org.artifactory.maven.MavenMetadataCalculator.calculateAndSet(MavenMetadataCalculator.java:179)
    at org.artifactory.maven.MavenMetadataCalculator.calculate(MavenMetadataCalculator.java:154)
    at org.artifactory.maven.MavenMetadataServiceImpl.calculateMavenMetadata(MavenMetadataServiceImpl.java:86)
    at jdk.internal.reflect.GeneratedMethodAccessor5156.invoke(UnkNown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:205)
    at com.sun.proxy.$Proxy242.calculateMavenMetadata(UnkNown Source)
    at org.artifactory.repo.interceptor.MavenMetadataCalculationInterceptor.afterCreate(MavenMetadataCalculationInterceptor.java:73)
    at org.artifactory.repo.interceptor.storage.StorageInterceptorsImpl.afterCreate(StorageInterceptorsImpl.java:69)
    at jdk.internal.reflect.GeneratedMethodAccessor459.invoke(UnkNown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:205)
    at com.sun.proxy.$Proxy234.afterCreate(UnkNown Source)
    at org.artifactory.repo.db.DbStoringRepoMixin.invokeAfterCreateInterceptors(DbStoringRepoMixin.java:407)
    at org.artifactory.repo.db.DbStoringRepoMixin.saveResource(DbStoringRepoMixin.java:245)
    at org.artifactory.repo.db.DbLocalRepo.saveResource(DbLocalRepo.java:162)
    at org.artifactory.repo.service.RepositoryServiceImpl.saveResourceInTransaction(RepositoryServiceImpl.java:1915)
    at jdk.internal.reflect.GeneratedMethodAccessor477.invoke(UnkNown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:295)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
    at com.sun.proxy.$Proxy193.saveResourceInTransaction(UnkNown Source)
    at org.artifactory.repo.service.RepositoryServiceImpl.saveResource(RepositoryServiceImpl.java:1903)
    at jdk.internal.reflect.GeneratedMethodAccessor526.invoke(UnkNown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:205)
    at com.sun.proxy.$Proxy193.saveResource(UnkNown Source)
    at org.artifactory.engine.UploadServiceImpl.uploadItemWithContent(UploadServiceImpl.java:574)
    at org.artifactory.engine.UploadServiceImpl.uploadItemWithProvidedContent(UploadServiceImpl.java:554)
    at org.artifactory.engine.UploadServiceImpl.uploadItem(UploadServiceImpl.java:429)
    at org.artifactory.engine.UploadServiceImpl.uploadFile(UploadServiceImpl.java:420)
    at org.artifactory.engine.UploadServiceImpl.uploadArtifact(UploadServiceImpl.java:402)
    at org.artifactory.engine.UploadServiceImpl.adjustResponseAndUpload(UploadServiceImpl.java:223)
    at org.artifactory.engine.UploadServiceImpl.validateRequestAndUpload(UploadServiceImpl.java:189)
    at org.artifactory.engine.UploadServiceImpl.upload(UploadServiceImpl.java:132)
    at jdk.internal.reflect.GeneratedMethodAccessor520.invoke(UnkNown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.artifactory.request.aop.RequestAdvice.invoke(RequestAdvice.java:67)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
    at com.sun.proxy.$Proxy238.upload(UnkNown Source)
    at org.artifactory.webapp.servlet.RepoFilter.doUpload(RepoFilter.java:284)
    at org.artifactory.webapp.servlet.RepoFilter.execute(RepoFilter.java:176)
    at org.artifactory.webapp.servlet.RepoFilter.doFilter(RepoFilter.java:97)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.artifactory.webapp.servlet.AccessFilter.useAuthenticationAndContinue(AccessFilter.java:413)
    at org.artifactory.webapp.servlet.AccessFilter.authenticateAndExecute(AccessFilter.java:301)
    at org.artifactory.webapp.servlet.AccessFilter.doFilterInternal(AccessFilter.java:176)
    at org.artifactory.webapp.servlet.AccessFilter.doFilter(AccessFilter.java:127)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.artifactory.webapp.servlet.RequestFilter.doFilter(RequestFilter.java:78)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.artifactory.webapp.servlet.ArtifactoryCsrfFilter.doFilter(ArtifactoryCsrfFilter.java:86)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:164)
    at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:80)
    at org.artifactory.webapp.servlet.SessionFilter.doFilter(SessionFilter.java:62)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.artifactory.webapp.servlet.ArtifactoryTracingFilter.doFilter(ArtifactoryTracingFilter.java:27)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.artifactory.webapp.servlet.ArtifactoryFilter.doFilter(ArtifactoryFilter.java:126)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
    at org.apache.catalina.valves.rewrite.RewriteValve.invoke(RewriteValve.java:305)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:615)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1627)
    at org.apache.tomcat.util.net.socketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.reflect.InvocationTargetException: null
    at jdk.internal.reflect.GeneratedMethodAccessor34.invoke(UnkNown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.jfrog.storage.wrapper.ResultSetWrapper.invoke(ResultSetWrapper.java:85)
    ... 109 common frames omitted
Caused by: java.sql.sqlTransactionRollbackException: A lock Could not be obtained due to a deadlock,cycle of locks and waiters is:
Lock : ROW,NODES,(2975,6)
  Waiting XID : {230127895,S},APP,SELECT * FROM nodes WHERE repo = ? AND node_path = ? AND depth = ?
  Granted XID : {230127897,X} 
Lock : ROW,(991,272)
  Waiting XID : {230127897,SELECT * FROM nodes WHERE repo = ? AND node_path = ? AND depth = ?
  Granted XID : {230127895,X} 
. The selected victim is XID : 230127895.
    at org.apache.derby.impl.jdbc.sqlExceptionFactory.getsqlException(UnkNown Source)
    at org.apache.derby.impl.jdbc.Util.generateCssqlException(UnkNown Source)
    at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInsqlException(UnkNown Source)
    at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(UnkNown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.handleException(UnkNown Source)
    at org.apache.derby.impl.jdbc.ConnectionChild.handleException(UnkNown Source)
    at org.apache.derby.impl.jdbc.EmbedResultSet.cloSEOnTransactionError(UnkNown Source)
    at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(UnkNown Source)
    at org.apache.derby.impl.jdbc.EmbedResultSet.next(UnkNown Source)
    ... 113 common frames omitted
Caused by: org.apache.derby.iapi.error.StandardException: A lock Could not be obtained due to a deadlock,X} 
. The selected victim is XID : 230127895.
    at org.apache.derby.iapi.error.StandardException.newException(UnkNown Source)
    at org.apache.derby.iapi.error.StandardException.newException(UnkNown Source)
    at org.apache.derby.impl.services.locks.Deadlock.buildException(UnkNown Source)
    at org.apache.derby.impl.services.locks.ConcurrentLockSet.lockObject(UnkNown Source)
    at org.apache.derby.impl.services.locks.ConcurrentLockSet.zeroDurationLockObject(UnkNown Source)
    at org.apache.derby.impl.services.locks.AbstractPool.zeroDurationlockObject(UnkNown Source)
    at org.apache.derby.impl.services.locks.ConcurrentPool.zeroDurationlockObject(UnkNown Source)
    at org.apache.derby.impl.store.raw.xact.RowLocking2nohold.lockRecordForRead(UnkNown Source)
    at org.apache.derby.impl.store.access.heap.HeapController.lockRow(UnkNown Source)
    at org.apache.derby.impl.store.access.heap.HeapController.lockRow(UnkNown Source)
    at org.apache.derby.impl.store.access.btree.index.B2IRowLocking3.lockRowOnPage(UnkNown Source)
    at org.apache.derby.impl.store.access.btree.index.B2IRowLocking3._lockScanRow(UnkNown Source)
    at org.apache.derby.impl.store.access.btree.index.B2IRowLockingRR.lockScanRow(UnkNown Source)
    at org.apache.derby.impl.store.access.btree.BTreeForwardScan.fetchRows(UnkNown Source)
    at org.apache.derby.impl.store.access.btree.BTreeScan.fetchNextGroup(UnkNown Source)
    at org.apache.derby.impl.sql.execute.BulkTableScanResultSet.reloadArray(UnkNown Source)
    at org.apache.derby.impl.sql.execute.BulkTableScanResultSet.getNextRowCore(UnkNown Source)
    at org.apache.derby.impl.sql.execute.IndexRowToBaseRowResultSet.getNextRowCore(UnkNown Source)
    at org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(UnkNown Source)
    at org.apache.derby.impl.sql.execute.BasicnoputResultSetImpl.getNextRow(UnkNown Source)
    ... 115 common frames omitted

Jenkins作业是一个声明式多分支管道,并且Artifactory部署是通过Jenkinsfile中的以下代码完成的:

...
    dir("mavenOut/snapshot/"){
        rtBuildInfo(maxBuilds: 10)

        rtUpload(
            serverId: "artifactory",spec: """{
                "files":[
                    {
                        "pattern": "**/*","excludePatterns": ["*maven-Metadata.xml","*.sha1","*.sha256","*.sha512","*.md5"],"target":  "maven-dev/","flat": "false"
                    }
                ]
            }"""
        )

        rtPublishBuildInfo(serverId: "artifactory")
    }
...

该项目本身是使用Gradle构建的Java项目:

plugins {
    id 'java-library'
    id 'maven-publish'
    id 'maven'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'javax.websocket:javax.websocket-api:1.0'
    implementation 'org.springframework:spring-websocket:5.2.7.RELEASE'
    implementation 'org.springframework:spring-messaging:5.2.7.RELEASE'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.2'
    implementation 'com.google.code.gson:gson:2.8.6'
    implementation 'org.apache.tomcat.embed:tomcat-embed-websocket:9.0.37'
    
    testCompile('org.springframework.boot:spring-boot-starter-test:2.3.0.RELEASE') {
        exclude group: 'org.junit.vintage',module: 'junit-vintage-engine'
    }
}

java {
    withJavadocJar()
    withSourcesJar()
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            artifactId = 'example-client'
            from components.java
        }
    }
    repositories {
        maven {
            def releasesRepoUrl = "$buildDir/mavenOut/release"
            def snapshotsRepoUrl = "$buildDir/mavenOut/snapshot"
            url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
        }
    }
}

test {
    useJUnitPlatform()
}

最终,我们最终需要部署5个文件(当然,每个版本的时间戳都会改变):

  • example-client-0.0.1-20200817.130343-1.jar
  • example-client-0.0.1-20200817.130343-1-javadoc.jar
  • example-client-0.0.1-20200817.130343-1-sources.jar
  • example-client-0.0.1-20200817.130343-1.module
  • example-client-0.0.1-20200817.130343-1.pom

Artifactory中的Maven存储库(maven-dev)使用以下设置进行设置:

  • 校验和策略:针对客户端校验和进行验证
  • Maven快照版本行为:唯一
  • 最大唯一快照数:
  • 手柄释放:未选中
  • 处理快照:已选中
  • 禁止POM一致性检查:已选中

我希望其他人已经将这样的项目部署到了​​Artifactory仓库中,以指出出了什么问题。我们已经广泛使用Artifactory数年了,但并不是在将快照构建部署到Maven存储库的情况下使用。

编辑:我已将问题缩小为以下事实:除了主jar和* -javadoc.jar外,我们还尝试上传* -sources.jar。如果我将文件规范中的排除过滤器更新为以下内容,则发布将按预期正常运行:

"excludePatterns": ["*maven-Metadata.xml","*.md5","*sources.jar"],

那么关于source.jar的发布正在抛出它,有什么想法吗?

编辑2:好吧,排除用于多个构建的source jar之后,它又因相同的错误而再次失败。它将在一个或两个构建版本中起作用,然后失败一段时间,然后又恢复到成功的状态。

编辑3:我还尝试通过Artifactory Gradle语法而不是更通用的rtUpload方法进行部署。 Gradle构建会运行,buildinfo会发布,但不会上传任何工件。

**编辑4:** 我根据以下建议使其工作。我还将Artifactory Jenkins插件更新为最新版本。这是Jenkinsfile中的代码段,最终可以正常工作,以防其他人遇到类似问题。

   stage('Artifactory Config') {
        steps {
            rtBuildInfo(maxBuilds: 10,deleteBuildArtifacts: true)
            
            rtGradleDeployer(
                id: "rtDeployer",serverId: "artifactory",releaseRepo: "gradle-release",snapshotRepo: "gradle-dev"
            )
            
            rtGradleResolver(
                id: "rtResolver",repo: "maven"
            )
        }
    }

    stage('Build Client'){
        steps {
            echo "invoking gradle"

            rtGradleRun(
                tasks: "artifactoryPublish",useWrapper: true,deployerId: "rtDeployer",resolverId: "rtResolver"
            )
            
            rtPublishBuildInfo(serverId: "artifactory")
        }
    }

解决方法

我建议使用Jenkins Artifactory插件中提供的专用Gradle integration构建和部署Gradle工件。

与当前使用的通用命令(rtUpload不同,这可能是因为它是专门为Gradle构建而开发的,因此可以避免像现在遇到的问题。

请参阅此Jenkinsfile example,以了解如何在管道中轻松使用此集成。

,

基于错误日志片段,我可以看到该错误与数据库事务中的死锁有关。我认为Artifactory正在使用默认的derby DB运行。 下面的错误日志代码片段表明Derby中存在死锁情况,

由以下原因引起:org.apache.derby.iapi.error.StandardException:由于死锁而无法获取锁,锁和服务员的周期为: 锁:ROW,NODES,(2975,6) 等待的XID:{230127895,S},APP,SELECT * FROM节点WHOE repo =? AND node_path =? AND深度=? 授予的XID:{230127897,X} 锁:ROW,NODES,(991,272) 等待的XID:{230127897,S},APP,SELECT * FROM节点WHERE repo =? AND node_path =? AND深度=? 授予的XID:{230127895,X}

我有一个类似的JenkinFile,它将Artifacts部署到Artifactory,但是从未遇到过这个问题。我相信,只要重新启动Artifactory,就足以从死锁状态中删除Derby DB。