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

如何在Jenkins指定阶段间复用Docker容器?

解决Jenkins流水线复用Docker容器的问题

我明白你的痛点——每次启动新容器都会丢失之前安装的node_modules,导致后续构建测试失败,同时顶层又必须用agent none来满足部署阶段的特殊需求。别担心,咱们可以通过调整流水线的结构来实现容器复用,具体方案如下:

核心思路

把需要共享同一个Docker容器的阶段(安装依赖、构建、测试)打包到一个父Stage中,给这个父Stage配置Docker Agent。这样所有子Stage都会在同一个容器里执行,node_modules自然就能保留下来了。部署阶段则单独配置它需要的特定节点,完全不影响前面的流程。

修改后的流水线代码

pipeline {
    agent none 
    stages {
        // 父Stage:所有需要复用容器的步骤都在这里面
        stage('Build & Test Environment') {
            agent { 
                docker { 
                    image 'node:10-alpine'
                    // 可选:如果需要挂载节点的工作空间到容器,确保文件持久化到节点
                    // args '-v $WORKSPACE:/workspace'
                } 
            }
            stages {
                stage('Install deps') {
                    steps {
                        sh 'npm install'
                    }
                }
                stage('Build, test, lint, etc') {
                    parallel {
                        stage('Build') {
                            steps {
                                sh 'npm run build'
                            }
                        }
                        stage('Test') {
                            steps {
                                sh 'npm run test'
                            }
                        }
                    }
                }
            }
        }
        // 部署阶段:使用指定节点,不受前面容器的影响
        stage('Deploy') {
            agent {
                node {
                    label 'your-deployment-node-label' // 替换成你的部署节点标签
                }
            }
            steps {
                sh 'your-deployment-commands'
            }
        }
    }
}

关键说明

  • 父Stage的Docker Agent:一旦这个父Stage启动,Jenkins会创建一个node:10-alpine容器,所有嵌套在里面的子Stage(安装依赖、构建、测试)都会在这个容器内执行,容器的文件系统是共享的,所以npm install生成的node_modules不会丢失。
  • 顶层agent none:依然保留,这样部署阶段可以自由指定需要的节点,不会被前面的Docker容器影响。
  • 可选的工作空间挂载:如果希望node_modules不仅保存在容器里,还能同步到Jenkins节点的工作空间(比如后续其他流程需要用到),可以添加args '-v $WORKSPACE:/workspace',这样容器内的/workspace目录和节点的工作空间是绑定的,文件会双向同步。

这样调整后,你就能完美实现指定阶段复用Docker容器的需求,同时满足部署阶段的特殊节点要求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:07:41