当前位置: 首页 > 面试题库 >

Groovy报告文件在系统中确实存在时不存在

桓信鸥
2023-03-14
问题内容

每当我的Jenkins作业的构建完成时,我都会使用Editable Email Notification插件(也称为Email- ext插件)发送包含结果的电子邮件。另外,如果系统中存在某个文件,则我正在修改消息的默认内容,以通知该文件的存在。

为此,我正在使用Pre-send Script插件的字段。

__

为运行准备环境

_

属性内容

_

LOG="log.txt"

__

建立阶段

_

执行外壳

_

#!/bin/bash

touch ${WORKSPACE}/${LOG}
echo "this is just a log" >> ${WORKSPACE}/${LOG}

__

构建后动作

_

可编辑的电子邮件通知

_ 预发送脚本

File log = new File("${WORKSPACE}/${LOG}");
logger.println(log.text);

执行构建时,Jenkins将在中创建文件${WORKSPACE}并填充它(我能够从Jenkins从站的终端中打印内容)。

但是,当尝试从Email插件访问它时,java.io.FileNotFoundException会引发异常:

java.io.FileNotFoundException: /home/jenkins/workspace/testJob/log.txt (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:146)
    at groovy.util.CharsetToolkit.<init>(CharsetToolkit.java:69)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.newReader(DefaultGroovyMethods.java:16958)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.getText(DefaultGroovyMethods.java:16006)
    at org.codehaus.groovy.runtime.dgm$381.doMethodInvoke(Unknown Source)
    at org.codehaus.groovy.reflection.GeneratedMetaMethod$Proxy.doMethodInvoke(GeneratedMetaMethod.java:70)
    at groovy.lang.MetaClassImpl$GetBeanMethodMetaProperty.getProperty(MetaClassImpl.java:3500)
    at org.codehaus.groovy.runtime.callsite.GetEffectivePojoPropertySite.getProperty(GetEffectivePojoPropertySite.java:61)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:227)
    at Script1.run(Script1.groovy:59)
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:580)
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:618)
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:589)
    at hudson.plugins.emailext.ExtendedEmailPublisher.executePresendScript(ExtendedEmailPublisher.java:450)
    at hudson.plugins.emailext.ExtendedEmailPublisher.sendMail(ExtendedEmailPublisher.java:311)
    at hudson.plugins.emailext.ExtendedEmailPublisher._perform(ExtendedEmailPublisher.java:297)
    at hudson.plugins.emailext.ExtendedEmailPublisher.perform(ExtendedEmailPublisher.java:244)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:782)
    at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:723)
    at hudson.model.Build$BuildExecution.cleanUp(Build.java:195)
    at hudson.model.Run.execute(Run.java:1785)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:410)

我很茫然,为什么Groovy会抱怨丢失的文件,而如果我用

logger.println(log.getPath());

它将成功打印。

注:logger在变量Pre-send Script被通知插件提供的访问直接生成日志。


问题答案:

java.io.File 方法将引用运行Jenkins的主服务器上的文件,而不是从属计算机上当前的工作空间中的文件

要引用从属计算机上的文件,应使用以下readFile方法

def log = readFile("${WORKSPACE}/${LOG}");


 类似资料:
  • 问题内容: 我正面临着这个奇怪的问题。 我正在尝试读取位于另一台计算机上的文件作为共享资源: 当我运行一个独立的应用程序(一个16行的Java文件)时,一切都很好。但是,当我尝试使用服务器“引擎”(这是一个应用程序引擎,非常类似于可以运行Java程序的Java EE Application Server)使用相同的类和相同的方法读取相同的文件时,“ FileNotFoundException”被抛

  • 每当我调试应用程序时,就会出现一个错误,,应用程序也不会启动。 更新Android Studio后,此错误开始发生。 经过大量搜索,我尝试了不同的解决方案。这包括: 降级Android Studio(它开始给出插件错误,我不想不能使用新的Android Studio) 尝试了这个解决方案却没有成功 这是一个不同的问题,但有可能解决我的问题。它也不起作用 提到这个问题 任何帮助将不胜感激。

  • 问题内容: 我的一位客户要求为成千上万种不同格式(例如pdf,doc,docx等)的文档提供文档管理系统。我的问题是在数据库或文件系统中存储此文件的最佳方法是什么?两种方法之间如何轻松保护文档? 快速检索文件是关键要求。 我正在使用mysql如果有帮助 问候。 问题答案: 您可能希望将其直接存储到文件系统中。 使用文件系统时,请注意: 机密性: 将文档放在Apache文档根目录之外。然后,您的PH

  • 问题内容: 我正在尝试在Spring中制作我的第一个bean,但是在加载上下文时遇到了问题。我在src / main / resources中有一个bean的配置XML文件。 我收到以下IOException: `Exception in thread “main” org.springframework.beans.factory.BeanDefinitionStoreException: IO

  • 我正在编写一个应用程序来自动构建和运行SQL查询。对于许多表,我的代码工作正常,但在某个表上,它会抛出以下异常: 已运行的查询如下所示: 这实际上是从列中返回非空值。 我不明白为什么在pgAdmin 4中出现“列不存在”错误。我可以看到有一个名为的模式,其中包含表,该表有一个名为的列。 既然所有的列、模式和表名都是由应用程序本身检索的,我不认为存在拼写或语义错误,那么为什么PostgreSQL会导

  • 问题内容: 正在运行将在Linux Web服务器上运行的应用程序中,以从某个目录中删除日志,但是我一直收到FileNotFound异常。 这是代码: 而且例外 但是,命令cd / home / root / multicraft / servers可以很好地工作。 我也尝试过: 问题答案: 所述构造函数接收多个串-无论是作为一个或作为参数,每一种类型的可变数量: http://docs.oracl