如何在Jenkins脚本化管道中跨Linux服务器复制node_js目录?
问题解决:Jenkins脚本化管道中scp复制整个目录的正确语法
你的错误出在scp选项的使用方式和参数位置上,具体原因:
-r(递归复制目录)是scp的核心选项,必须放在选项区域,不能和路径参数混放StrictHostKeyChecking=no是ssh/scp的配置选项,需要用-o前缀声明,不能直接作为参数传递- 当你用
/*展开目录内容时,子目录(如node_modules)会被当作单独的参数传递,没有-r的话scp无法处理目录复制
正确的两种写法
写法1:复制整个node_js目录到目标服务器
这种方式会在目标路径/home/ec2-user下生成完整的node_js目录:
stage('deploy to another server'){ steps{ sshagent(['SSHAgent']) { sh 'scp -r -o StrictHostKeyChecking=no /var/lib/jenkins/workspace/node_js ec2-user@54.83.76.126:/home/ec2-user' } } }
写法2:复制node_js目录内的所有内容到目标目录
这种方式会把node_js下的所有文件、子目录直接放到/home/ec2-user目录下:
stage('deploy to another server'){ steps{ sshagent(['SSHAgent']) { sh 'scp -r -o StrictHostKeyChecking=no /var/lib/jenkins/workspace/node_js/* ec2-user@54.83.76.126:/home/ec2-user/' } } }
关键修正点
- 确保
-r放在scp命令最前面的选项区,开启递归复制 - 用
-o前缀声明StrictHostKeyChecking=no选项,跳过主机密钥检查 - 如果要复制目录内容,目标路径末尾加
/可以明确告诉scp将内容放到该目录下(可选,但能避免歧义)
内容的提问来源于stack exchange,提问作者Jit Paul
相关产品推荐
相关产品推荐

