我正在从中运行以下命令Jenkinsfile。但是,出现错误 “输入设备不是TTY” 。
Jenkinsfile
docker run -v $PWD:/foobar -it cloudfoundry/cflinuxfs2 /foobar/script.sh
有没有一种方法可以在Jenkinsfile不进行交互模式的情况下从中运行脚本?
我基本上有一个名为的文件script.sh,希望在Docker容器中运行。
script.sh
-it从cli中删除使其不具有交互性,并删除TTY。如果不需要,例如在Jenkins或cron脚本中运行命令,则应这样做。
-it
或者,您也可以将其更改为-i输入到不是来自TTY的docker命令中的输入。如果您在命令行中有类似xyz | docker ...或这样的内容docker ... <input,请执行此操作。
-i
xyz | docker ...
docker ... <input
或者,您可以将其更改为-t想要TTY支持但在输入设备上不可用的情况。这样做是为了对日志中的输出进行彩色格式化,或者用于以后使用适当的终端连接到容器时使用的格式。
-t
或者,如果您需要交互式终端并且不在Linux或MacOS的终端中运行,请使用其他命令行界面。据报道,PowerShell在Windows上包括此支持。
什么是TTY?这是一个终端接口,它支持颜色输出,转义序列,移动光标等,这是从老式笨拙的终端连接到大型机而来的。今天,它是由Linux命令终端和ssh接口提供的。有关更多详细信息,请参见Wikipedia文章。