2017-05-09 2 views
2

Ich habe ein Projekt wie diese aufgebaut habe:Kann ich ein grooviges Skript aus einem relativen Verzeichnis von einer Jenkins-Datei importieren?

/ 
/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 

Ist es möglich, die groovy Dateien in/build_tools zu importieren, so dass ich Funktionen innerhalb dieser zwei Dateien in meinem Jenkinsfile verwenden kann?

Idealerweise würde Ich mag eine Jenkins-Datei haben, der so etwas wie dieses (Pseudo-Code) sieht:

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

Das Bit ich bin fest ist, wie Sie eine Arbeitsäquivalent der Import-Anweisung vorgeben schreiben in Zeile # 1 meines Pseudocodes.

PS. Warum mache ich das? Der build_tools-Ordner ist eigentlich ein Git Submodul, das von vielen Projekten geteilt wird. Ich versuche, jedem Projekt Zugriff auf einen gemeinsamen Werkzeugsatz zu geben, damit jeder Projektbetreuer dieses Rad nicht neu erfindet.

Antwort

3

Die beste unterstützte Methode zum Laden von Shared-Groovy-Code ist shared libraries.

Wenn Sie eine gemeinsam genutzte Bibliothek wie folgt aus:

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

def awesomePrintingFunction() { 
    println "hello world" 
} 

Shove es in die Quellcodeverwaltung, konfigurieren Sie es in Ihrem jenkins Job oder sogar global (dies ist eines der wenigen Dinge, die Sie die Jenkins UI tun durch, wenn Verwendung Pipeline), wie in diesem Screenshot:

tell jenkins about a shared library

und dann verwenden, zum Beispiel wie folgt aus:

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

Ausgabe des Konsolenprotokoll für diesen Build natürlich würden gehören:

hello world 

Es gibt viele andere Möglichkeiten gibt, gemeinsam genutzte Bibliotheken zu schreiben (wie Klassen) und sie zu nutzen (wie Vars definieren, so können Sie verwende sie in Jenkinsfiles auf super-glatte Weise). Sie können auch nicht-groovige Dateien als Ressourcen laden. Überprüfen Sie the shared library docs für diese erweiterten Anwendungsfälle.

Verwandte Themen