企业DevOps之路:Jenkins 集成 Harbor 自动发布镜像

简介: 实际中,一般会结合 Jenkins 的流水线,进行自动构建和发布。

1. 概述


在实际生产中,如果进行手动发布镜像到 Harbor,那么实在太 low 了。实际中,一般会结合 Jenkins 的流水线,进行自动构建和发布。


微信图片_20220504113603.png


大致流程说明:


  • 开发人员每天把代码提交到 Gitlab 代码仓库
  • Jenkins 从 Gitlab 代码仓库中拉取项目源码,进行编译并打成 jar 包;然后构建成 Docker 镜像,将镜像推送到 Harbor 私有镜像仓库
  • Jenkins 发送 SSH 远程命令,让生成部署服务器从 Harbor 私有镜像仓库中拉取镜像到本地;然后创建容器
  • 最后用户可以访问到容器


2. Jenkins 脚本式发布镜像


  • 新建构建任务


新建Item -> 构建一个Maven项目


微信图片_20220504113607.png


  • 配置代码仓库


微信图片_20220504113611.png


  • 上传成果物到服务器


微信图片_20220504113615.png


因 Jenkins 部署在 Windows 操作系统,所以采用批处理脚本。请根据 Jenkins 部署的操作系统的情况使用 batch command 或者 shell。


C:\jenkins\pscp.exe -r -l root -pw root %WORKSPACE%/zwt-pestilence/zwt-pestilence-web/target/zwt-pestilence-web-RELEASE.jar 192.168.10.8:/home/huangjinjin/software/springdocker
  • 发布镜像


微信图片_20220504113619.png


cd /home/huangjinjin/software/springdocker
docker build -t zwt:v1.0 .
docker login -u admin -p Harbor123 192.168.10.8
docker tag zwt:v1.0 192.168.10.8/omg/zwt:v1.0
docker push 192.168.10.8/omg/zwt:v1.0


  • 创建 Dockerfile


构建后的 jar 上传到如下路径


/home/huangjinjin/software/springdocker

所以在该路径下创建 Dockerfile 文件,内容如下:


FROM openjdk:8-jre-slim
MAINTAINER huangjinjin "huangjinjin@qq.com"
ENV PARAMS=""
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR /servers
ADD zwt-pestilence-web-RELEASE.jar app/zwt-pestilence-web-RELEASE.jar
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /servers/app/zwt-pestilence-web-RELEASE.jar $PARAMS"]
Dockerfile  文件的内容根据实际项目情况进行修改。


  • 构建并验证


执行 Jenkins 任务


微信图片_20220504113624.png


登录 Harbor 查看是否推送镜像到 Harbor 镜像仓库成功


微信图片_20220504113628.png


3.  Jenkins 插件式发布镜像


  • 安装 CloudBees Docker Build and Publish 插件


Manage Jenkins -> Manage Plugins


微信图片_20220504113632.png


  • 添加凭证


Manage Jenkins -> Manage Credentials


微信图片_20220504113636.png


创建一个 Harbor 的账密凭证。


  • 构建增加 Docker Build and Publish


微信图片_20220504113640.png


在点击高级选项中可以设置


  1. Build Context:构建上下文路径
  2. Dockerfile Path:Dockerfile 文件的路径


根据实际情况配置,配置如下:


微信图片_20220504113645.png


经过以上设置,即可进行 Jenkins 任务执行,构建镜像。


4. 附:开启Docker 的 Remote API 访问 2375端口


  • Docker 常见端口


2375:未加密的docker socket,远程root无密码访问主机2376:tls加密套接字,很可能这是您的CI服务器4243端口作为https 443端口的修改2377:群集模式套接字,适用于群集管理器,不适用于docker客户端5000:docker注册服务4789和7946:覆盖网络


  • 开启配置


方法一(该方法没有验证通过)


vi /etc/default/docker


加入下面一行


DOCKER_OPTS="-H tcp://0.0.0.0:2375"


修改 /usr/lib/systemd/system/docker.service 配置文件


EnvironmentFile=-/etc/default/docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS

重启docker即可


systemctl daemon-reload
systemctl restart docker


这种简单配置让 Docker Daemon 把服务暴露在 tcp 的 2375 端口上,这样就可以在网络上操作 Docker 了。Docker 本身没有身份认证的功能,只要网络上能访问到服务端口,就可以操作 Docker。


方法二


/usr/lib/systemd/system/docker.service,配置远程访问。


产生/usr/lib/systemd/system/docker.service配置文件


systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.


在 [Service] 这个部分的 ExecStart,加上-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock


vi /usr/lib/systemd/system/docker.service
[Service]
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock


重启


systemctl daemon-reload
systemctl restart docker


方法三


修改/etc/docker/daemon.json的配置


