You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Pipeline并行构建:测试完成后终止日志收集任务求助

Jenkins Pipeline 并行任务中终止日志收集的解决方案

问题场景

在Jenkins Pipeline中配置了测试任务与日志收集任务并行执行,但adb logcat会持续运行无法自动终止,导致整个阶段卡壳。需要实现测试任务完成后自动终止日志收集的逻辑。

原Pipeline代码:

stage('Smoke Run') {
    steps {
        parallel(
            first: {
                catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
                    sh '$PYTHON -m pytest --testit android_tv/tests/smoke_run/ --clean-alluredir --alluredir=/Users/jenkins/allure-report/android-tv'
                }
            },
            second: {
                sh "$ADB logcat -c"
                sh "$ADB logcat -> ~/jenkins/workspace/Android_TV_Smoke_Run/android_tv/tests/smoke_run/logs_tv/log.log"
            }
        )
    }
}

解决方法

核心思路是让日志收集进程后台运行并记录PID,测试任务结束后通过PID杀掉该进程。修改后的代码如下:

stage('Smoke Run') {
    steps {
        script {
            def logFilePath = "~/jenkins/workspace/Android_TV_Smoke_Run/android_tv/tests/smoke_run/logs_tv/log.log"
            def pidFile = "/tmp/logcat.pid"
            
            parallel(
                testTask: {
                    catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
                        sh '$PYTHON -m pytest --testit android_tv/tests/smoke_run/ --clean-alluredir --alluredir=/Users/jenkins/allure-report/android-tv'
                    }
                },
                logcatTask: {
                    // 清空旧日志
                    sh "$ADB logcat -c"
                    // 后台启动logcat并记录进程ID
                    sh "$ADB logcat > $logFilePath & echo \$! > $pidFile"
                    // 保持任务存活,直到被外部终止
                    sh 'while true; do sleep 1; done'
                }
            )
        }
    }
    // 无论测试成功/失败,都终止日志收集进程
    post {
        always {
            sh 'if [ -f /tmp/logcat.pid ]; then kill $(cat /tmp/logcat.pid) || true; rm -f /tmp/logcat.pid; fi'
        }
    }
}

关键说明

  • 用&将adb logcat放到后台运行,echo $!把当前后台进程的PID写入临时文件
  • 日志收集任务通过无限循环sleep维持运行状态,避免提前退出
  • post阶段的always块确保不管测试结果如何,都会执行杀进程和清理临时文件的操作,防止资源残留

内容的提问来源于stack exchange,提问作者Антон Горский

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 02:03:19