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

前段时间写了一篇初创团队持续集成的落地与实现,主要用python接收gitlab的push请求,而后调用不一样的shell脚原本实现。本文将使用基于Jenkins+Docker来实现另外一套的自动化CI/CD的代码发布流程,至于jenkins和docker是什么这里就很少说了,能找到这篇文章的应该都知道他们是干什么用的,下面是总体的流程和部署。html

1、整体流程设计

流程解析:python

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

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

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

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

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

资源相关:docker

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

jenkins服务和项目服务都是咱们线上的测试服务器,因此地址就不公开了。shell


2、git相关

本文我用的是本身的githubhttps://github.com/opsonly,上面有一个用于测试的我的django的项目。数据库

3、Jenkins设置

一、邮件设置

这里注意要设置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>
复制代码

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

三、源码配置

· 四、触发器配置

根据本身状况而设置

五、构建配置

选择执行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"]
复制代码

六、构建后操做

在列表中选择“Editable Email Notification”。

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

整个的配置流程大体就是这样子,能够根据实际状况再做调整,好比构建脚本和Dockerfile文件都还有很大的调整空间。

4、效果图

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

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

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

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


5、总结

一、数据库问题: 由于上面的django项目用的mysql,而显然本文中mysql并无用容器实现,若是想要容器化mysql,须要注意mysql和django项目之间的网络互通问题。django的mysql地址应填入容器mysql的容器名。

二、权限问题: 若是读者根据上面步骤来试验,可能会遇到mysql的权限问题,由于个人本地的mysql服务已加入了root@’%’帐号,若是你是初始化的mysql,会出现链接失败的问题。解决方法很简单,就是根据状况添加特定的mysql帐号。


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

相关文章
相关标签/搜索