Jenkins流水线sh脚本中Docker容器文件复制至主机报错排查
问题分析与解决
核心原因
你的${dockername}变量值里包含了换行符或其他空白控制字符,导致Groovy替换变量后,命令被拆分成了两行:
sudo docker cp d13eed950bad :/home/jenkins/workspace/Knife/Component_version.txt /data/test/source/Component_version.txt
shell执行时只识别第一行,自然会报参数不足的错误。
解决步骤
- 验证变量取值
在流水线脚本里添加打印语句,确认变量内容是否存在多余空白:
echo "dockername值为: '${dockername}'"
如果输出里dockername的内容后跟着换行,就坐实了问题根源。
- 清理变量中的空白字符
使用变量时加上trim()方法,去掉前后的换行、空格、制表符:
sh """ #!/bin/bash sudo docker cp ${dockername.trim()}:/home/jenkins/workspace/Knife/Component_version.txt /data/test/source/Component_version.txt """
- 备选方案:通过环境变量传递
如果不想依赖Groovy的变量替换,可以把清理后的变量存入环境变量,再在shell脚本中调用:
env.DOCKER_NAME = dockername.trim() sh ''' #!/bin/bash sudo docker cp ${DOCKER_NAME}:/home/jenkins/workspace/Knife/Component_version.txt /data/test/source/Component_version.txt '''
内容的提问来源于stack exchange,提问作者haker146
相关产品推荐
相关产品推荐

