基于Jenkins+Docker的自动化代码发布流程
本文将使用基于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,模板如下:
${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志 本邮件由系统自动发出,无需回复!
项目 ${PROJECT_NAME }已构建完成!
构建结果 - ${BUILD_STATUS} |
构建信息 |
失败用例$FAILED_TESTS 最近提交($SVN_REVISION)
|
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部落
-
上一篇
一期一个知识点
5分钟解答你最关心的软件测试问题
简单明了,清晰易学的干货
你关心的一切软件测试问题,都在这里啦!
目的
持续集成作为软件开发的一种实践,其快速且频繁集成的特性使得产品与项目可以保持高速迭代的同时还可以保持高质量。
而Jenkins作为一款优秀的开源持续集成工具,提供给了开发、测试、运维各个角色强大的自动化构建支撑。
测试作为持续集成中一个重要阶段,使用Jenkins来执行自动化测试的必要性已经不言而喻,利用Jenkins进行自动化的构建(编译、打包、部署、自动化测试)可以尽早的发现软件中的问题,对应测试左移来说,测试在项目阶段中的介入的越早,发现及修复问题的代价就越小。
Jenkins使用手册(1)——软件安装
-
下一篇
Jenkins选择分支发布Gitlab项目
1、需要的插件