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

Jenkins流水线测试故障时替换Puppeteer容器的实现问题

解决方案

要实现测试失败时重启Puppeteer容器的逻辑,核心是让Jenkins Agent容器能执行Docker命令并访问docker:dind的Docker守护进程,具体步骤如下:

1. 修改Puppeteer测试镜像的Dockerfile

在你的MyDockerFileFolder/Dockerfile中添加Docker客户端安装和权限配置,确保容器内可执行Docker命令:

# 以常用的Node.js基础镜像为例,可根据你的实际基础镜像调整
FROM node:18-bullseye

# 安装Docker客户端
RUN apt-get update && apt-get install -y --no-install-recommends docker.io \
    && rm -rf /var/lib/apt/lists/*

# 将容器用户加入docker组,避免Docker命令权限报错
RUN usermod -aG docker node

2. 调整Jenkins Pipeline的Agent配置

让Agent容器能连接到docker:dind的Docker守护进程,二选一即可:

方式一:挂载Docker Socket(适用于docker:dind与Jenkins共享宿主机Socket的场景)

agent {
    dockerfile {
        filename 'Dockerfile'
        dir 'MyDockerFileFolder'
        additionalBuildArgs  '--build-arg UID=$(id -u) --build-arg GID=$(id -g) -t puppeteer-testing-image'
        args '-v /var/run/docker.sock:/var/run/docker.sock'
    }
}

方式二:TCP连接docker:dind(适用于docker:dind作为独立容器部署的场景,需确保两者在同一Docker网络)

agent {
    dockerfile {
        filename 'Dockerfile'
        dir 'MyDockerFileFolder'
        additionalBuildArgs  '--build-arg UID=$(id -u) --build-arg GID=$(id -g) -t puppeteer-testing-image'
        environment {
            DOCKER_HOST = 'tcp://docker:2375' // "docker"是你的docker:dind容器名称
        }
    }
}

3. 在Failure块中添加容器启停逻辑

假设你的测试容器固定名称为puppeteer-test-container,添加命令确保旧容器被清理后启动新容器:

post {
    failure {
        // 停止并删除旧容器,|| true 避免容器不存在时命令报错中断流水线
        sh 'docker stop puppeteer-test-container || true'
        sh 'docker rm puppeteer-test-container || true'
        // 启动新的测试容器,-d 让容器后台运行
        sh 'docker run -d --name puppeteer-test-container puppeteer-testing-image'
    }
}

额外说明

  • 如果你的测试是直接在Jenkins Agent容器内运行(而非单独启动Puppeteer容器),重启Agent容器无意义——Jenkins会自动管理Agent的生命周期,此时应优先优化测试逻辑而非重启容器。
  • 若使用TCP连接docker:dind,启动docker:dind时需添加参数--privileged -e DOCKER_TLS_CERTDIR=""(关闭TLS方便测试,生产环境建议配置TLS加密)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:47:39