Как получить контент BUILD_URL в Jenkins Groovy? - PullRequest
0 голосов
/ 22 февраля 2019

Случай 1

В приведенном ниже коде

def url = "${BUILD_URL}console".toURL()
def consoleOutput = url.getText('utf-8')

Groovy-скрипт не позволяет использовать синтаксис toURL():

Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods toURL java.lang.String. Administrators can decide whether to approve or reject this signature.
Error cause: org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods toURL java.lang.String

Случай 2

Другой подход:

print "${BUILD_URL}console"
def data = readFile("${BUILD_URL}console")

, который выдает ошибку:

java.nio.file.NoSuchFileException: /app/jenkins/workspace/../folder/https:/xxxx.yy.zz.cccc.cloud/job/a/b/job/67/console

после вывода:

https:/xxxx.yy.zz.cccc.cloud/job/a/b/job/67/console

Как получить содержимое вывода сборки Jenkins?

1 Ответ

0 голосов
/ 23 февраля 2019

Случай 1: как говорится в сообщениях об ошибках, есть несколько отличных методов, к которым нельзя получить доступ без предварительного разрешения администратора.Он должен быть одобрен один раз и затем всегда может быть использован.(Если бы вы предоставили сценарий в графическом интерфейсе вместо Jenkinsfile, вы могли бы отключить эту Groovy Sandbox и использовать весь метод)

Случай 2:

Ошибкаэто то, что вы ожидаете случиться.BUILD_URL содержит - как следует из названия - URL текущей сборки.Это можно увидеть в echo.Во второй команде вы используете его внутри readFile.ReadFile ожидает путь в качестве аргумента.Поскольку BUILD_URL не начинается с /, он рассматривается как относительный путь, поэтому к текущему рабочему каталогу добавляется префикс.Это приводит к тому, что groovy пытается получить доступ к файлу с путем <current_workspace><build_url>, который явно не работает.

В любом случае я бы не рекомендовал извлекать консольный вывод графического интерфейса, поскольку

  • вы также получите графический интерфейс не только для вывода консоли
  • .../console не обязательно содержит весь вывод (он содержит только последние n байтов; для доступа к полному выводу вы по крайней мере должны запросить .../consoleFull)

Вместо этого я бы рекомендовал использовать API REST, как описано в этот ответ

...