当前位置: 首页 > news >正文

如何使用 Jenkins 流水线自动构建并推送 Docker 镜像到私有仓库

使用 Jenkins 流水线自动构建并推送 Docker 镜像到私有仓库,核心在于配置好 Jenkins 与 Docker 的权限交互,并在 Pipeline 脚本中正确调用 Docker 命令完成登录、构建和推送。

先说结论:通过 Jenkins Pipeline 结合 Docker 插件,可以实现代码提交后自动构建镜像并推送到 Harbor 或 ACR 等私有仓库。

  • 适合:需要持续集成且使用私有镜像仓库(如 Harbor、ACR)的团队。
  • 先看:Jenkins 服务器是否已安装 Docker 且用户有权限执行 docker 命令。
  • 建议:使用 Jenkins 凭证管理存储仓库密码,避免明文写在脚本里;生产环境建议配置 HTTPS 而非 HTTP。
  • 风险:将 jenkins 用户加入 docker 组等同于赋予 root 权限,存在容器逃逸风险,仅限受信任的内网环境使用。

前置准备

在开始配置前,请确保满足以下基础环境要求:

  • Jenkins 服务器:已安装 Docker 引擎,且版本 compatible 。
  • 私有仓库:Harbor 或类似仓库已部署并可访问,已知晓仓库地址、用户名和密码。
  • 代码仓库:项目根目录下预留了编写 Jenkinsfile 的位置。

权限与安全配置

Jenkins 服务通常使用 jenkins 普通用户运行,调用 docker 命令时需要权限。以下是配置步骤及安全警告:

  1. 用户组配置:在 Jenkins 所在的服务器上执行以下命令,将 jenkins 用户加入 docker 组:
    sudo usermod -aG docker jenkins
  2. 生效验证:配置完成后必须重启 Jenkins 服务才能生效:
    sudo systemctl restart jenkins
  3. 安全警告:此操作相当于赋予 jenkins 用户 root 权限。若 Jenkins 允许用户执行任意脚本,可能存在容器逃逸风险。在高安全要求环境,建议使用 Docker Socket Proxy 或专用构建节点隔离。

凭证与仓库配置

为避免密码明文泄露,需通过 Jenkins 凭证管理存储仓库信息,并配置 Docker 守护进程信任仓库地址。

1. 创建 Jenkins 凭证

  1. 登录 Jenkins 管理界面,点击左侧菜单"管理 Jenkins"
  2. 选择"凭证" -> "系统" -> "全局凭证"
  3. 点击左侧"添加凭证"
  4. 种类选择"Username with password"
  5. 输入私有仓库的用户名和密码,ID 填写便于识别的字符串(如 docker-registry-credentials),描述可填"Harbor 仓库凭证"。
  6. 点击"确定"保存,记录该凭证 ID。

2. 配置 Docker 信任仓库

若私有仓库使用 HTTP 协议或自签名 HTTPS 证书,需配置 Docker 守护进程信任该地址,否则推送会失败。

  1. 编辑 Docker 配置文件 /etc/docker/daemon.json(若不存在则创建)。
  2. 添加 insecure-registries 配置项:
    {"insecure-registries": ["http://your-harbor-ip","your-harbor-domain.com"]
    }
  3. 重启 Docker 服务使配置生效:
    sudo systemctl restart docker

编写 Jenkinsfile

在项目代码根目录下创建名为 Jenkinsfile 的文件。以下是构建并推送镜像的核心脚本片段,可根据实际仓库地址修改:

