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

发表于:2019-3-29 11:30

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:丁小水    来源:51CTO博客

  本文将使用基于Jenkins+Docker来实现另一套的自动化CI/CD的代码发布流程,至于jenkins和docker是什么这里就不多说了,能找到这篇文章的应该都知道他们是干什么用的,下面是整体的流程和部署。
  一、总体流程设计
 
  流程解析:
  1、开发人员将代码推送至git仓库。
  2、通过Jenkins上事先设置好的触发器来拉取git仓库的代码。
  3、代码在Jenkins上通过设置好的规则编译打包,然后build成docker镜像,推送至docker仓库。
  4、Jenkins执行shell,连接到服务器上,拉取刚刚build的docker镜像并运行。
  5、发布完成后,通过邮件通知测试人员。
  资源相关:
  
  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”。
  
  注意:这里要选择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账号。

     上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号