vi /etc/docker/daemon.json
{
 "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}
"tcp://0.0.0.0:2375":tcp socket,表示允许任何远程客户端通过 2375 端口连接 Docker Daemon。
"unix:///var/run/docker.sock":unix socket,本地客户端将通过这个来连接 Docker Daemon。


修改配置后,然后让 Docker 重新读取配置文件,并重启 Docker 服务


systemctl daemon-reload
systemctl restart docker


在启动时,可能报如下错误


Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.


是因为 Docker 的 socket 配置 hosts 出现了冲突。解决办法是编辑/usr/lib/systemd/system/docker.service配置文件,


ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 修改为 ExecStart=/usr/bin/dockerd;再次启动即可。


查看 docker 进程


[root@slaver2 ~]# ps -ef| grep docker
root      44221      1  1 18:16 ?        00:00:06 /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
Docker 守护进程打开一个 HTTP Socket,才能实现远程通信。


  • 验证


-H 为连接目标主机 Docker 服务


查看 Docker 版本


docker -H tcp://192.168.10.8:2375 version


查看镜像包


docker -H tcp://192.168.10.8:2375 images
相关文章
|
3月前
|
弹性计算 运维 安全
云迁移最佳实践:HyperMotion助中小企业高效上云,阿里云工具集深度集成三方迁移工具
中小企业上云需求强烈,但面临缺乏了解、无合适方案及成本过高等挑战。为解决这些问题,推出“云迁移HyperMotion阿里云集成版”,提供三步上云、自助迁移、自动适配等能力,助力企业高效、低成本完成迁移。
|
5月前
|
缓存 监控 安全
通义大模型与现有企业系统集成实战《CRM案例分析与安全最佳实践》
本文档详细介绍了基于通义大模型的CRM系统集成架构设计与优化实践。涵盖混合部署架构演进(新增向量缓存、双通道同步)、性能基准测试对比、客户意图分析模块、商机预测系统等核心功能实现。同时,深入探讨了安全防护体系、三级缓存架构、请求批处理优化及故障处理机制,并展示了实时客户画像生成和动态提示词工程。通过实施,显著提升客服响应速度(425%)、商机识别准确率(37%)及客户满意度(15%)。最后,规划了技术演进路线图,从单点集成迈向自主优化阶段,推动业务效率与价值持续增长。
180 7
|
8月前
|
人工智能
活动速递 | 解锁企业AI-轻松掌握无缝集成DeepSeek、Qwen-Max
活动速递 | 解锁企业AI-轻松掌握无缝集成DeepSeek、Qwen-Max
活动速递 | 解锁企业AI-轻松掌握无缝集成DeepSeek、Qwen-Max
|
2月前
|
监控 Cloud Native Java
Spring Integration 企业集成模式技术详解与实践指南
本文档全面介绍 Spring Integration 框架的核心概念、架构设计和实际应用。作为 Spring 生态系统中的企业集成解决方案,Spring Integration 基于著名的 Enterprise Integration Patterns(EIP)提供了轻量级的消息驱动架构。本文将深入探讨其消息通道、端点、过滤器、转换器等核心组件,以及如何构建可靠的企业集成解决方案。
175 0
|
4月前
|
人工智能 监控 安全
MCP与企业数据集成:ERP、CRM、数据仓库的统一接入
作为一名深耕企业级系统集成领域多年的技术博主"摘星",我深刻认识到现代企业面临的数据孤岛问题日益严重。随着企业数字化转型的深入推进,各类业务系统如ERP(Enterprise Resource Planning,企业资源规划)、CRM(Customer Relationship Management,客户关系管理)、数据仓库等系统的数据互联互通需求愈发迫切。传统的点对点集成方式不仅开发成本高昂,维护复杂度也呈指数级增长,更重要的是难以满足实时性和一致性要求。Anthropic推出的MCP(Model Context Protocol,模型上下文协议)为这一痛点提供了革命性的解决方案。MCP通过
236 0
|
6月前
|
jenkins 持续交付 开发工具
利用Dockerfile自主构建Jenkins镜像
希望这个过程能善用你的野马般想象,把自己置身于和计算机的卓尔不凡的对话中,让编程的过程充满趣味。
200 36
|
10月前
|
容灾 安全 关系型数据库
数据传输服务DTS:敏捷弹性构建企业数据容灾和集成
数据传输服务DTS提供全球覆盖、企业级跨境数据传输和智能化服务,助力企业敏捷构建数据容灾与集成。DTS支持35种数据源,实现全球化数据托管与安全传输,帮助企业快速出海并高效运营。瑶池数据库的全球容灾、多活及集成方案,结合DTS的Serverless和Insight功能,大幅提升数据传输效率与智能管理水平。特邀客户稿定分享了使用DTS加速全球业务布局的成功经验,展示DTS在数据分发、容灾多活等方面的优势。
228 0
|
6月前
|
运维 Devops 测试技术
云效DevOps:加速企业数字化转型的利器
云效DevOps是阿里巴巴推出的企业级一站式平台,覆盖需求管理到应用运维全生命周期。其核心价值包括全流程自动化、高效协同、质量保障与可视化度量。功能涵盖代码管理、持续集成、持续交付及应用运维,支持微服务架构、大规模团队协作等最佳实践。成功案例显示,云效显著提升企业软件交付效率与质量,助力数字化转型,未来将融合AI技术实现更智能的交付体验。
352 11
|
12月前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
321 2
|
9月前
|
监控 jenkins Shell
jenkins结合gitlab实现CI(持续集成)
通过本文的介绍,我们详细了解了如何结合Jenkins和GitLab实现持续集成。从环境准备、插件配置到Pipeline任务创建和CI流程监控,每一步都提供了详细的操作步骤和示例代码。希望本文能帮助开发者快速搭建起高效的CI系统,提高项目开发效率和代码质量。
721 9

推荐镜像

更多
下一篇
开通oss服务