es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

clave API de Artifactory de Spring Cloud Contract

Estoy utilizando Spring Cloud Contract Verifier en un proyecto de gradle.

Mis contratos se encuentran en un repositorio separado publicado en Artifactory. Por lo tanto, utilizo “REMOTE” como valor de contractMode.

Nuestro Artifactory no admite autenticación de usuario/contraseña. Solo podemos usar una clave de API de Artifactory.

Por lo tanto, pasamos la clave de API de Artifactory como valor del encabezado HTTP X-JFrog-Art-Api. Esto funciona para descargar las dependencias “normales” de Gradle.

Desafortunadamente, la gestión de dependencias de Spring Cloud Contract no se basa en la autenticación de Gradle.

Por lo tanto, estamos obteniendo estos errores en nuestras compilaciones:

Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: No se pudo encontrar el artefacto com.mycompany:myservice-artifactid:jar:stubs:0.0.5 en remote0 (https://artifactoryUrl.com/maven-virtual)
at shaded.org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:423)
at shaded.org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:225)
at shaded.org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:202)
at shaded.org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact(DefaultRepositorySystem.java:257)
at org.springframework.cloud.contract.stubrunner.AetherStubDownloader.unpackedJar(AetherStubDownloader.java:185)
… 211 more
Caused by: org.eclipse.aether.transfer.ArtifactNotFoundException: No se pudo encontrar el artefacto com.mycompany:myservice-artifactid:jar:stubs:0.0.5 en remote0 (https://artifactoryUrl.com/maven-virtual)

¿Existe alguna forma de utilizar una clave de API de Artifactory con Spring Cloud Contract?

Aquí está mi configuración:

En la sección de plugins:

plugins {
….
id “org.springframework.cloud.contract” version “2.2.2.RELEASE”
}

La configuración del contrato DSL:

contracts {
testFramework = TestFramework.JUNIT5
contractRepository {
repositoryUrl = artifactoryRepoUrl
}
contractDependency {
stringNotation = ‘com.mycompany:myservice-artifactid:0.0.5’
}
contractsPath = “contracts”
contractsMode = “REMOTE”
baseClassForTests “com.mycompany.myservice.ServiceRestBase”
}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, Spring Cloud Contract no tiene soporte integrado para la autenticación con clave de API de Artifactory. Sin embargo, hay algunas soluciones alternativas que puedes probar.

    En primer lugar, puedes intentar configurar Gradle para usar la clave de API de Artifactory en todas las solicitudes de repositorio. Puedes hacer esto agregando lo siguiente a tu archivo ~/.gradle/init.gradle:

    allprojects {
        repositories {
            maven {
                url "${artifactoryUrl}/maven-virtual"
                credentials {
                    username "apikey"
                    password artifactoryApiKey
                }
            }
        }
    }
    

    Esto debería funcionar para todas las descargas de dependencias de Gradle y Spring Cloud Contract desde Artifactory.

    Otra solución alternativa es descargar manualmente las dependencias necesarias de Spring Cloud Contract desde Artifactory utilizando la clave de API e instalarlas en tu caché local de Maven o Gradle. Luego, puedes especificar el directorio local como dependencia de contrato en tu configuración de Gradle:

    contracts {
        ...
        contractDependency {
            localPath "/ruta/a/repo/local/my-service-stubs-0.0.5.jar"
        }
        ...
    }
    

    De esta manera, Spring Cloud Contract utilizará la dependencia instalada localmente en lugar de descargarla desde Artifactory.

    Por último, puedes considerar el uso de otro gestor de repositorios de artefactos que admita autenticación de usuario/contraseña, como Nexus o Bintray.

    Desafortunadamente, no hay una solución directa para este problema, pero espero que estas soluciones alternativas puedan ayudarte.

Comments are closed.