Jenkins通过Jenkinsfile运行pyinstaller-windows容器报错求助
问题分析与解决
核心问题1:容器启动后立即退出
cdrx/pyinstaller-windows:python3镜像的默认入口命令(entrypoint)是pyinstaller,Jenkins启动该容器时未传入任何参数,导致pyinstaller执行后立刻退出,容器随之停止。Jenkins后续尝试获取容器进程信息时,容器已不在运行状态,因此抛出Container ... is not running错误。
核心问题2:目录切换不生效
Jenkins的每个sh步骤都是独立子进程,单独执行sh 'cd app/'只会在当前子进程切换目录,不会影响后续sh步骤。后续的pip install和./gui_to_exe.sh仍会在工作根目录执行,必然找不到对应文件或脚本。
修正后的Jenkinsfile
pipeline { agent none stages { stage('Deliver') { agent { docker { image 'cdrx/pyinstaller-windows:python3' // 覆盖默认entrypoint,启动bash保持容器运行 args '--entrypoint=/bin/bash' } } steps { // 使用dir步骤切换目录,确保后续命令在指定路径执行 dir('app') { sh 'pip install -r requirements.txt' dir('gui') { sh './gui_to_exe.sh' // 包含pyinstaller命令的脚本 } } } post { success { archiveArtifacts 'app/gui/appName.exe' // 根据实际生成路径调整 } } } } }
额外注意事项
- 确认
appName.exe的实际生成路径,调整archiveArtifacts的路径,避免找不到文件。 - 如果
gui_to_exe.sh缺少执行权限,可在执行前添加sh 'chmod +x gui_to_exe.sh'(放在dir('gui')块内)。
内容的提问来源于stack exchange,提问作者Gaston
相关产品推荐
相关产品推荐

