我有一个构建盒,我用它来进行连续构建以及每晚运行单元测试。我正在使用Jenkins来构建/单元测试脚本,它运行在Windows机器上,因为我们的编译器是基于Windows的。
我们的企业解决方案之一使用带有rabbitmq
的Python代码来交换消息,以便通过故障网络同步特定的数据库表。我有单元测试来帮助验证更新是否正确发生。
为了对Python更新进行单元测试,我需要能够停止在我的Linux机器上运行的某些服务,然后在更新python代码后重新启动它们。我在Windows框和Linux框之间设置了密钥交换,这样我就不必在批处理脚本中输入密码了。
当我远程进入Windows框时,我可以成功运行批处理文件,该文件使用依赖于密钥交换的plink
命令和putty
的pageant
(在后台运行)。例如我使用plink从我的批处理文件中的命令行在Linux机器上执行命令。但是,当我尝试从Jenkins运行批处理文件时,批处理文件无法正常工作,因为在尝试运行plink
命令时会提示输入SSH密码。
我相信我目前的问题可以通过两个问题来概括,我希望可以通过这两个问题进行验证和纠正:
plink
命令而不会被提示输入密码。我该怎么做才能解决上述两个问题?如果有一个很好的替代putty用于Windows和Linux之间的自动密钥交换,我会有兴趣听到它(我宁愿远离Cygwin与OpenSSH,但如果以上可以,可能会走这条路线'得到纠正)。
我在我的Windows Jenkins盒子上使用plink
每天与Linux进行通信,没有任何问题。
就像你理论化的那样,Jenkins在它自己的用户(Windows默认,我认为是SYSTEM
用户)下运行,这与你登录的会话不同,即使你以Administrator
身份登录。您的身份验证密钥存储在您的(Administrator
或其他)配置文件目录中
你需要做的是使用Pageant
将你的密钥导出为ppk
文件,然后使用ppk
提供这个plink
文件的路径:
plink -i "C:\path\to\id.ppk"
看起来有一种更简单的方法可以做我想做的事,Jenkin的插件https://wiki.jenkins-ci.org/display/JENKINS/Publish+Over+SSH+Plugin