百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

基于Jenkins+Docker的自动化代码发布流程

off999 2024-10-14 12:06 18 浏览 0 评论

本文将使用基于Jenkins+Docker来实现另一套的自动化CI/CD的代码发布流程,至于jenkins和docker是什么这里就不多说了,能找到这篇文章的应该都知道他们是干什么用的,下面是整体的流程和部署。

一、总体流程设计

流程解析:

1、开发人员将代码推送至git仓库。

2、通过Jenkins上事先设置好的触发器来拉取git仓库的代码。

3、代码在Jenkins上通过设置好的规则编译打包,然后build成docker镜像,推送至docker仓库。

4、Jenkins执行shell,连接到服务器上,拉取刚刚build的docker镜像并运行。

5、发布完成后,通过邮件通知测试人员。

资源相关:

  • git服务 : github
  • jenkins : jenkins.test.com
  • 项目服务器 : 120.78.xxx.xxx

jenkins服务和项目服务都是我们线上的测试服务器,所以地址就不公开了。


二、git相关

本文我用的是自己的github,地址是https://github.com/opsonly,上面有一个用于测试的个人django的项目。


三、Jenkins设置

1.邮件设置

这里注意要设置Extended E-mail Notification,否则后面无法发送邮件!

网站内容类型用的html,模板如下:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title> 
</head> 
 
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" 
 offset="0"> 
 <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"> 
 <tr> 
 本邮件由系统自动发出,无需回复!<br/> 
 项目 ${PROJECT_NAME }已构建完成!</br> 
 <td><font color="#CC0000">构建结果 - ${BUILD_STATUS}</font></td> 
 </tr> 
 <tr> 
 <td><br /> 
 <b><font color="#0B610B">构建信息</font></b> 
 <hr size="2" width="100%" align="center" /></td> 
 </tr> 
 <tr> 
 <td> 
 <ul> 
 <li>项目名称 : ${PROJECT_NAME}</li> 
 <li>构建编号 : 第${BUILD_NUMBER}次构建</li> 
 <li>触发原因: ${CAUSE}</li> 
 <li>构建状态: ${BUILD_STATUS}</li> 
 <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li> 
 <li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li> 
 <li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li> 
 <li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li> 
 </ul> 
