1. 程式人生 > 其它 >Jenkins:the input device is not a TTY

Jenkins:the input device is not a TTY

如果您在使用jenkins執行docker容器內命令時,使用的了-t引數

docker exec -it test_container bash build.sh

可能會有如下報錯

the input device is not a TTY

由於docker的-t引數會為輸出新增一個偽終端Allocate a pseudo-TTY,所以jenkins無法捕捉到輸出,您只需要去掉-t引數即可

docker exec -i test_container bash build.sh

pseudo-TTY:在Linux中,TTY也許是跟終端有關係的最為混亂的術語。TTY是TeleTYpe的一個老縮寫。Teletypes,或者teletypewriters,原來指的是電傳打字機,是通過序列線用印表機鍵盤通過閱讀和傳送資訊的東西,和古老的電報機區別並不是很大。之後,當計算機只能以批處理方式執行時(當時穿孔卡片閱讀器是唯一一種使程式載入執行的方式),電傳打字機成為唯一能夠被使用的“實時”輸入/輸出裝置。最終,電傳打字機被鍵盤和顯示器終端所取代,但在終端或TTY接插的地方,作業系統仍然需要一個程式來監視串列埠。一個getty“Get TTY”的處理過程是:一個程式監視物理的TTY/終端介面。對一個虛擬網路伺服器(VNC)來說,一個偽裝的TTY(Pseudo-TTY,即假冒的TTY,也叫做“PTY”)是等價的終端。當你執行一個xterm(終端模擬程式)或GNOME終端程式時,PTY對虛擬的使用者或者如xterm一樣的偽終端來說,就像是一個TTY在執行。“Pseudo”的意思是“duplicating in a fake way”(用偽造的方法複製),它相比“virtual”或“emulated”更能真實的說明問題。而在的計算中,它卻處於被放棄的階段。

tty也是一個Unix命令,用來給出當前終端裝置的名稱。
終端是一種字元型裝置,它有多種型別,通常使用tty來簡稱各種型別的終端裝置。

有關jenkins的自動化配置看這裡
有關jenkins的tty問題看這裡
有關jenkins的反向代理配置看這裡
有關jenkins的java11問題看這裡
有關jenkins的私鑰格式錯誤問題看這裡
有關jenkins的webhooks配置看這裡