如何在Jenkins groovy中获取BUILD_URL内容?

时间:2019-02-22 17:57:56

标签: curl groovy readfile jenkins-groovy

案例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 build输出的内容?

1 个答案:

答案 0 :(得分:1)

情况1: 由于错误状态,有几种常规方法,未经管理员事先许可无法访问。它必须先获得批准,然后才能始终使用。 (如果要在GUI中提供脚本而不是Jenkinsfile,则可以禁用此 Groovy Sandbox 并使用所有方法)

情况2:

该错误是您预期会发生的。 BUILD_URL保留-顾名思义-当前版本的URL。可以在echo中看到。 在第二个命令中,您可以在readFile中使用它。 ReadFile期望路径作为参数。由于BUILD_URL并非以/开头,因此将其视为相对路径,因此当前工作目录位于前面。 这导致常规尝试访问路径<current_workspace><build_url>显然不起作用的文件。

无论哪种方式,我都不建议您获取GUI的控制台输出,因为

  • 您还将不仅收到控制台输出,还收到GUI
  • .../console不一定包含整个输出(它仅包含最后n个字节;要访问完整的输出,您至少应查询.../consoleFull

我反而建议使用this answer

中所述的REST API