Моя переменная не интерполируется в тексте сообщения электронной почты

Это часть моего файла Jenkins:

emailext([
        attachmentsPattern: '**/build/*.log',
        subject: 'Hello World',
        recipientProviders: [developers(), requestor()],
        to: '$DEFAULT_RECIPIENTS',
        body: '''
            <p>Test summary:</p>
            <ul>
                <li><a href = "${BUILD_URL}">Status: ${BUILD_STATUS}</a></li>
                <li><a href = "${BUILD_URL}/flowGraphTable">Executed steps</a></li>
                <li><a href = "${BUILD_URL}/parsed_console">Errors and warnings</a></li>
                <li>Test results:</li>
                ${testResults}
            </ul>
        ''',
        mimeType: 'text/html'
])

Но, к сожалению, переменная testResults не интерполируется:

Как я могу исправить?

Кроме того, я попытался заменить ''' на """, вот так:

emailext([
        attachmentsPattern: '**/build/*.log',
        subject: 'Hello World',
        recipientProviders: [developers(), requestor()],
        to: '$DEFAULT_RECIPIENTS',
        body: """
            <p>Test summary:</p>
            <ul>
                <li><a href = "${BUILD_URL}">Status: ${BUILD_STATUS}</a></li>
                <li><a href = "${BUILD_URL}/flowGraphTable">Executed steps</a></li>
                <li><a href = "${BUILD_URL}/parsed_console">Errors and warnings</a></li>
                <li>Test results:</li>
                ${testResults}
            </ul>
        """,
        mimeType: 'text/html'
])

Но я получил эту ошибку в выводе консоли Jenkins:

Error when executing always post condition:
Also:   org.jenkinsci.plugins.workflow.actions.ErrorAction$ErrorId: 4fb4675f-4b24-4e5a-8344-835e9d514202
groovy.lang.MissingPropertyException: No such property: BUILD_STATUS for class: groovy.lang.Binding

Версия Дженкинса: 2.441.

Ваша вторая попытка - правильный подход, просто похоже, что параметр BUILD_STATUS не определен в вашем конвейере и, следовательно, ошибка. Какую версию Дженкинса вы используете? поскольку BUILD_STATUS доступен только начиная с версии 2.263.2, если вы используете более старую версию, попробуйте использовать currentBuild.currentResult.

Noam Helmer 12.07.2024 12:21

@NoamHelmer Версия Дженкинса - 2.441

tail 12.07.2024 12:22

Используйте """, а не ''', если вы хотите создавать шаблоны.

tim_yates 12.07.2024 13:45

@tim_yates Привет, я уже пробовал это, как вы можете прочитать в моем посте.

tail 12.07.2024 14:00
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
В этой статье блога мы проведем вас через процесс установки Gradle на Ubuntu 22.04, интеграции его с Jenkins и создания задания Gradle. Мы...
0
4
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы почти закончили с исправлением тройной двойной кавычки, вам просто нужно передать выражение ${BUILD_STATUS} в плагин Token Macro (emailext использует его для динамического создания темы и тела электронного письма) и не допустить, чтобы groovy интерполировал его слишком рано. . Попробуйте экранировать знак $ с помощью \, например \${BUILD_STATUS}.

Здравствуйте, вы имели в виду что-то вроде <li><a href = "${BUILD_URL}">Status: \${BUILD_STATUS}</a></li>?

tail 12.07.2024 12:27

Точно. Возможно, вам придется сделать то же самое для BUILD_URL

Iterokun 12.07.2024 13:19
Ответ принят как подходящий

Это две разные ошибки.

Первый вызван разницей между одинарными и двойными кавычками в Groovy, которые хорошо описаны в разделе Интерполяция строк документации Jenkins.

Второе, очевидно, означает, что у вас не определена переменная BUILD_STATUS. Это может зависеть от типа конвейера и версии Jenkins, но я бы рекомендовал проверить несколько вещей:

  • AFAIR, Дженкинс не отображает статус сборки как переменную окружения, например BUILD_URL, вам нужно использовать переменную Groovy currentBuild.result или что-то в этом роде;
  • возможно, вы захотите ссылаться на переменные среды как ${env.VARIABLE_NAME}, потому что тогда это будет переменная Groovy - ${VARIABLE_NAME} может не быть определена в этом контексте просто потому, что это не команда оболочки. В обычных и многоветвевых конвейерах это работает по-разному, поэтому без подробностей невозможно предложить точное решение.

Учитывая это, я бы попробовал следующее:

emailext([
        attachmentsPattern: '**/build/*.log',
        subject: 'Hello World',
        recipientProviders: [developers(), requestor()],
        to: $DEFAULT_RECIPIENTS,
        body: """
            <p>Test summary:</p>
            <ul>
                <li><a href = "${env.BUILD_URL}">Status: ${currentBuild.result}</a></li>
                <li><a href = "${env.BUILD_URL}/flowGraphTable">Executed steps</a></li>
                <li><a href = "${env.BUILD_URL}/parsed_console">Errors and warnings</a></li>
                <li>Test results:</li>
                ${testResults}
            </ul>
        """,
        mimeType: 'text/html'
])

@tail Я добавил фрагмент кода, возможно, это поможет.

Alexander Pletnev 12.07.2024 12:47

Это работает. Просто используйте ${currentBuild.currentResult} вместо ${currentBuild.result}

tail 16.07.2024 16:38

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