一. 前言
二. DaoCloud 持续集成 的 实现
三. 总结
一. 前言
什么是持续集成:http://www.ruanyifeng.com/blog/2015/09/continuous-integration.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:
图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:
图2
当然,github 项目上得先有 这个Dockerfile 。
在上图中,点击设置,可以设置 当代码提交到 master 分支的时候,进行持续集成,如下图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:
图4
当然,也有另外的入口,在 上图1 的应用管理,点击应用,然后会发现一个发布,则可以开启它。
这样,当提交代码 到 master 分支的时候,DaoCloud 会马上帮忙构建 镜像,可以在上图2 中看得见。如下图4是作者在测试过程中 DaoCloud 帮忙构建的:
图4
然后,会自动部署最新的应用(因为刚才开启了自动发布功能)
至此,持续集成完成。
三. 总结
自此,可以实现 当 github 上有 代码更新的时候,DaoCloud会自动部署最新的应用,还是比较方便的,赞一个。
之前对 DaoCloud 有一些吐槽,比如没有 jdk8,没有tomcat8,没有maven,希望可以快速更新,毕竟从Docker Hub 上下载不是很快。但是从目前来看,已经能满足持续集成的需求。
Ps:
1. 利益相关:一不小心收了 100块的代金卷。哈哈哈哈。(感觉工作人员还是蛮可爱的。附带 DaoCloud是一家什么样的公司)