La publicación de una instantánea JAR en el repositorio de Artifactory Maven no se implementa
Mi equipo está intentando implementar un JAR generado por un trabajo de Jenkins en un repositorio en nuestra instancia de Artifactory Pro 7.6.2 que está configurada como un repositorio de instantáneas de Maven. Sin embargo, al realizar la carga real del archivo JAR generado desde el proyecto, la implementación falla con un error 500.
Esto es lo que está en la salida de la consola del trabajo de 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
En el lado del servidor de Artifactory, se muestra lo siguiente en el registro cuando esto falla (esto se repite para cada archivo que falló, solo pongo un ejemplo aquí):
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, NODES, (991,272)
Waiting XID : {230127897, S} , APP, 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, 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, NODES, (991,272)
Waiting XID : {230127897, S} , APP, SELECT * FROM nodes WHERE repo = ? AND node_path = ? AND depth = ?
Granted XID : {230127895, 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
El trabajo de Jenkins es una canalización declarativa de varias ramas y la implementación de Artifactory se realiza a través del siguiente código dentro del archivo de Jenkins:
...
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")
}
...
El proyecto en sí es un proyecto Java construido con Gradle:
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()
}
En última instancia, terminamos con 5 archivos que deben implementarse (las marcas de tiempo cambian en cada compilación, por supuesto):
- ejemplo-cliente-0.0.1-20200817.130343-1.jar
- ejemplo-cliente-0.0.1-20200817.130343-1-javadoc.jar
- ejemplo-cliente-0.0.1-20200817.130343-1-fuentes.jar
- ejemplo-cliente-0.0.1-20200817.130343-1.módulo
- ejemplo-cliente-0.0.1-20200817.130343-1.pom
El repositorio de Maven (maven-dev) dentro de Artifactory está configurado con las siguientes configuraciones:
- Política de suma de verificación: verificar contra las sumas de verificación del cliente
- Comportamiento de la versión de instantánea de Maven: único
- Máximo de instantáneas únicas:
- Liberaciones de la manija: sin marcar
- Manejar instantáneas: marcado
- Suprimir comprobaciones de coherencia de POM: marcado
Espero que alguien más haya implementado un proyecto como este en un repositorio de Artifactory para señalar lo que está mal. Hemos utilizado Artifactory ampliamente durante varios años, pero no en el contexto de la implementación de compilaciones de instantáneas en un repositorio de Maven.
EDITAR: He reducido el problema al hecho de que estamos tratando de cargar *-sources.jar además del jar principal y el *-javadoc.jar. Si actualizo el filtro de exclusión en la especificación del archivo a lo siguiente, la publicación funciona perfectamente como se esperaba:
"excludePatterns": ["*maven-metadata.xml","*.sha1","*.sha256","*.sha512","*.md5","*sources.jar"],
Así que algo acerca de la publicación de sources.jar lo está desbaratando, ¿alguna idea?
EDIT 2: Bueno, excluir el contenedor de fuentes funcionó durante varias compilaciones y luego comenzó a fallar nuevamente con el mismo error. Funcionará para una compilación o dos, luego fallará por un tiempo, luego volverá a tener algunos éxitos, al parecer.
EDIT 3: También intenté implementar a través de la sintaxis de Artifactory Gradle en lugar del rtUpload
enfoque más genérico. La compilación de Gradle se ejecuta y la información de compilación se publica, pero no se cargan artefactos.
** EDICIÓN 4: ** Lo hice funcionar según las sugerencias a continuación. También actualicé el complemento Artifactory Jenkins a la última versión. Aquí está el fragmento del archivo Jenkins que terminó funcionando en caso de que alguien más tenga un problema similar.
stage('Artifactory Config') {
steps {
rtBuildInfo(maxBuilds: 10, deleteBuildArtifacts: true)
rtGradleDeployer(
id: "rtDeployer",
serverId: "artifactory",
releaseRepo: "gradle-release",
snapshotRepo: "gradle-dev"
)
rtGradleResolver(
id: "rtResolver",
serverId: "artifactory",
repo: "maven"
)
}
}
stage('Build Client'){
steps {
echo "invoking gradle"
rtGradleRun(
tasks: "artifactoryPublish",
useWrapper: true,
deployerId: "rtDeployer",
resolverId: "rtResolver"
)
rtPublishBuildInfo(serverId: "artifactory")
}
}
Respuestas
Sugeriría construir e implementar artefactos de Gradle utilizando la integración de Gradle dedicada que se ofrece en el complemento de artefactos de Jenkins.
Esto podría evitar problemas como los que enfrenta ahora, ya que se desarrolló específicamente para compilaciones de Gradle, a diferencia del comando genérico ( rtUpload
) que está usando actualmente.
Vea este ejemplo de Jenkinsfile para aprender cómo usar fácilmente esta integración en su canalización.
Según el fragmento de registro de errores, pude ver que el error está relacionado con el interbloqueo en las transacciones de la base de datos. Creo que Artifactory se está ejecutando con la base de datos derby predeterminada. El siguiente fragmento de registro de error indica que hubo una situación de punto muerto en Derby,
Causado por: org.apache.derby.iapi.error.StandardException: no se pudo obtener un bloqueo debido a un interbloqueo, el ciclo de bloqueos y esperas es: Bloqueo: FILA, NODOS, (2975,6) Esperando XID: {230127895, S} , APP, SELECT * FROM nodos WHERE repo = ? Y ruta_nodo = ? Y profundidad = ? Concedido XID: {230127897, X} Bloqueo: FILA, NODOS, (991,272) Esperando XID: {230127897, S}, APLICACIÓN, SELECCIONAR * DE nodos DONDE repo =? Y ruta_nodo = ? Y profundidad = ? XID concedido: {230127895, X}
Tenía un JenkinFile similar que despliega Artifacts to Artifactory y nunca enfrenté este problema. Creo que un simple reinicio de Artifactory debería ser suficiente para eliminar Derby DB del estado de interbloqueo.