J'utilise Jenkins Declarative Pipeline pour automatiser mon processus de construction. Nous voulons publier nos artefacts dans un référentiel JFrog distant uniquement si certaines conditions (Sonar, Checkmarx) sont remplies.
Après un peu de recherche, j'ai trouvé que le plugin Artifactory est utile pour cela. Mais je ne trouve aucun document sur la façon de s'intégrer dans le pipeline déclaratif. Ci-dessous, l'extrait de code 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 publication conditionnelle n'est pas possible avec le code ci-dessus car je ne peux pas réutiliser la variable serveur même si je désactive la publication automatique.
la source
Je pense que votre problème est lié au serveur variable n'est pas réutilisable en dehors du bloc d'étape de pré-construction.
Dans Jenkins déclarative, vous pouvez définir des variables comme celle-ci en utilisant le
script { ... }
bloc, mais une fois que vous quittez l'étape, ces variables sont inaccessibles aux autres aux étapes.Avec les suggestions précédentes, je recommanderais ceci:
Logez le code de déploiement artificiel dans une bibliothèque partagée.
Ensuite pour garder vos pipelines déclaratifs
D.R.Y
refs:
https://jenkins.io/doc/book/pipeline/syntax/#when
https://jenkins.io/doc/book/pipeline/shared-libraries/
la source
Si vous souhaitez incorporer de la logique dans le fichier Jenkins, la syntaxe déclarative n'est peut-être pas la meilleure méthode car il n'est pas toujours facile de la refléter dans le code.
Si vous passiez au pipeline scripté Jenkinsfile, vous seriez en mesure de définir et d'utiliser les conditions de manière plus simple.
la source