【DevOps】Jenkins 运行任务时遇到 FATAL:Unable to produce a script file 报错(已解决)
文章目录
- 一、问题描述
- 二、定位原因
- 三、解决方案
- 四、其他方案
- 五、总结
关键词:
Jenkins、Unable to produce a script file、UnmappableCharacterException、IOException: Failed to create a temp file on
一、问题描述
由于使用的 Jenkins 存在安全漏洞(详见 Jenkins Security Advisory 2023-03-08),需要升级到已解决安全漏洞的新版本,更新后运行任务时出现了报错:FATAL: Unable to produce a script file
详细的报错日志如下:
# 拉取代码的 Commit 信息16:21:35 Commit message: "feat: ????"# 堆栈信息16:21:35 FATAL: Unable to produce a script file16:21:35 java.nio.charset.UnmappableCharacterException: Input length = 116:21:35 at java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:275)16:21:35 at java.base/sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:306)16:21:35 at java.base/sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:281)16:21:35 at java.base/sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)16:21:35 at java.base/java.io.OutputStreamWriter.write(OutputStreamWriter.java:208)16:21:35 at java.base/java.io.BufferedWriter.flushBuffer(BufferedWriter.java:120)16:21:35 at java.base/java.io.BufferedWriter.close(BufferedWriter.java:268)16:21:35 at hudson.FilePath$CreateTextTempFile.invoke(FilePath.java:1658)16:21:35 at hudson.FilePath$CreateTextTempFile.invoke(FilePath.java:1628)16:21:35 at hudson.FilePath.act(FilePath.java:1198)16:21:35 at hudson.FilePath.act(FilePath.java:1181)16:21:35 at hudson.FilePath.createTextTempFile(FilePath.java:1622)16:21:35 Caused: java.io.IOException: Failed to create a temp file on /var/jenkins_home/workspace/xxx16:21:35 at hudson.FilePath.createTextTempFile(FilePath.java:1624)16:21:35 at hudson.tasks.CommandInterpreter.createScriptFile(CommandInterpreter.java:202)16:21:35 at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:120)16:21:35 at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:92)16:21:35 at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)16:21:35 at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:818)16:21:35 at hudson.model.Build$BuildExecution.build(Build.java:199)16:21:35 at hudson.model.Build$BuildExecution.doRun(Build.java:164)16:21:35 at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:526)16:21:35 at hudson.model.Run.execute(Run.java:1900)16:21:35 at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:44)16:21:35 at hudson.model.ResourceController.execute(ResourceController.java:101)16:21:35 at hudson.model.Executor.run(Executor.java:442)16:21:35 Build step 'Execute shell' marked build as failure
二、定位原因
根本原因隐藏在日志信息里:
首先,可以看到 Commit message: “feat: ???” 中的中文内容变成了乱码 ??? 。
从堆栈信息里 java.nio.charset.UnmappableCharacterException: Input length = 1 可知,这是个和字符集相关的报错信息:
这个错误是由于Java运行时无法将一个输入的字符映射为所需要的字符集(通常是Unicode)而引起的。可能会发生这种情况:
输入的文本包含了一个你使用的字符集无法映射的字符。 如果文本在不同的平台上被创建和传输,则可能会发生此错误,因为每个平台使用的默认字符集可能不同。 为了解决这个错误,你可以尝试以下方法:
- 检查你的字符集: 在你的代码中,确保你所使用的字符集和输入文本的字符集匹配。
- 检查文本: 检查输入文本中是否有在使用字符集时无法映射的字符或符号。
- 指定字符集: 明确指定字符集,尤其是在不同平台之间传输文本时。最好使用标准字符集,例如UTF-8或ISO-8859-1等。 如果以上解决方法都无效,你可能需要查看代码以确定是否有其他问题。
三、解决方案
既然是字符集(文件编码)相关的问题,解决方案有 2 个思路:
- 去掉 Jenkins Job 里脚本和指令中的中文等字符
- 让 Jenkins 的运行环境支持 UTF-8 编码,以正常处理和展示中文内容
方案一:移除无法正常处理和显示的中文内容
进入 Jenkins Job 的配置中,定位报错的步骤卡到哪一个环节,查看脚本和指令是否使用了中文内容(注释也算)。
在我的 Job 配置是 Build Steps - 执行 shell 的 shell 脚本中,对指令做了中文注释,移除调中文内容,保存并重新执行一下 Job 的运行任务,发现可以正常完成构建任务了。
方案二:让 Jenkins 支持中文
让 Jenkins 正确处理和展示中文,有 2 个方法,可以根据自身情况进行设置:
设置机器的 LANG=”C.UTF-8”
ENKINS_JAVA_OPTS 或者 JAVA_OPTS 的值增加 -Dfile.encoding=UTF8 的内容
这里推荐修改 LANG 的值来支持中文:
由于我使用 Docker 方式安装的 Jenkins,所以只需要在创建 container 时设置 -e LANG=“C.UTF-8” 即可;如何你使用 portainer 或者 Docker Compose,可自行查找设置、修改环境变量的方法。
对于 ENKINS_JAVA_OPTS 或者 JAVA_OPTS 的值增加 -Dfile.encoding=UTF8 的内容:
注意一点,ENKINS_JAVA_OPTS 只影响 Jenkins 程序;JAVA_OPTS 则会影响所有本机器下所有基于 Java 运行的程序。 至于修改方式,参考上面修改 LANG 的过程。
最后,对修改是否生效进行检查:
设置完毕并重启 Jenkins 后,如果你是管理员,进入 Dashboard-系统管理-系统信息-环境变量 查看下当前 Jenkins 的环境变量:
- 检查 LANG 的值,查看下是否为 C.UTF-8 ;
- 或者,查看 JENKINS_JAVA_OPTS 或者 JAVA_OPTS 的值里是否有 -Dfile.encoding=UTF8 ;
- 最后,运行一下之前 Job 的构建任务,看看能否正常显示中文和正常完成构建。
四、其他方案
网上也有一些别的方案,如果报错信息中没有 java.nio.charset.UnmappableCharacterException: Input length = 1 的信息,可能就不是编码问题。可以尝试:
- 重启 Jenkins
- 可能磁盘空间不足,可尝试删除 /tmp/ 缓存目录下的文件
- 可能目录权限不正确,尝试把 Job 的 workspace 所在目录修改为 jenkins 能够读写的用户权限
五、总结
定位问题的过程中,首先检索报错信息中的 Unable to produce a script file,有很多资料都没有说明为什么要使用文章里的解决方案,仅仅是做个记录,没有深入追溯原因,走了不少弯路。
之后,结合 Commit 信息乱码,检索报错信息中的 java.nio.charset.UnmappableCharacterException: Input length = 1,终于找到核心原因:文件编码问题。之后一路查官方文档等,找到了合适的解决方案。
相关文章:
【DevOps】Jenkins 运行任务时遇到 FATAL:Unable to produce a script file 报错(已解决)
文章目录一、问题描述二、定位原因三、解决方案四、其他方案五、总结关键词: Jenkins、Unable to produce a script file、UnmappableCharacterException、IOException: Failed to create a temp file on一、问题描述 由于使用的 Jenkins 存在安全漏洞(…...
Web前端
WEB前端 HTMLCSSJavaScriptjQuery(js框架)Bootstrap(CSS框架)AJAXJSON 文章目录 WEB前端WEB前端三大核心技术Web开发工具文本编辑器集成开发环境(IDE)浏览器选择HTML什么是 HTML?HTML版本变迁HTML-HelloWorldHTML 文档 = 网页HTML 标签属性(Attribute)HTML 常用标签...

资源操作:Resources
文章目录1. Spring Resources概述1.2 Resource 接口1.3 Resource的实现类1.3.1 UrlResource访问网络资源1.3.2 ClassPathResource访问类路径下资源1.3.3 FileSystemResource访问文件系统资源1.3.4 ServletContextResource1.3.5、InputStreamResource1.3.6、ByteArrayResource1.…...

GDB调试的学习
很早就想在好好学一学gdb了,正好最近学算法(以前一直以为干硬件不需要什么特别厉害的算法,结果现在卷起来了。大厂面试题也有复杂一些的算法了) 下面的这些命令是别的博主总结的 GDB 调试过程_gdb调试过程_麷飞花的博客-CSDN博客…...

熵值法综合评价分析流程
熵值法综合评价分析流程 一、案例背景 当前有一份数据,是各品牌车各个维度的得分情况,现在想要使用熵值法进行综合评价,得到各品牌车的综合得分,从而进行车型优劣对比,为消费者提供购车依据。 数据如下(数…...
使用Python Pandas库操作Excel表格的技巧
在数据分析和处理中,我们经常需要对Excel表格进行操作。Python Pandas库提供了丰富的API来读取、写入、修改Excel表格。本文将介绍如何使用Python Pandas库操作Excel表格,包括向Excel表格添加新行、创建Excel表格等。 1.向Excel表格添加新行 下面是一个…...

LeetCode练习七:动态规划上:线性动态规划
文章目录一、 动态规划基础知识1.1 动态规划简介1.2 动态规划的特征1.2.1 最优子结构性质1.2.2 重叠子问题性质1.2.3 无后效性1.3 动态规划的基本思路1.4 动态规划基础应用1.4.1 斐波那契数1.4.2 爬楼梯1.4.3 不同路径1.5 个人总结二、记忆化搜索2.1 记忆化搜索简介2.2 记忆化搜…...

基于正点原子F407开发版和SPI接口屏移植touchgfx完整教程(一)
一、相关软件包安装 1、打开cubemx包管理器 2、安装F4软件包 3、安装touchgfx软件包 二、工程配置 1、新建工程 2、sys配置 3、rcc配置 4、crc配置 5、添加touchgfx软件包 6、配置touchgfx软件包 将width和height改为自己屏幕尺寸 7、生成工程 三、代码修改 1、将屏幕相关驱…...

Linux--进程间通信
前言 上一篇相关Linux文章已经时隔2月,Linux的学习也相对于来说是更加苦涩;无妨,漫漫其修远兮,吾将上下而求索。 下面该片文章主要是对进程间通信进行介绍,还对管道,消息队列,共享内存,信号量都…...

hadoop伪分布式集群搭建
基于hadoop 3.1.4 一、准备好需要的文件 1、hadoop-3.1.4编译完成的包 链接: https://pan.baidu.com/s/1tKLDTRcwSnAptjhKZiwAKg 提取码: ekvc 2、需要jdk环境 链接: https://pan.baidu.com/s/18JtAWbVcamd2J_oIeSVzKw 提取码: bmny 3、vmware安装包 链接: https://pan.baidu…...
Qt 中的信息输出机制:QDebug、QInfo、QWarning、QCritical 的简单介绍和用法
Qt 中的信息输出机制介绍QDebug在 Qt 中使用 qDebug输出不同类型的信息浮点数:使用 %!f(MISSING) 格式化符号输出浮点数布尔值:使用 %! (MISSING)和 %! (MISSING)格式化符号输出布尔值对象:使用 qPrintable() 函数输出对象的信息qInfoqWarnin…...
C++读写excel文件的的第三方库
一、比较流行的库 1. OpenXLSX 用于读取、写入、创建和修改 Microsoft Excel (.xlsx) 文件的 C 库。 2. xlnt xlnt 是一个现代 C 库,用于操作内存中的电子表格以及从 XLSX 文件读取/写入它们,如ECMA 376 第 4 版中所述。xlnt 1.0 版的首次公开发布是在 …...

【关于Linux中----多线程(一)】
文章目录认识线程创建线程线程优点和缺点创建一批线程终止线程线程的等待问题认识线程 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行&a…...
2023年全国最新安全员精选真题及答案34
百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 11.(单选题)物料提升机附墙架设置要符合设计要求,但…...

数据出境是什么意思?我国数据出境合规要求是什么?
随着经济全球化深入以及云计算等技术的发展,数据在全球范围跨境流动。数据跨境在促进经济增长、加速创新的同时,对数据主权、数据权属、个人信息保护等一系列问题逐渐浮出水面。今天我们就先来了解一下数据出境是什么意思?我国数据出境合规要…...

Liunx——Git工具使用
目录 1)使用 git 命令行安装 git 2)在 Gitee 创建仓库 创建仓库 3)Linux克隆仓库到本地 4)提交代码三板斧: 1.三板斧第一招: git add 2.三板斧第二招: git commit 3.三板斧第三招: git push 5)所遇…...
微软语音合成工具+基于Electron + Vue + ElementPlus + Vite 构建并能将文字转换为语音 MP3
微软语音合成工具基于Electron Vue ElementPlus Vite 构建并能将文字转换为语音 MP3 资源下:微软语音合成工具基于ElectronVueElementPlusVite构建并能将文字转换为语音MP3资源-CSDN文库 本文将介绍如何使用微软语音合成工具和前端技术栈进行开发,…...

Mongodb学习笔记2
文章目录前言一、搭建项目二、开始编写java代码1. 新增2.查询3. 修改4. 删除5.根据条件查询6. 关联查询7. 索引相关总结前言 MongoTemplate 相关操作 CRUD,聚合查询等; 一、搭建项目 springboot项目创建引入mongo 依赖docker 安装好mongo数据库配置yml 链接mongo spring:dat…...
学习Tensorflow之基本操作
学习Tensorflow之基本操作Tensorflow基本操作1. 创建张量(1) 创建标量(2) 创建向量(3) 创建矩阵(4) shape属性(5) 判别张量类型(6) 列表和ndarray转张量2. 创建特殊张量(1) tf.ones与tf.ones_like(2) tf.zeros与tf.zeros_like(3) tf.fill(3) tf.random.normal(4) tf.random.uni…...

《Spring系列》第2章 解析XML获取Bean
一、基础代码 Spring加载bean实例的代码 public static void main(String[] args) throws IOException {// 1.获取资源Resource resource new ClassPathResource("bean.xml");// 2.获取BeanFactoryDefaultListableBeanFactory factory new DefaultListableBeanFa…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

Xcode 16 集成 cocoapods 报错
基于 Xcode 16 新建工程项目,集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...