<h4><font color="#0B610B">失败用例</font></h4>
<hr size="2" width="100%" />
$FAILED_TESTS<br/>
<h4><font color="#0B610B">最近提交(#$SVN_REVISION)</font></h4>
<hr size="2" width="100%" />
<ul>
${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}
</ul>
详细提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/>
 </td> 
 </tr> 
 </table> 
</body> 
</html>

2.创建一个任务(自由风格的软件项目)django-web,选择参数化构建

3.源码配置

·

4.触发器配置

根据自己情况而设置

5.构建配置

选择执行shell

注意:这里是整个流程的关键步骤,本文中是拉取github上的代码后,将其cp至另一个专用于build的目录,另外也将写好的Dockerfile文件也复制至该目录,然后完成docker镜像的build和push操作。

  • 项目服务器上的发布脚本如下
  • Dockerfile文件如下:
```
FROM python:3.7
ADD ./django-web ./app
WORKDIR ./app
RUN pip3 install -r requirements.txt
CMD ["python","manage.py","runserver","0.0.0.0:8000"]
```

6. 构建后操作

注意:这里要选择Editable Email Notification,前面的邮件配置为Extended E-mail Notification,一定要对应起来,不然无法成功发送邮件(因为Jenkins还有自带的一个邮件通知,不过本文中没有使用)。

整个的配置流程大致就是这样子,可以根据实际情况再作调整,比如构建脚本和Dockerfile文件都还有很大的调整空间。


四、效果图

1、传入tag参数并构建项目

2、构建成功收到邮件通知:

3、打开刚刚构建成功的项目服务器的url,正常访问没有问题.

4、到项目服务器上查看一下启动情况:


五、总结

1、数据库问题:

因为上面的django项目用的mysql,而显然本文中mysql并没有用容器实现,如果想要容器化mysql,需要注意mysql和django项目之间的网络互通问题。django的mysql地址应填入容器mysql的容器名。

2、权限问题:

如果读者根据上面步骤来试验,可能会遇到mysql的权限问题,因为我的本地的mysql服务已加入了root@’%’账号,如果你是初始化的mysql,会出现连接失败的问题。解决方法很简单,就是根据情况添加特定的mysql账号。

---

喜欢我写的东西的朋友可以关注一下我的公众号,上面有我的学习资源以及一些其他福利。:Devops部落

相关推荐

面试官:来,讲一下枚举类型在开发时中实际应用场景!

一.基本介绍枚举是JDK1.5新增的数据类型,使用枚举我们可以很好的描述一些特定的业务场景,比如一年中的春、夏、秋、冬,还有每周的周一到周天,还有各种颜色,以及可以用它来描述一些状态信息,比如错...

一日一技:11个基本Python技巧和窍门

1.两个数字的交换.x,y=10,20print(x,y)x,y=y,xprint(x,y)输出:102020102.Python字符串取反a="Ge...

Python Enum 技巧,让代码更简洁、更安全、更易维护

如果你是一名Python开发人员,你很可能使用过enum.Enum来创建可读性和可维护性代码。今天发现一个强大的技巧,可以让Enum的境界更进一层,这个技巧不仅能提高可读性,还能以最小的代价增...

Python元组编程指导教程(python元组的概念)

1.元组基础概念1.1什么是元组元组(Tuple)是Python中一种不可变的序列类型,用于存储多个有序的元素。元组与列表(list)类似,但元组一旦创建就不能修改(不可变),这使得元组在某些场景...

你可能不知道的实用 Python 功能(python有哪些用)

1.超越文件处理的内容管理器大多数开发人员都熟悉使用with语句进行文件操作:withopen('file.txt','r')asfile:co...

Python 2至3.13新特性总结(python 3.10新特性)

以下是Python2到Python3.13的主要新特性总结,按版本分类整理:Python2到Python3的重大变化Python3是一个不向后兼容的版本,主要改进包括:pri...

Python中for循环访问索引值的方法

技术背景在Python编程中,我们经常需要在循环中访问元素的索引值。例如,在处理列表、元组等可迭代对象时,除了要获取元素本身,还需要知道元素的位置。Python提供了多种方式来实现这一需求,下面将详细...

Python enumerate核心应用解析:索引遍历的高效实践方案

喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。根据GitHub代码分析统计,使用enumerate替代range(len())写法可减少38%的索引错误概率。本文通过12个生产...

Python入门到脱坑经典案例—列表去重

列表去重是Python编程中常见的操作,下面我将介绍多种实现列表去重的方法,从基础到进阶,帮助初学者全面掌握这一技能。方法一:使用集合(set)去重(最简单)pythondefremove_dupl...

Python枚举类工程实践:常量管理的标准化解决方案

本文通过7个生产案例,系统解析枚举类在工程实践中的应用,覆盖状态管理、配置选项、错误代码等场景,适用于Web服务开发、自动化测试及系统集成领域。一、基础概念与语法演进1.1传统常量与枚举类对比#传...

让Python枚举更强大!教你玩转Enum扩展

为什么你需要关注Enum?在日常开发中,你是否经常遇到这样的代码?ifstatus==1:print("开始处理")elifstatus==2:pri...

Python枚举(Enum)技巧,你值得了解

枚举(Enum)提供了更清晰、结构化的方式来定义常量。通过为枚举添加行为、自动分配值和存储额外数据,可以提升代码的可读性、可维护性,并与数据库结合使用时,使用字符串代替数字能简化调试和查询。Pytho...

78行Python代码帮你复现微信撤回消息!

来源:悟空智能科技本文约700字,建议阅读5分钟。本文基于python的微信开源库itchat,教你如何收集私聊撤回的信息。[导读]Python曾经对我说:"时日不多,赶紧用Python"。于是看...

登录人人都是产品经理即可获得以下权益

文章介绍如何利用Cursor自动开发Playwright网页自动化脚本,实现从选题、写文、生图的全流程自动化,并将其打包成API供工作流调用,提高工作效率。虽然我前面文章介绍了很多AI工作流,但它们...

Python常用小知识-第二弹(python常用方法总结)

一、Python中使用JsonPath提取字典中的值JsonPath是解析Json字符串用的,如果有一个多层嵌套的复杂字典,想要根据key和下标来批量提取value,这是比较困难的,使用jsonpat...

取消回复欢迎 发表评论: