我正在使用 jenkins 来运行我的构建。
我的步骤之一是复制某些文件并使用 sudo 将它们放在 /etc/init 中
<exec command="ssh -A ${host-used} '/etc/init.d/ConvertDaemon stop'" outputProperty="result" escape="false">
</exec>
<echo msg="${result}" />
<exec command="ssh -A ${host-used} 'sudo Console/cake init_runners copy_runners_into_initd'" outputProperty="result" escape="false" />
<echo msg="${result}" />
${host-used} returns www-data@ip-address
问题是第二个命令。
当我运行第一个命令时,我可以在 jenkins 的控制台日志中看到我的结果打印出来。
对于第二个命令,我收到一条no tty present
消息
所以我将第二个命令更改为
<exec command="ssh -t ${host-used} -A ${host-used} 'sudo Console/cake init_runners copy_runners_into_initd'" outputProperty="result" escape="false" />
<echo msg="${result}" />
我得到一个
Pseudo-terminal will not be allocated because stdin is not a terminal
我该如何克服呢?
更新:
我也试过这个。
<exec command="ssh -t -t ${host-used} -A ${host-used} 'sudo Console/cake init_runners copy_runners_into_initd'" outputProperty="result" escape="false" />
<echo msg="${result}" />
我有:
bash: www-data@ipaddress: command not found
Connection to ipaddress closed.
我想强调该命令使用正确。但我无法阅读该消息。
更新2:
有时您提出问题,但随后您意识到您要提出的问题并不是您要解决的真正问题。
这个问题是这样的。
我想要做的就是执行一些由 jenkins 运行的命令并查看命令的打印输出。这些命令恰好需要 sudo。
Jenkins 基本上 ssh 作为另一个用户 www-data 来执行这些命令。
对于需要 sudo 的命令,我无法在 jenkins 中打印结果。
在度过了一个愉快的星期六并提供了一些非常有用的 SO 答案之后,我意识到我可以通过将 jenkins ssh 作为 root 来简单地尝试在没有 sudo 的情况下执行这些命令。
有效。
我将用这种方法来回答这个问题,因为这就是我想要的——在 jenkins 中执行一些命令并查看它们的打印输出。