Jenkins在Docker环境下构建Docker镜像并推送至仓库

需积分: 0 5 下载量 148 浏览量 更新于2024-08-05 收藏 608KB PDF 举报
"jenkins-docker环境构建镜像上传仓库1" 本文主要介绍如何在 Jenkins 环境中,结合 Docker,实现自动化构建镜像并将其上传至私有仓库(如 Harbor)。首先,由于 Jenkins 本身运行在 Docker 容器中,无法直接执行 Docker 操作,因此需要借助 SSH 将构建的 Jar 包和 Dockerfile 文件传输到一台具有 Docker 环境的宿主机上,然后在该宿主机上执行构建和推送镜像的脚本。 1. **Jenkins 配置**: Jenkins 需要配置全局的 SSH 配置,以便能够通过账号密码登录目标服务器。这可以通过 Jenkins 的系统管理界面完成,选择“系统配置”->“Publish over SSH”。 2. **用户权限设置**: 在目标服务器上,非 root 用户需要能够执行 Docker 命令。为此,新创建的用户或者已有用户需要加入到 `docker` 用户组,这样该用户就有权限执行 Docker 相关的操作。例如,可以使用 `useradd` 或 `usermod` 命令来设置。 3. **创建 SSH 连接**: 在 Jenkins 的 Publish over SSH 部分配置中,添加新服务器的信息,包括 IP 地址、用户名、密码或密钥等,确保 Jenkins 可以成功连接到目标服务器。 4. **目标服务器准备**: 在目标服务器上,创建一个工作目录,例如 `/home/xiaogj/mall/mall-pms`,用于存放构建所需的 Jar 包和 Dockerfile。同时,编写一个构建脚本(如 `docker-build.sh`),该脚本包含了构建和推送镜像的逻辑。 5. **构建脚本详解**: - 脚本需要检查 Docker 是否已安装,并且当前服务器是否已经登录到私有仓库(如 Harbor),因为 `docker push` 命令需要这个前提。 - 脚本接收两个参数,分别是服务的 Jar 名称和镜像版本号。 - 使用这些参数,脚本可以构造出镜像的完整标识(如 `$registry_name/$service_name:$image_tag`)。 - 脚本执行 `docker build` 命令来构建镜像,这将基于 Dockerfile 和 Jar 包生成新的 Docker 镜像。 - 最后,如果构建成功,脚本会执行 `docker push` 将镜像推送到私有仓库。 6. **执行流程**: 在 Jenkins 的构建步骤中,触发 SSH 调用这个脚本,传入服务名和版本号作为参数,然后 Jenkins 将自动执行整个流程,包括传输文件、构建镜像和推送镜像。 通过这种方式,你可以实现一个自动化、可重复的 CI/CD 流程,使得每次代码更新后,Jenkins 都能自动构建最新的服务镜像并发布到私有仓库,极大地提高了软件的迭代效率和部署的可靠性。在 Spring Cloud 应用中,这种自动化流程尤其重要,因为它允许快速地测试和部署微服务应用的新版本。