1. 程式人生 > >解決Jenkins執行sudo命令時出現“sudo: no tty present and no askpass program specified”的錯誤

解決Jenkins執行sudo命令時出現“sudo: no tty present and no askpass program specified”的錯誤

在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