在Jenkins的使用过程中,如果在脚本中使用到sudo命令,有可能出现如下所示的错误:

sudo: no tty present and no askpass program specified

这是因为Jenkins服务器在执行sudo命令时的上下文有误,导致这个命令执行的异常。

解决方案:

  1. 在Jenkins宿主服务器上运行如下命令
    $ sudo visudo
  2. 在文件的末尾加上一行
    jenkins ALL=(ALL) NOPASSWD: ALL
  3. 保存文件(注意保存的时候修改文件名,文件名后缀不要加上默认的.tmp,即可覆盖原文件)
    Ctrl+O
  4. 退出编辑
    Ctrl+X
  5. 重启Jenkins服务
    $ /etc/init.d/jenkins restart

最后,重新执行构建任务,不会出现先前的错误。


PS:如果误操作修改了/etc/sudoers的权限来修改上述文件,则会导致如下所示的错误:

sudo :/etc/sudoers is world writable
sudo : no valid sudoers source found, quitting
sudo : unable to initialize poling plugin

这是Linux的一种保护机制。因此,如果出现上述误操作,则需要执行如下命令来解决:
$ pkexec chmod 0440 /etc/sudoers

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