Estoy usando Jenkins Declarative Pipeline para automatizar mi proceso de construcción. Queremos publicar nuestros artefactos en un repositorio remoto de JFrog solo si pasan ciertas condiciones (Sonar, Checkmarx).
Después de un poco de investigación, descubrí que el complemento Artifactory es útil para esto. Pero no puedo encontrar ningún documento sobre cómo integrar en la tubería declarativa. A continuación se muestra el fragmento de código de Jenkinsfile
stages{
stage('Pre-Build'){
steps{
script{
def server = Artifactory.server 'LocalJfrog'
def rtGradle = Artifactory.newGradleBuild()
rtGradle.resolver server: server, repo: 'gradle-dev-local'
rtGradle.deployer server: server, repo: 'gradle-release-local'
rtGradle.useWrapper = true
}
}
}
}
La publicación condicional no es posible con el código anterior ya que no puedo reutilizar la variable del servidor incluso si desactivo la publicación automática.
fuente
Creo que su problema está enraizado en la variable del servidor que no se puede reutilizar fuera del bloque de la etapa previa a la compilación.
En la declaración de Jenkins, puede definir variables como esa usando el
script { ... }
bloque, pero una vez que abandona la etapa, esas variables son inaccesibles para otras etapas.Con las sugerencias anteriores, recomendaría esto:
Aloje el código de despliegue de artefacto en una biblioteca compartida.
Luego para mantener sus tuberías declarativas
D.R.Y
refs:
https://jenkins.io/doc/book/pipeline/syntax/#when
https://jenkins.io/doc/book/pipeline/shared-libraries/
fuente
Si desea incrustar la lógica en el archivo Jenkins, la sintaxis declarativa puede no ser el mejor método, ya que no siempre es fácil reflejarla en el código.
Si cambia a la canalización con script Jenkinsfile, podrá definir y utilizar las condiciones de una manera más fácil.
fuente