Ich erstelle meine eigene Jenkins shared library, um etwas Code zwischen Pipelines wiederzuverwenden. Ich weiß, wie man Schritte erstellt (wirklich wirklich einfach), aber ich habe ein Problem, wenn ich meine "utils-Klasse" in der jenkinsfile (oder WorkflowScript, wie Jenkins in Protokollen sagt) zugänglich machen möchte. Ich nenne „Util Klasse“ eine groovige Klasse in Ordner src/my/Domain/gelegen ... die viele Methoden, zum Beispiel, ich möchte eine Log-Klasse wie folgt erstellen:Jenkins Shared Library instanziieren util-Klasse und verwenden in 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'
}
}
}
Und dann ich versuchen, in einer Datei in /vars/library.groovy instanziiert so von der Jenkinsfile mit einigem Code, wie beispielsweise zugegriffen werden kann:
node("mynode"){
console.log("Hello World!")
}
die Idee zu vermeiden, ist die Konsole in allen Skript zu instanziiert und es macht Automatisch habe ich verschiedene Dinge wie
# vars/library.groovy
import my.domain.group.Console
import groovy.transform.Field
@Field String console = new Console()
012 ausprobiert
oder
# vars/library.groovy
import my.domain.group.Console
def load(){
this.console = new Console()
// And also
console = new Console()
}
Aber wenn man versucht, aus jenkins Datei zuzugreifen bekomme ich immer die Fehlermeldung: groovy.lang.MissingPropertyException: Keine solche Eigenschaft: Konsole für Klasse: WorkflowScript
Ich verstehe, dass diese Mittel dass die Instanz nicht im richtigen Bereich ist, also nicht direkt vom Skript gesehen werden kann, aber wie kann ich das tun?
Danke!
Danke für deine Antwort Adrian! Ich weiß, wie man die Schritte benutzt, aber ich habe vergessen, diesen Code in mein Beispiel zu schreiben, sorry :-). Wenn Sie Ihre Antwort lesen, kann ich verstehen, dass ich keine Instanz einer Klasse angeben kann, die direkt in Jenkins-Pipelines verwendet werden soll. Ich kenne die Option zum Erstellen verschiedener Schritte für jede meiner Methoden in der Konsole, aber ich denke, dass es klarer ist, eine Instanz der Konsole direkt aus Vars zu entlarven (ich weiß nicht, ob das möglich ist) und dann in der Jenkins-Datei zu verwenden direkt wie ich es in meinem Beispiel zeige. – joliva
Nun, Sie könnten vollständig auf Ihr 'library.groovy'-Skript in' vars' verzichten und die 'Console'-Klasse direkt in Ihrer Jenkins-Datei verwenden. Stellen Sie sicher, dass Sie Ihre gemeinsam genutzte Bibliothek über '@Library ('[LIB_NAME]') _' importieren, wobei' [LIB_NAME] 'der Name Ihrer in den Jenkins-Einstellungen angegebenen Bibliothek und Ihre Klasse über' import my.domain 'ist. util.Console' von innerhalb Ihrer Jenkinsfile. –