Jenkins Pipeline 多分支流水线 Input length = 1

jenkins,pipeline,多分,支流,水线,input,length · 浏览次数 : 254

小编点评

**错误分析:** ``` java.nio.charset.MalformedInputException: Input length = 1 ``` **问题:** Pipeline 中的 `node[Pipeline]` 端点可能遇到 Input长度为 1 的错误,因为该端点可能尝试读取来自远程节点的输入,但输入长度为 1,可能无法读取任何内容。 **解决方案:** 1. **检查远程节点的输入长度:**使用 `node.getNodeInfo()` 方法获取远程节点的输入长度,并确保它正确。 2. **调整 Jenkins Pipeline 中的读取操作:**在 `node[Pipeline]` 端点之前,使用 `node.read()` 或 `node.readFully()` 方法读取远程输入,并确保其长度符合预期。 3. **设置文件编码:**确保所有输入文件的编码与输出文件的编码一致,通常使用 `UTF-8`。 4. **使用 `try-catch` 块捕获异常:**在 `node[Pipeline]` 端点中使用 `try-catch` 块捕获任何 `MalformedInputException`,并处理错误。 **示例:** ```groovy pipeline { agent any stages { stage("Remote Input") { steps { node(task: "Get Remote Input") { script { // 获取远程节点的输入字符串 String input = node.read() // 检查输入长度 if (input.length == 1) { throw new MalformedInputException("Input length should be greater than 1") } // 将输入字符串写入本地文件 writeFile(file: "remote-input.txt", text: input) } } } } stage("Build Pipeline") { steps { // 使用 node.read() 读取远程输入文件 String pipelineInput = node.read() // 使用 pipelineInput 进行构建 // ... } } } } ``` **注意:** * `node.getNodeInfo()` 方法可能需要在执行之前执行一次 `node.getNodeInfo()`。 * `writeFile()` 方法会自动设置文件编码为 `UTF-8`。

正文

Jenkins 多分支流水线 构建过程中报错。

[Pipeline] // node
[Pipeline] End of Pipeline
java.nio.charset.MalformedInputException: Input length = 1
	at java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:274)
	at java.base/java.lang.StringCoding.newStringNoRepl1(StringCoding.java:1056)
	at java.base/java.lang.StringCoding.newStringNoRepl(StringCoding.java:1006)
	at java.base/java.lang.System$2.newStringNoRepl(System.java:2193)
	at java.base/java.nio.file.Files.readString(Files.java:3287)
	at hudson.FilePath$ReadToString.invoke(FilePath.java:2377)
	at hudson.FilePath$ReadToString.invoke(FilePath.java:2372)
	at hudson.FilePath.act(FilePath.java:1192)
	at hudson.FilePath.act(FilePath.java:1175)

注意要将文件编码设成对应的,Windows 编码要设成 ANSI 否则 Jenkins Pipeline 多分支流水线构建时,控制台输出乱码
image
image

与Jenkins Pipeline 多分支流水线 Input length = 1相似的内容:

Jenkins Pipeline 多分支流水线 Input length = 1

Jenkins 多分支流水线 构建过程中报错。 [Pipeline] // node [Pipeline] End of Pipeline java.nio.charset.MalformedInputException: Input length = 1 at java.base/java.nio

Jenkins 多分支流水线(SVN)

实际应用过程中,一般多分支流水线的方式用得比较多一些, master 对应 生成环境 develop 对应 测试环境, 将不同分支的代码构建到不同的环境中 添加 Jenkinsfile 文件 Jenkinsfile 内容见:Jenkins Pipeline 流水线 - 完整构建 Pipeline S

【Jenkins系列】快速创建Jenkins Job

Jenkins Job 类型 1.Freestyle project 这个是jenkins的基础功能,可以用它来执行各种构建任务,他只能构建在一个电脑上,如果没有太多的需求,这个job基本够用了,它包含了所有基础功能. 2.Pipeline 真实的工作环境有很多job,比如先编译,然后执行静态代码检

Jenkins Pipeline 流水线 - 声明式 Demo

Jenkins Pipeline 流水线 流水线既能作为任务的本身,也能作为 Jenkinsfile 使用流水线可以让我们的任务从UI手动操作,转换为代码化,像dockerfile 一样。从shell 命令到配置文件,更适合大型项目,可以让团队其他开发者同时参与进来, 完整语法 tools:添加工具

Jenkins Pipeline 流水线 - 拉代码(SVN) + Maven 编译打包

Jenkins Pipeline 流水线 步骤 拉取SVN代码 -> Maven 构建 -> Docker 编译 -> 发布至阿里云仓库 -> K8S 更新 Jenkins插件安装 Localization: Chinese (Simplified) Subversion 【2.16.0】 --从S

Jenkins Pipeline 流水线 - 添加节点 使用代理

Jenkins 安装在 Windows 上 Docker 在Linux 上 流程 将 Docker 在 Jenkins 节点中维护 Pipeline 中指定某些阶段使用哪个节点 添加节点 Checking Java version in the PATH openjdk version "1.8.0

Jenkins Pipeline 流水线 - withCredentials 使用

添加凭证 Pipeline script pipeline { agent any stages { stage('withCredentials 使用凭证') { steps { withCredentials([usernamePassword(credentialsId: 'DockerSer

Jenkins Pipeline 流水线 - 上传文件 Publish over SSH 执行命令

Jenkins Pipeline 流水线 - 上传文件 Publish over SSH 执行命令 Jenkins插件安装 Publish over SSH 系统配置 生成代码 sshPublisher: Send build artifacts over SSH 需要在 生成 sshPublish

Jenkins Pipeline 流水线 - 上传文件 Publish over SSH + Docker 编译 + 上传到阿里仓库

Jenkins Pipeline 流水线 Publish over SSH 将jar上传到远程 Docker 服务器、执行编译命令生成镜像、将镜像上传到阿里仓库 Publish over SSH Jar包上传、编译、上传 生成上传 jar 包脚本配置 生成上传 Dockerfile 脚本配置 注意在

Jenkins Pipeline 流水线 - 使用代理节点,Remote SSH 对 K8S 进行升级

Jenkins Pipeline 流水线 - K8S kubectl 升级 使用代理节点 Remote SSH 远程执行命令进行升级 Remote SSH 方式 安装插件 SSH Pipeline Steps Pipeline SSH 脚本 credentialsId: 'K8SMaster' pi