【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…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
