web-dev-qa-db-fra.com

Puis-je importer un script groovy à partir d'un répertoire relatif dans un fichier Jenkins?

J'ai un projet structuré comme ceci:

/
/ Jenkinsfile 
/ build_tools /
              / pipeline.groovy # Functions which define the pipeline
              / reporting.groovy # Other misc build reporting stuff
              / dostuff.sh # A Shell script used by the pipeline
              / domorestuff.sh # Another pipeline supporting Shell-script

Est-il possible d'importer les fichiers groovy dans/build_tools afin que je puisse utiliser des fonctions à l'intérieur de ces 2 fichiers dans mon fichier Jenkins?

Idéalement, j'aimerais avoir un fichier Jenkins qui ressemble à ceci (pseudocode):

from build_tools.pipeline import build_pipeline
build_pipeline(project_name="my project", reporting_id=12345)

Le bit sur lequel je suis coincé est de savoir comment vous écrivez un équivalent de travail de cette déclaration d'importation prétendue à la ligne # 1 de mon pseudocode.

PS. Pourquoi je fais cela: Le dossier build_tools est en fait un sous-module git partagé par de nombreux projets. J'essaie de donner à chaque projet l'accès à un ensemble commun d'outils de construction pour empêcher chaque responsable de projet de réinventer cette roue.

9
Salim Fadhley

La meilleure façon prise en charge pour charger du code groovy partagé est via bibliothèques partagées .

Si vous avez une bibliothèque partagée comme celle-ci:

simplest-jenkins-shared-library master % cat src/org/foo/Bar.groovy
package org.foo;

def awesomePrintingFunction() {
  println "hello world"
}

Mettez-le dans le contrôle de code source, configurez-le dans votre travail jenkins ou même globalement (c'est l'une des seules choses que vous faites via l'interface utilisateur Jenkins lorsque vous utilisez le pipeline), comme dans cette capture d'écran:

tell jenkins about a shared library

puis l'utiliser, par exemple, comme ceci:

pipeline {
  agent { label 'docker' }
  stages {
    stage('build') {
      steps {
        script {
          @Library('simplest-jenkins-shared-library')
          def bar = new org.foo.Bar()
          bar.awesomePrintingFunction()
        }
      }
    }
  }
}

La sortie du journal de la console pour cette version comprendra bien sûr:

hello world

Il existe de nombreuses autres façons d'écrire des bibliothèques partagées (comme utiliser des classes) et de les utiliser (comme définir des variables afin que vous puissiez les utiliser dans Jenkinsfiles de manière très simple). Vous pouvez même charger des fichiers non groovy en tant que ressources. Consultez les documents de la bibliothèque partagée pour ces cas d'utilisation étendus.

10
burnettk