docker | jenkins 自动化CI/CD,后端躺着把运维的钱挣了!(下)

简介: 在本篇文章中,将讲解使用jenkins帮助我们监听git仓库的变化,一旦有新的push到master分支,jenkins服务则从gitee主动拉取项目代码,构建新镜像(**借助上一节编写好的Dockerfile文件**),然后**删除同名旧镜像和旧容器,部署新容器**。

前言

在上一篇文章中,我们使用docker编写Dockerfile文件,将我们自己的项目构建成镜像,然后发布到Docker Hub中,并且用自己的云服务器拉取Docker Hub上我们自己上传的项目镜像,并且由该镜像运行容器,使得我们成功将自己的项目用docker运行了起来,并且外网访问测试通过。

如果还没有使用过docker自己构建过镜像的同学还是建议先阅读第一篇文章:传送门

image-20220213145129520

在本篇文章中,将讲解使用jenkins帮助我们监听git仓库的变化,一旦有新的push到master分支,jenkins服务则从gitee主动拉取项目代码,构建新镜像(借助上一节编写好的Dockerfile文件),然后删除同名旧镜像和旧容器,部署新容器

而对于开发者来说,你向远程仓库的master分支push了新的代码之后,就可以马上访问url看到最新的项目运行结果,一切都将由jenkins帮你完成(只要事先配置好jenkins工作流程)

最初我学编程很喜欢看视频,而且是那种长而全的视频,总觉得能看到别人每一步的操作就很踏实,但是渐渐的,还是看文档多一些,我也在这里推荐大家尝试阅读文档,英文看起来慢就找中文的,相比于视频,看文档能快速找到你需要的点,而视频需要跟着别人的节奏,相对会慢一些。(但刚开始学编程我还是推荐看视频,后面辅以阅读书籍文档与博客文章)

jenkins相关

安装

这里先给出jerkins的中文文档:https://www.jenkins.io/zh/doc/tutorials/build-a-python-app-with-pyinstaller/,你可以选择将jenkins服务直接安装到服务器上,也可以选择将jenkins服务通过容器运行在服务器上,这里我选择后者,点击上面的链接,就能跟着使用docker运行jinkins服务。

核心是下面这个运行docker容器的shell,关于这些参数的作用我前一篇文章已经讲过,如果不太清楚可以回过去结合着一起看。

docker run \
  -d \
  --rm \
  -u root \
  -p 8080:8080 \
  -v jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v "$HOME":/home \
  jenkinsci/blueocean

登录

运行jenkins容器之后,访问服务器ip:8080就能跳转到jenkins登录页面,第一次会让你输入一个密钥,这个在服务器运行Jenkins容器的时候控制台上就会显示(如果没有加上-d参数)。

image-20220213145350573

或者输入下面的命令查看jenkins的密钥

cat /var/lib/jenkins/secrets/initialAdminPassword

填入密钥之后就会跳转至jerkins页面,首次登录它会提示你安装推荐的插件,点击即可。然后会引导你创建一个登录jerkins的用户,输入用户名,密码和邮箱等信息完成创建,之后访问服务器ip:8080就会提示你输入用户名和密码进行登录jenkins。

image-20220213152756099

新建任务

点击左侧新建任务,输入你的任务名称,如wood-app-backend,然后选择构建自由风格的项目

image-20220213145959187

然后会跳转至Jenkins项目配置区,选择源码管理项,Git选项,输入你Git仓库的地址,然后在Credentials处添加你Git仓库的用户名和密码,并且选择监听master分支(默认就是)

image-20220213150343603

我们需要的效果是一旦git仓库发生变化就要自动构建镜像,并且部署新的镜像容器,所以在构建触发器项下选择轮询SCM,使用corn表达式控制Jenkins监听git仓库的频率为每分钟一次

image-20220213150644507

下面是最核心的操作,jenkins要做的事我们已经知道了,那jerkins怎么知道呢?需要通过shell脚本指定,这里的shell就是Jenkins在监听到git仓库的master分支发生变化时要做的事情,包括删除已创建的容器(因为端口被旧容器占用,需要强制删除),构建新的镜像运行新的容器

image-20220213150923340

if docker ps -a|grep -i wood-app-backend;then
   docker rm -f wood-app-backend
fi
#删除已建的容器,防止容器名,端口冲突
sleep 1
docker build -t baize1998/wood-app-backend:latest .    #根据dockerfile生成镜像
sleep 1
docker run -d -p 5000:5000 --name wood-app-backend baize1998/wood-app-backend:latest    #运行镜像生成容器

删除旧镜像

上面的shell命令中有删除旧容器的命令,但是没有删除旧镜像的命令(每次构建同名新镜像,旧的镜像就会变成none,但是依旧占据空间,需要回收)