pipeline {agent anystages {stage('Build and Push') {steps {script {// 使用凭证 ID 登录仓库,自动处理 docker login/logoutdocker.withRegistry('http://your-harbor-ip', 'docker-registry-credentials') {// 构建镜像,标签使用构建号确保唯一性def customImage = docker.build("my-app:${env.BUILD_NUMBER}")// 推送镜像customImage.push()// 可选:推送 latest 标签customImage.push("latest")}}}}}
}

注意:脚本中的 http://your-harbor-ip 需替换为实际仓库地址,docker-registry-credentials 需替换为之前创建的凭证 ID。

创建流水线任务

配置好脚本后,需在 Jenkins 中创建任务来执行:

  1. 点击 Jenkins 首页"新建任务"
  2. 输入任务名称,选择"Multibranch Pipeline"(推荐)或"Pipeline"。
  3. 在"Branch Sources"中配置代码仓库地址(如 Git URL)。
  4. 若选择 Pipeline 类型,在"Pipeline"配置项中选择"Pipeline script from SCM",指向包含 Jenkinsfile 的仓库。
  5. 保存并点击"立即构建"。

验证与常见故障排查

验证方法

  1. 查看控制台:构建完成后,查看 Jenkins 控制台输出,确认没有"permission denied"或"unauthorized"报错。
  2. 检查仓库:登录私有镜像仓库 Web 界面,检查是否存在新推送的镜像标签(如 my-app:123)。
  3. 拉取测试:在任意机器上尝试 docker pull your-harbor-ip/my-app:123,若能成功下载则说明链路打通。

常见故障排查

  • 权限拒绝 (permission denied):通常是 jenkins 用户未加入 docker 组,或加入后未重启 Jenkins 服务。
  • 证书验证失败:私有 Harbor 仓库若使用自签证书,未在 Jenkins 服务器配置 Docker daemon 信任该证书,推送会被拒绝。检查 daemon.json 配置。
  • 认证失败 (unauthorized):检查 Jenkins 凭证 ID 是否填写正确,用户名密码是否过期。
  • 网络连通性问题:确保 Jenkins 构建节点能访问镜像仓库地址。若是 Kubernetes 环境,还需配置 ImagePullSecrets 以便 Pod 拉取私有镜像。

原文链接:https://www.zjcp.cc/ask/11055.html

http://www.jsqmd.com/news/813705/

相关文章:

  • Scrapstyle:基于样式解析的现代Web数据抓取方案
  • MPC轨迹规划与控制算法【附代码】
  • Sunshine游戏串流服务器:快速搭建你的终极跨平台游戏串流系统
  • 城市规划和软件系统设计:复杂度管理的艺术
  • PUBG罗技鼠标宏:5分钟快速上手自动压枪终极指南
  • Ollama Operator:在Kubernetes上轻松部署与管理大语言模型
  • 深入查看Taotoken用量看板分析API调用消耗与优化建议
  • BrowserTools MCP:让AI助手安全操控浏览器的本地化工具详解
  • GPU硬件加速优化:体积渲染与3D高斯泼溅技术
  • 基于Go与K8s Client-go实现多租户应用一键部署API服务
  • 在澳洲,名义雇主合法吗?如何确保合规与效率?
  • 自签名证书
  • Perplexity引用导出结果不可复现?独家“引用指纹”校验技术首次公开,误差率降至0.02%以内!
  • 多模型选型场景下如何利用Taotoken模型广场进行决策
  • RanjuUI:轻量级现代UI组件库的设计理念与工程实践
  • 终极Figma到JSON转换解决方案:为企业级设计开发一体化构建技术桥梁
  • 摩尔线程 × 光轮智能|强强联手,共筑国产具身智能仿真底座
  • 用苏格拉底式提问规则提升LLM输出质量:原理、实践与集成指南
  • 情感化导航系统:基于上下文感知与自然语言生成的智能交互实践
  • 数学竞赛资源合集
  • 基于RAG架构的PDF智能问答系统:从原理到工程实践
  • MIKE IO完全指南:Python高效处理水文数据的5个实战技巧
  • Java微服务全解:快速上手SpringCloud+SpringCloudAlibaba!
  • 在Trae CN内使用LeetCode刷题
  • AI Coding Agent 如何工程化:从上下文污染到多 Agent 分工
  • 株洲彩钢板厂家
  • 如何高效备份微信聊天记录:Mac用户的终极解决方案
  • 同步整流技术如何优化电源动态响应:从CCM/DCM模式到环路设计实战
  • 夜间MVP构建与业务验证:打造持续交付的自动化守夜人系统
  • ARM CTI寄存器安全机制与调试接口设计详解