如何在Jenkins执行命令中使用sudo命令
如何在Jenkins执行命令中使用sudo命令
我正在使用Jenkins来运行我的构建。
其中一个步骤是使用sudo将某些文件复制并放置在/etc/init目录下。
${host-used}返回www-data@ip-address
问题出在第二个命令上。
当我运行第一个命令时,我可以在Jenkins的控制台日志中看到我的结果打印出来。
对于第二个命令,我得到一个no tty present
的消息。
所以我将第二个命令改成了
我得到了一个
Pseudo-terminal will not be allocated because stdin is not a terminal
我该如何解决这个问题?
更新:
我也尝试过这个。
我得到了:
bash: www-data@ipaddress: command not found Connection to ipaddress closed.
我想强调的是命令使用是正确的。但是我无法读取消息。
更新2:
有时候你问一个问题,但是后来你意识到你想要问的问题并不是你想要解决的真正问题。
这个问题就是这样。
我只是想执行一些在Jenkins中运行的命令,并查看这些命令的打印输出。这些命令恰好需要sudo。
Jenkins基本上是以另一个用户www-data的身份进行ssh来执行这些命令。
我在打印出那些需要sudo的命令在Jenkins中的结果方面遇到了麻烦。
在周六愉快地花时间研究了一些非常有帮助的stackoverflow答案之后,我意识到我可以尝试以root用户身份进行ssh来执行这些命令,而不是使用sudo。
这样做起作用了。
我将使用这种方法来回答这个问题,因为我只是想要执行一些Jenkins中的命令并查看它们的打印输出。
问题的原因是在使用Jenkins的exec命令时,sudo命令无法正常运行。这可能是因为通过ssh登录的用户没有可用的命令。错误信息显示连接成功,但无法运行命令并断开连接。可能是因为在Jenkins脚本中缺少一些环境变量,而在正常的ssh登录中,这些变量是定义好的并获得会话。
解决方法可以尝试以下几种方式:
1. 使用完整路径来执行命令,确保sudo命令没有问题。
2. 使用sudo命令时加上"-i"选项,以使用root的配置文件,并切换到正确的目录下。
3. 编写一个shell脚本,在脚本中使用sudo命令,并执行需要的操作。在Jenkins的Web界面上使用"execute shell script"选项来调用这个脚本。
这里提供了一段示例的shell脚本代码,可以根据实际情况修改主机名和路径:
#!/bin/bash function ssh_and_run_cake() { echo "Working on $hostname --- $instance --::" $ssh -t $hostname "sudo su -i ' echo \"CD Folder run cake init -----------------\"; cd /path/to/cakephp/app; Console/cake init_runners copy_runners_into_initd; echo \"All done------------------------\"; '"; } function rollout_cake() { #for hostname in ${h[@]}; do hostname="yourhost" ssh_and_run_cake # done } rollout_cake
需要注意的是,脚本需要放在Jenkins服务器的本地文件系统上,并在Jenkins的Web界面上配置执行Shell脚本的选项,指定脚本的完整路径。
,问题的原因是在Jenkins的exec命令中无法正确使用sudo命令,可能是由于缺少环境变量的原因。解决方法包括使用完整路径来执行命令、使用sudo命令时加上"-i"选项来切换到正确的目录,或者编写一个shell脚本来使用sudo命令并执行需要的操作。