image-20220213151915338

但是直接在shell中编写删除镜像的命令在回收时可能会发生错误,所以额外创建一个定时任务去回收这些旧的镜像,这里指定清理镜像的任务的执行频率是每天的凌晨一点钟(可以自行控制)

image-20220213152207275

image-20220213152237924

shell脚本用于判断是否存在<none>状态的镜像,并对它们进行回收

echo ---------------Clear-Images...------------------
clearImagesList=$(docker images -f "dangling=true" -q)
if [ ! -n "$clearImagesList" ]; then
echo "no images need  clean up."
else
docker rmi $(docker images -f "dangling=true" -q)
echo "clear success."
fi

测试CI/CD

CI--持续集成(一旦push之后,新的镜像会构建),CD--持续部署(一旦push之后,新的容器会依据新的镜像运行,提供最新的服务),下面修改我们的项目接口,然后push到远程仓库的master分支

image-20220213153030544

一分钟后,访问服务器ip:5000看到jenkins已经完成项目镜像构建以及新项目容器的运行,提供了最新的服务,之后便可以进行敏捷的开发了!

image-20220213153243298

结束语

这篇文章讲述的使用Jenkins是比较取巧的,使用corn每分钟监听一次git仓库的变化达到这种细粒度的CI/CD效果,当然这只是jenkins功能的冰山一角,具体jenkins部署阶段还可以细分为构建、测试、部署等,也可以针对不同的推送命令配置不同的应答行为,每个阶段也可以指定执行各种脚本,这个就要学习Jenkins的pipeline机制,通过流水线的方式指定更详细和规范的CI/CD流程,不过到目前为止,学校里项目的开发维护功能也勉强够用了~

相关文章
|
20天前
|
存储 测试技术 持续交付
Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用
本文探讨了Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用。首先介绍了CI/CD的基本概念,接着阐述了Docker在环境一致性、快速部署、资源隔离和轻量化方面的优势。文章还详细讨论了构建、测试和部署阶段的具体集成方法,以及集成后带来的效率提升、可靠性增强、加速交付和易于管理等好处。最后,通过案例分析展示了集成的实际效果,强调了Docker与CI/CD结合的重要性和未来前景。
33 2
|
21天前
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####
|
21天前
|
机器学习/深度学习 数据采集 人工智能
智能化运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的崛起背景,深入分析了其核心概念、关键技术、应用场景及面临的挑战,并对比了传统IT运维模式,揭示了AIOps如何引领运维管理向更高效、智能的方向迈进。通过实际案例分析,展示了AIOps在不同行业中的应用成效,为读者提供了对未来智能运维趋势的洞察与思考。 ####
52 1
|
1月前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
1月前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
60 4
|
2月前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
2月前
|
jenkins 测试技术 持续交付
Docker最佳实践:构建高效的CI/CD流水线
【10月更文挑战第17天】在现代软件开发实践中,持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)已成为提高开发效率和软件质量的重要手段。Docker作为一种容器技术,为构建一致且隔离的开发环境提供了强有力的支撑。本文将探讨如何利用Docker来优化CI/CD流程,包括构建环境的标准化、镜像管理以及与CI/CD工具(如Jenkins、GitLab CI)的集成。
75 5
|
2月前
|
缓存 运维 Docker
容器化运维:Docker Desktop 占用磁盘空间过大?教你轻松解决!
Windows Docker Desktop 使用过程中,因镜像、容器数据及构建缓存的累积,可能导致磁盘空间占用过高。通过删除无用镜像与容器、压缩磁盘以及清理构建缓存等方法,可有效释放空间。具体步骤包括关闭WSL、使用`diskpart`工具压缩虚拟磁盘、执行`docker buildx prune -f`清理缓存等。这些操作能显著减少磁盘占用,提升系统性能。
538 4
|
2月前
|
存储 运维 监控
高效运维:从基础架构到自动化管理的全面指南
【10月更文挑战第11天】 本文将深入探讨如何通过优化基础架构和引入自动化管理来提升企业IT运维效率。我们将从服务器的选择与配置、存储解决方案的评估,到网络的设计与监控,逐一解析每个环节的关键技术点。同时,重点讨论自动化工具在现代运维中的应用,包括配置管理、持续集成与部署(CI/CD)、自动化测试及故障排除等方面。通过实际案例分析,展示这些技术如何协同工作,实现高效的运维管理。无论是IT初学者还是经验丰富的专业人员,都能从中获得有价值的见解和实操经验。
101 1
|
2月前
|
运维 监控 jenkins
运维自动化实践:利用Jenkins实现高效CI/CD流程
【10月更文挑战第18天】运维自动化实践:利用Jenkins实现高效CI/CD流程
下一篇
DataWorks