Jenkinsfile使用Docker PowerShell镜像执行任务时挂起该如何解决?
问题根因
- 配置中docker运行参数携带了
-i、-t两个交互式场景专用参数:-i会保持容器标准输入持续开启,-t会为容器分配伪终端,Jenkins流水线属于后台非交互执行场景,伪终端会导致脚本执行完成后容器进程无法正常退出,最终出现任务持续挂起的问题。 - 若无需捕获powershell命令的标准输出,可去掉
returnStdout: true配置,进一步降低异常出现概率。
修复后配置
pipeline { agent { docker { image 'mcr.microsoft.com/azure-powershell' args "--mount type=bind,src=/opt,dst=/opt --entrypoint=''" } } stages { stage('PwShell') { steps { powershell(returnStdout: true, script: 'Write-Output "PowerShell is mighty!"') } } } }
可选优化方案
如果修改参数后仍有偶发挂起的情况,可在powershell脚本末尾显式添加exit 0强制进程执行完成后退出,修改后的步骤配置如下:
powershell(returnStdout: true, script: 'Write-Output "PowerShell is mighty!"; exit 0')
内容的提问来源于stack exchange,提问作者Venkatesh Ramanujam
相关产品推荐
相关产品推荐

