Зависимость разделяемой библиотеки Jenkins не найдена - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу создать первую разделяемую библиотеку для факторизации моего кода в конвейерах jenkins.Например, я использую два метода уведомления для всех своих конвейеров и хотел бы, чтобы они были в одном месте.Поэтому я искал, как создать общую библиотеку, и я сделал это:

project tree

В моем классе уведомлений мои методы:

#!/usr/bin/env groovy

package fr.enterprise

class Notify {
    static def notifySuccessful(String targetEnv) {
        emailext (
            subject: "SUCCESSFUL: New version deployed on $targetEnv",
            body: """<html>
                <body>
                Go try it now! It's better when it's hot.
                <br>
                <br>With love,
                <br>Your Dear Jenkins
                </body>
                </html>""",
            recipientProviders: [[$class: 'RequesterRecipientProvider']]
        )
    }

    static def notifyFailed(String targetEnv, String jobName, String buildUrl, String buildNumber) {
        emailext (
            subject: "FAILURE: Couldn't deploy new version on $targetEnv",
            body: """<html>
                <body>
                I'm really sorry, but something went wrong when deploying Fides.
                <br>
                Please have a look at the logs here:
                <br><a href="$buildUrl/console">$jobName [$buildNumber]</a>
                <br>
                <br>With love,
                <br>Your Dear Jenkins
                </body>
                </html>""",
            recipientProviders: [[$class: 'RequesterRecipientProvider']]
        )
    }
}

Я импортирую его в код моего конвейера:

@Library('jenkins-shared-lib')
import fr.enterprise.Notify

И в jenkins: jenkins config

Когда мой конвейер хочет использовать один из моих методов,У меня есть эта ошибка:

groovy.lang.MissingMethodException: No signature of method: java.lang.Class.emailext() is applicable for argument types: (java.util.LinkedHashMap)

Что я забыл?

Вот мой код для вызова моих методов:

success {
  script {
    Notify.notifySuccessful(params.TARGET_ENV)
  }
}
failure {
  script {
    Notify.notifyFailed(params.TARGET_ENV, env.JOB_NAME, env.BUILD_URL, env.BUILD_NUMBER)
  }
}

1 Ответ

0 голосов
/ 17 апреля 2019

Из документов Jenkins: Библиотечные классы не могут напрямую вызывать такие шаги, как sh или git (или тот, который вы используете).Чтобы сделать это, вы должны сделать что-то вроде этого

Notify.groovy

#! /usr/bin groovy

def notifySuccessful(String targetEnv) {
        your code
}
return this

обратите внимание на использование вернуть это .
и затем из конвейераДекларация вы можете использовать его

@Library('jenkins-shared-lib') _


def notify = new fr.enterprise.Notify()
notify.notifySuccessful("var")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...