gpt4 book ai didi

jenkins - 当文件确实存在于系统中时,Groovy 会报告该文件不存在

转载 作者:行者123 更新时间:2023-12-03 03:22:03 25 4
gpt4 key购买 nike

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

为此,我使用插件的预发送脚本字段。

测试作业配置:

准备运行环境

属性内容

LOG="log.txt"

构建阶段

执行 shell

#!/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());

它将成功打印。

注意:Pre-send Script 中的 logger 变量由通知插件提供,用于直接访问构建日志。

最佳答案

java.io.File 方法将引用运行 Jenkins 的 ma​​ster 上的文件,而不是引用当前工作区中的文件。 从机(如果该作业确实在从机上运行)。

要引用从机上的文件,您应该使用readFile方法

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

关于jenkins - 当文件确实存在于系统中时,Groovy 会报告该文件不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41739468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com