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

使用Docker Agent时如何让Jenkins阶段结束后容器持续运行?

解决Jenkins流水线阶段结束后Docker容器被自动删除的问题

你当前的写法是在单个stage里定义docker agent,Jenkins的默认行为就是在该stage执行完成后自动停止并删除对应的容器。要让容器保留供后续阶段使用,有两种常用方案:

方案一:全局复用同一个Docker容器

把docker agent定义在整个pipeline的最外层,这样所有stage都会在同一个容器内执行,容器只会在整个流水线结束后才被清理。

示例代码:

pipeline {
    agent {
        docker {
            label "${RUNNING_NODE}"
            image "${IMAGE}"
            reuseNode true
        }
    }
    stages {
        stage("Set up first image") {
            steps {
                echo "This is treasure!"
            }
        }
        stage("Second stage using same container") {
            steps {
                echo "Running in the same container as first stage!"
                // 这里可以执行需要复用容器环境的操作
            }
        }
    }
}

方案二:手动管理容器生命周期

如果需要不同阶段灵活控制容器,也可以手动启动容器,记录容器ID,后续阶段通过docker exec执行命令,最后在流水线结束时手动清理容器。

示例代码:

pipeline {
    agent any
    environment {
        CONTAINER_ID = ""
    }
    stages {
        stage("Start Docker container") {
            steps {
                script {
                    // 启动容器并后台运行
                    CONTAINER_ID = sh(script: "docker run -d --name my-shared-container ${IMAGE}", returnStdout: true).trim()
                    echo "Started container with ID: ${CONTAINER_ID}"
                }
            }
        }
        stage("Set up first image") {
            steps {
                script {
                    // 在容器内执行命令
                    sh "docker exec ${CONTAINER_ID} echo 'This is treasure!'"
                    // 其他需要在容器内执行的操作都用docker exec
                }
            }
        }
        stage("Second stage using same container") {
            steps {
                script {
                    sh "docker exec ${CONTAINER_ID} echo 'Using the same container again!'"
                }
            }
        }
    }
    post {
        always {
            // 不管流水线成功失败,最后都清理容器
            sh "docker stop ${CONTAINER_ID} && docker rm ${CONTAINER_ID}"
        }
    }
}

注意事项

  • 方案一的优势是简单,Jenkins自动管理容器,适合所有阶段都依赖同一环境的场景。
  • 方案二更灵活,适合需要在不同阶段对容器做特殊配置的场景,但需要自己处理容器的启动、连接和清理,避免残留僵尸容器。

内容的提问来源于stack exchange,提问作者himneh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:15:50