Je crée ma propre bibliothèque partagée Jenkins pour réutiliser du code entre les pipelines. Je sais comment créer des étapes (très facile en effet) mais j'ai un problème quand je veux rendre accessible ma "classe utils" dans le fichier jenkins (ou WorkflowScript comme le dit Jenkins dans les logs). j'appelle « classe Util » une classe groovy situé dans le dossier src/ma/domaine/... qui ont beaucoup de méthodes, par exemple, je veux créer une classe de journal comme celui-ci:Bibliothèque partagée Jenkins instancier la classe util et l'utiliser dans workflowscript
# src/my/domain/group
package my.domain.group
class Console implements Serializable {
def log(msg) {
spit(msg, '\033[34m')
}
def error(msg) {
spit(msg, '\033[31m')
}
def warning(msg){
spit(msg, '\033[33m')
}
def success(msg){
spit(msg, '\033[32m')
}
private def spit(msg, color){
ansiColor('xterm') {
echo color + msg + '\033[0m'
}
}
}
Et puis je essayez d'instancier dans un fichier /vars/library.groovy peut donc être accessible à partir du Jenkinsfile avec un code comme par exemple:
node("mynode"){
console.log("Hello World!")
}
l'idée est d'éviter d'instancier la console dans tout le script et le faire automatiquement, j'ai essayé plusieurs choses comme
# vars/library.groovy
import my.domain.group.Console
import groovy.transform.Field
@Field String console = new Console()
ou
# vars/library.groovy
import my.domain.group.Console
def load(){
this.console = new Console()
// And also
console = new Console()
}
Mais en essayant d'accéder à partir du fichier de jenkins je reçois toujours l'erreur: groovy.lang.MissingPropertyException: Aucun bien: console pour la classe: WorkflowScript
Je comprends que ce moyen que l'instance n'est pas à la bonne portée donc ne peut pas être directement vu par le script mais comment puis-je faire cela?
Merci!
Merci pour votre réponse Adrian! Je sais comment utiliser les étapes mais j'ai oublié de mettre ce code dans mon exemple désolé :-). En lisant votre réponse, puis-je comprendre que je ne peux pas exposer une instance d'une classe à utiliser directement dans les pipelines Jenkins? Je connais l'option de créer différentes étapes pour chacune de mes méthodes en console mais je pense qu'il est plus clair d'exposer directement une instance de console à partir de vars (je ne sais pas si c'est possible) et ensuite l'utiliser dans le fichier Jenkins directement comme je le montre dans mon exemple. – joliva
Eh bien, vous pouvez complètement vous passer de votre script 'library.groovy' dans' vars' et utiliser la classe 'Console' directement dans votre Jenkinsfile. Assurez-vous simplement d'importer votre bibliothèque partagée via @Library ('[LIB_NAME]') _', où '[LIB_NAME]' est le nom de votre bibliothèque spécifié dans vos paramètres Jenkins, et votre classe via 'import my.domain. Util.Console' de l'intérieur de votre Jenkinsfile. –