我试图在jenkins中添加一个构建步骤,以便将文件从我的构建服务器复制到我的Web应用程序服务器。我在命令提示符下使用了以下命令
sudo scp -r /var/lib/jenkins/workspace/demoproj/publish root@0.0.0.0:/usr/temp
但是当我运行此命令时,它每次都会提示我输入密码。我发现了sshpass,但是当我运行这个命令时......
sudo sshpass -p "passwordhere" scp -r /var/lib/jenkins/workspace/demoproj/pub root@0.0.0.0:/usr/temp
终端卡住了。永远不会完成它。
我的主要问题是如果我将第一个命令添加到jenkins的构建步骤中,它就无法传递密码。如何在jenkins中提供密码,或者修改命令以传递我的凭据?
有用的信息:我在Windows 10上使用Putty连接到我的 Ubuntu 16.04.3来自另一台Ubuntu 16.04.3服务器的LTS x64服务器。
答案 0 :(得分:2)
首先,需要在两个系统上安装sshpass,即运行jenkins实例的系统以及您尝试访问的系统:root@0.0.0.0。您可以通过执行哪些sshpass'来验证它。或者' whereis sshpass'。如果它甚至没有安装,那么你需要先安装它。
另外,您是否曾尝试过对所述机器执行ssh:root @0.0.0.0来自您拥有jenkins实例的系统?如果没有,那么“已知主机”中可能没有条目。任何一个系统。为此你可以用' -o StrictHostKeyChecking = no'来做ssh。在已知主机中进行自动输入的选项。
或者,如果您不想一次又一次地输入密码,则应使用'键'。为两个系统生成唯一键,并使用-i选项执行scp或ssh。
您应该使用jenkins凭据,而不是直接在脚本中使用敏感密码。将整个scp或ssh部分放在一个块中,该块看起来像:withCredentials(){}。
答案 1 :(得分:0)
如果您每次都需要在附近输入密码,那么CI有什么意义?安装“发布ssh”插件,它有一个通过ssh发送内容的步骤
https://wiki.jenkins.io/display/JENKINS/Publish+Over+SSH+Plugin
查看“在构建期间使用SSH”部分,您可以使用“通过SSH发送文件或执行命令”构建步骤。这将在插件安装后可用。