期望实用工具从jenkins执行时不工作

我们有一个使用expect实用程序进行交互式执行的unix脚本。 当我们从unix服务器运行时,这个脚本运行良好。

如果我们从jenkins运行这个脚本,它不起作用。

以下是脚本

var="xxxxx" expect -c " spawn sudo cp /abcd/sjws/config/obj.conf /abcd/sjws/config/obj.conf_jenkins expect { "Password:" { send $var\r;interact } } exit " 

下面是我们从jenkins运行的输出

 spawn sudo cp /abcd/sjws/config/obj.conf /abcd/sjws/config/obj.conf_jenkins Password: Password: Build step 'Execute shell' marked build as failure Finished: FAILURE 

Solutions Collecting From Web of "期望实用工具从jenkins执行时不工作"

由于Jenkins不能从实际的终端运行它,所以interact不起作用,因为实际上不存在任何用户交互。

你可以替换interact

 expect eof wait 

请使用var ='xxxxx'而不是var =“xxxxx”。 希望这个帮助。

詹金斯似乎不支持交互式命令模式。

尝试使用sshpass工具以非交互方式传递密码。

安装sshpass

 $ sshpass -p "password" {your command} 

这个问题是非常相似的: 詹金斯不等待打电话给一个bash脚本与期望 ; 对于遇到类似问题的用户, 特别是使用“ su ”工具更改用户时,请注意,只要用户更改,Jenkins就会关闭SSH连接。 你不能继续给新用户提供命令。 以直接发送命令的方式设计脚本,例如:

 spawn su - username -c "yoursinglewordcommand" 

然后像往常一样期待脚本的其余部分(我也成功与交互式命令)。