Jenkins Pipeline部署Flask应用卡滞Build阶段无法推进至Test阶段求助
问题解决:Jenkins Pipeline卡在Flask应用启动阶段无法推进
问题根源
你的Pipeline在Build阶段执行python3 flaskhome.py时,Flask应用是前台运行的,会持续占用Jenkins的执行线程,导致后续的echo 'building'和Test阶段完全无法执行,流程直接停滞在应用启动的日志输出环节。
解决方案
1. 后台启动Flask应用
把Flask应用的启动命令改为后台运行,释放Jenkins的执行线程。可以用nohup命令结合日志重定向实现:
nohup python3 flaskhome.py > flask_app.log 2>&1 &
nohup:让进程脱离当前终端运行,即使当前会话结束也不会终止> flask_app.log 2>&1:把标准输出和错误输出都写入日志文件,方便后续排查&:把进程放到后台执行
2. 等待应用启动完成
添加轮询检查,确保Flask服务真正启动后再进入Test阶段,避免测试步骤因为服务未就绪而失败。比如默认Flask端口是5000,用curl轮询:
until curl -s http://localhost:5000; do sleep 2; done
如果你的应用有特定的健康检查接口,也可以替换成对应的URL,比如curl -s http://localhost:5000/health。
3. 移除重复的代码拉取步骤
你的Checkout阶段已经通过checkout scmGit拉取了代码,Build阶段不需要再执行git branch: 'main', ...命令,直接删掉即可,避免冗余操作。
修改后的完整Pipeline代码
pipeline { agent any stages { stage('Checkout') { steps { checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: '9c4a0738-2cf4-4485-b83c-f8683dab65a0', url: 'https://github.com/clinton-pillay7/jenkins-flask-project']]) } } stage("Build") { steps { sh 'pip uninstall -y pymongo' sh 'pip install -r requirements.txt' sh 'pip install pymongo' # 后台启动Flask应用并记录日志 sh 'nohup python3 flaskhome.py > flask_app.log 2>&1 &' # 等待应用启动完成 sh 'until curl -s http://localhost:5000; do sleep 2; done' echo '应用构建并启动完成' } } stage("Test"){ steps{ echo "测试阶段执行" # 这里可以添加实际的测试命令,比如curl接口验证输出 sh 'curl -s http://localhost:5000' } } } }
额外注意事项
- 如果你的Flask应用使用了非默认端口,记得修改
curl命令中的端口号 - 若Jenkins agent是容器化的,要确保容器内部可以访问到Flask应用的端口
- 后续可以添加进程清理步骤,避免每次构建后残留旧的Flask进程
内容的提问来源于stack exchange,提问作者Clinton P
相关产品推荐
相关产品推荐

