【发布时间】:2015-11-04 10:43:25
【问题描述】:
我已经构建了一个小型 Helloworld 节点应用程序。这个想法是将代码推送到 Github 服务器,然后将通知(webhook)发送到将构建代码的 Jenkins 服务器。这部分效果很好。然后,我还想在每次 Jenkins 构建成功时通过 SSH 将代码部署到服务器。我无法执行此步骤。
为了能够使用 SSH 部署代码,我编写了一个小型 shell 脚本(请注意,我已安装 SSH 代理插件并正确配置了带有私钥的凭据):
#---Contents of /script/deploy-dev.sh---
ssh username@<IP_OF_MY_SERVER> <<EOF
cd ~/HelloWorld
sudo git pull
sudo npm install --production
sudo forever restartall
exit
EOF
我将以下代码放入“执行 shell”框中(作为构建的一部分)
npm install
./script/test
./script/deploy-dev.sh
前两行运行良好,构建成功。添加最后一行会给我以下错误消息:
不会分配伪终端,因为标准输入不是终端。 02:33:38 sudo:不存在 tty,也没有指定 askpass 程序
有什么建议吗?
注意:我实际上正在关注this 教程,但它建议选择需要 Github 插件的“推送到 Github 时构建”,因为这是一个企业 Jenkins,我无法添加插件。只有 SSH-agent 所以想用那个
【问题讨论】:
-
您似乎没有在目标服务器上配置无密码 sudo。
sudo: no tty present and no askpass program specified是因为 sudo 需要密码,但无法要求您输入密码。您可以手动 ssh 进入机器并尝试执行 sudo 命令来确认吗? -
是的,你完全正确。我给用户密码少了 Suso,这解决了它!
-
好,我已将其添加为答案!
标签: jenkins ssh jenkins-plugins