我正在Jenkinsfile中运行以下命令。然而,我收到错误“输入设备不是TTY”。
docker run -v $PWD:/foobar -it cloudfoundry/cflinuxfs2 /foobar/script.sh
有没有一种方法可以在不进行交互模式的情况下从Jenkinsfile运行脚本?
我基本上有一个名为script.sh的文件,我想在Docker容器中运行。
我正在Jenkinsfile中运行以下命令。然而,我收到错误“输入设备不是TTY”。
docker run -v $PWD:/foobar -it cloudfoundry/cflinuxfs2 /foobar/script.sh
有没有一种方法可以在不进行交互模式的情况下从Jenkinsfile运行脚本?
我基本上有一个名为script.sh的文件,我想在Docker容器中运行。
当前回答
对于那些在Windows上遇到这个错误和gitbash的人来说,只需使用PowerShell,它就可以完美地工作了。
其他回答
如果您在windows上使用gitbash,只需将
冬季的
在“码头线”之前:
winpty docker exec -it some_container bash
而不是使用-it使用--tty
所以你的docker运行应该是这样的:
docker run -v $PWD:/foobar --tty cloudfoundry/cflinuxfs2 /foobar/script.sh
只要不指定要装载的卷(例如.:/mountpoint或${pwd}:/mountpoint
我找到的最佳解决方法是在Visual Code Studio中使用git bash插件,并使用终端启动和停止容器或docker compose。
使用docker compose exec-T通过Jenkins为我解决了这个问题
docker compose exec-T containerName php script.php
为了让docker分配TTY(-t选项),当docker运行被调用时,您已经需要在TTY中。Jenkins不在TTY中执行其任务。
话虽如此,您在Jenkins中运行的脚本可能也希望在本地运行。在这种情况下,分配TTY非常方便,这样在本地运行时就可以发送类似ctrl+c的信号。
要解决此问题,请使脚本可以选择使用-t选项,如下所示:
test -t 1 && USE_TTY="-t"
docker run ${USE_TTY} ...