Jenkins Pipeline执行sh命令时变量后自动新增换行导致失败如何解决
问题根因
你遇到的换行不是Jenkins主动插入的,基本都是reporthashref这个变量本身在赋值时就携带了尾部换行,最常见的场景是你通过sh(returnStdout: true)执行git、shell命令获取输出时,没有去掉命令默认返回的末尾换行符。
规范解决方案
1. 源头处理变量(最推荐)
给变量赋值时直接调用.trim()方法去掉首尾空白字符(包含换行、空格、制表符),示例:
// 原有赋值逻辑(举例) def reporthashref = sh(script: 'git rev-parse HEAD', returnStdout: true) // 改成以下写法,直接去掉尾部换行 def reporthashref = sh(script: 'git rev-parse HEAD', returnStdout: true).trim()
2. 执行命令时临时处理
如果不想修改变量赋值逻辑,也可以在拼接命令时直接对变量做trim处理:
sh """cd /var/jenkins/fcs/cars/ && node validateCommit.js \"${reporthashref.trim()}\" 'Suzuki, Ignis'"""
3. 更安全的参数化写法(完全避免特殊字符/换行问题)
不用字符串拼接的方式写sh命令,改用参数传递的形式,Jenkins会自动处理所有特殊字符、换行、转义问题,同时还能避免shell注入风险:
sh( script: 'cd /var/jenkins/fcs/cars/ && node validateCommit.js "$1" "$2"', args: [reporthashref.trim(), 'Suzuki, Ignis'] )
验证方法
可以在变量赋值后加一行日志确认问题:
println "原始变量长度:${reporthashref.length()},trim后长度:${reporthashref.trim().length()}"
如果两个长度差值为1(Linux换行\n)或2(Windows换行\r\n),就可以确认是变量本身携带换行导致的问题。
内容的提问来源于stack exchange,提问作者Qohelet
相关产品推荐
相关产品推荐

