Сценарию Groovy не удается вызвать параметр уведомления Slack из задания Jenkins DSL

Я пытаюсь использовать плагин Jenkins Job DSL в первый раз для создания базовых "шаблонов" заданий, прежде чем углубляться в более сложные вещи.

Дженкинс работает на сервере Windows 2012. Версия Jenkins - 1.650, и мы используем плагин Job DSL версии 1.51.

В идеале мне хотелось бы, чтобы начальное задание было параметризовано так, чтобы при его запуске пользователь мог вводить четыре вещи: местоположение сценария DSL задания, имя сгенерированного задания, канал Slack для уведомлений о сбоях и электронную почту. адрес для уведомлений о сбоях.

Первые два в порядке: я могу вызвать параметры в скрипте groovy, например, скрипт понимает job("${JOB_NAME}") и берет имя, которое я ввожу для работы, когда я запускаю начальное задание.

Однако, когда я пытаюсь сделать то же самое с каналом Slack, отличный сценарий, похоже, не хочет играть. Обратите внимание, что если я указываю канал Slack, а не пытаюсь вызвать параметр, он работает нормально.

Мой Job DSL скрипт находится здесь:

job("${JOB_NAME}") {
    triggers {
        cron("@daily")
    }
    steps {
        shell("echo 'Hello World'")
    }
    publishers {
    slackNotifier {
      room("${SLACK_CHANNEL}")
      notifyAborted(true)
      notifyFailure(true)
      notifyNotBuilt(false)
      notifyUnstable(true)
      notifyBackToNormal(true)
      notifySuccess(false)
      notifyRepeatedFailure(false)
      startNotification(false)
      includeTestSummary(false)
      includeCustomMessage(false)
      customMessage(null)
      buildServerUrl(null)
      sendAs(null)
      commitInfoChoice('NONE')
      teamDomain(null)
      authToken(null)
    }
  }
    logRotator {
        numToKeep(3)
        artifactNumToKeep(3)
    publishers {
        extendedEmail {
            recipientList('me@mydomain.com')
            defaultSubject('Seed job failed')
            defaultContent('Something broken')
            contentType('text/html')
            triggers {
              failure ()
              fixed ()
              unstable ()
                stillUnstable {
                    subject('Subject')
                    content('Body')
                    sendTo {
                        developers()
                        requester()
                        culprits()
                    }
                }
            }
        }
    }
  }
}

Но запуск начального задания завершается неудачно и дает мне такой вывод:

Started by user 
Building on master in workspace D:\data\jenkins\workspace\tutorial-job-dsl-2
Disk space threshold is set to :5Gb
Checking disk space Now 
Total Disk Space Available is: 28Gb
 Node Name: master
Running Prebuild steps
Processing DSL script jobBuilder.groovy
ERROR: (jobBuilder.groovy, line 10) No signature of method: javaposse.jobdsl.plugin.structs.DescribableContext.room() is applicable for argument types: (org.codehaus.groovy.runtime.GStringImpl) values: [#dev]
Possible solutions: wait(), find(), dump(), grep(), any(), wait(long)
[BFA] Scanning build for known causes...
[BFA] No failure causes found
[BFA] Done. 0s
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
Finished: FAILURE

Это первый раз, когда я пытался что-то сделать с Groovy, и я уверен, что это основная ошибка, но буду признателен за любую помощь.

1 ответ

Решение

Хм, это ошибка в Job DSL, см. JENKINS-39153.

Вам на самом деле не нужно использовать синтаксис строки шаблона "${FOO}" если вы просто хотите использовать значение FOO, Все параметры являются строковыми переменными, которые можно использовать напрямую:

job(JOB_NAME) {
  // ...
  publishers {
    slackNotifier {
      room(SLACK_CHANNEL)
      notifyAborted(true)
      notifyFailure(true)
      notifyNotBuilt(false)
      notifyUnstable(true)
      notifyBackToNormal(true)
      notifySuccess(false)
      notifyRepeatedFailure(false)
      startNotification(false)
      includeTestSummary(false)
      includeCustomMessage(false)
      customMessage(null)
      buildServerUrl(null)
      sendAs(null)
      commitInfoChoice('NONE')
      teamDomain(null)
      authToken(null)
    }
  }
  // ...
}

Этот синтаксис является более кратким и не вызывает ошибку.

Другие вопросы по тегам