持续集成-Docker 与 DaoCloud 的实践(一)

一. 前言

二. DaoCloud 持续集成 的 实现

三. 总结


一. 前言

什么是持续集成:http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html。

持续集成目前作者接触到的有两套方案。

  • 一套是工作中正在使用 Docker + Jenkins 。Jenkins 也是持续集成的主流(Ps:看到一个报道在美帝 抽样100个公司 持续集成的方案都是使用了 Jenkins。100% 使用率。)
  • 另外一套 则是 使用 DaoCloud。 以下介绍的就是这个。
比较:
  1. 从复杂程度上看,第一套方案配置会比第二套配置复杂,因为需要额外配置 Jenkins ;
  2. 从可控性上看,第一套方案要比第二套好很多,因为作者在使用 DaoCloud 实践中,遇到了一些困难,需要咨询 DaoCloud 的客服,自己无法解决,这些等待的时间 对于 真正的项目中来说可能是无法接受的,如果采用 第一套,就像在工作中的时候,出了问题,自己可以马上加班加点排查解决。
  3. 从使用方便性上看:二者都可以实现 github 上项目的更新,自动部署最新的应用。
        总的来说,项目的开始 DaoCloud 整体会优于 Jenkins,因为方便,能够减少项目的复杂性。 但是在项目的后期,如果需要强调一个自主和可控或者优化,那么个人会偏向于Jenkins。


二. DaoCloud 持续集成 的 实现
        需要先掌握一定的 Docker 知识:http://dockerpool.com/static/books/docker_practice/index.html 。

        测试一套持续集成的Demo需要到的相关东西:1. github 的一个项目。 2. DaoCloud。 3. 自己的测试主机。 希望达到的目的:github 上项目发生更新,DaoCloud 会构建新的 image,并且部署好最新的应用到主机上。


2.1 github 项目

        项目位于:https://github.com/pzxwhc/BlogManage,这是一个博客的后台管理系统,目前 为止 到写这篇文章为止 只有一个 登录功能,但是可以用来测试 这个持续集成了。

        Ps:这个项目后台使用的 是 spring boot,ORM 层使用的是 Hibernate 的 JPA。DB用的是 Mysql。暂时没有前端,主要是后期想做一个微服务的架构,Kong(nginx)作为一个 api gateway;nodejs +一个Js框架作为前端(还未选择哪个框架)。但是 nodejs 和 js 还不太会,所以说就暂时不弄前端了,也不太想玩 JSP 了。扯远了.......


2.2 DaoCloud 配置

DaoCloud 官网:https://www.daocloud.io/。注册,登录,界面如下图1:

持续集成-Docker 与 DaoCloud 的实践(一)_第1张图片

图1

        有 4 个东西是作者在测试的时候比较关心的 ,第一行的 1(代码构建),2(镜像仓库),4 (我的集群),5(应用管理)。代码构建 用来 DaoCloud 关联你的 项目 ,镜像仓库 用来管理镜像,我的集群即管理自己的主机,应用管理即可以管理应用,并且开启自动发布(自动部署最新应用)的功能。


代码构建:

        填写名称,设置代码源,这里有一个 构建位置,意思就是 DaoCloud 会根据你的 Dockerfile 重新构建一个镜像,相对于你的项目,Dockerfile 在哪里这里就填写哪里。

        第一个坑:在 我的项目 中,可以看到,Dockerfile 是和 blogManage 项目平级的。当时实践的时候,作者是把 Dockerfile 放入到 blogManage 项目中,但是出现了问题,因为在Dockerfile 中,我们需要 ADD project /dir/in/container/ ,然后再 mvn spring-boot:run 启动该项目,此时,如果 Dockerfile 在 项目里面,这里则无法 在Dockerfile 中 ADD 整个项目到 容器中了(Dockerfile 中的 ADD 只能 ADD当前目录下的东西),所以这里放平级了。最后,作者实践中 构建位置 就什么也不填。最后,点击立即构建 即可。如下图2:

持续集成-Docker 与 DaoCloud 的实践(一)_第2张图片

图2

当然,github 项目上得先有 这个Dockerfile 。

在上图中,点击设置,可以设置 当代码提交到 master 分支的时候,进行持续集成,如下图3:

持续集成-Docker 与 DaoCloud 的实践(一)_第3张图片

图3


我的集群

即 添加自己的主机到 DaoCloud 中,这样 DaoCloud 才能在下一步 的部署中 把镜像部署到主机中。


镜像仓库:

点击版本,即可看见 镜像了,可以拉取,部署。例如点击部署:

        首先需要 填写应用名称,选择运行环境(即选自己的主机即可)-》 基础设置中 再添加端口。-》高级设置中 填写自定义的启动命令。例如本项目的启动命令:

/bin/sh -c 'cd /opt/;mvn spring-boot:run'

        注意:本人之前在主机中预先安装了一个 Mysql数据库,开放了容器的 3306 端口,目的是给项目使用。在配置的过程中始终没有使用 --link ,因为DaoCloud 会帮我们全部连接配置好,(可以在容器中的 vi /etc/hosts 查看)。数据库的配置:https://hub.docker.com/_/mysql/ 。

Ps(为了这几十个字符搞了个通宵,语法不熟悉伤不起...)

最后,点击 立即部署,即可部署成功,项目也已经启动,网页访问即可访问得到。


2.3 如何持续集成

开启自动发布功能:

在上述步骤 后,会去到容器的详情页面,点击应用详情,再在 发布中 开启自动发布即可,如下图4:

持续集成-Docker 与 DaoCloud 的实践(一)_第4张图片

图4

当然,也有另外的入口,在 上图1 的应用管理,点击应用,然后会发现一个发布,则可以开启它。

这样,当提交代码 到 master 分支的时候,DaoCloud 会马上帮忙构建 镜像,可以在上图2 中看得见。如下图4是作者在测试过程中 DaoCloud 帮忙构建的:

持续集成-Docker 与 DaoCloud 的实践(一)_第5张图片

图4

然后,会自动部署最新的应用(因为刚才开启了自动发布功能)


至此,持续集成完成。


三. 总结

        自此,可以实现 当 github 上有 代码更新的时候,DaoCloud会自动部署最新的应用,还是比较方便的,赞一个。

        之前对 DaoCloud 有一些吐槽,比如没有 jdk8,没有tomcat8,没有maven,希望可以快速更新,毕竟从Docker Hub 上下载不是很快。但是从目前来看,已经能满足持续集成的需求。


Ps:

1. 利益相关:一不小心收了 100块的代金卷。哈哈哈哈。(感觉工作人员还是蛮可爱的。附带 DaoCloud是一家什么样的公司)


你可能感兴趣的:(Docker)