【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

前言

  本人是一家互联网公司的java开发,由于公司初期公司未招运维人员,恰好我对linux比较熟悉,便在公司服务器搭建了一套Jenkins、Gitlab、Maven私服、Docker私服、Sonarqube、ELK、FastDFS等一套持续集成的运维环境。

  后来发现,运维这块以后也归我管了……平时做系统开发,还要兼职运维,一些前端或者后端的发布都要找我来创建Jenkins 项目、添加gitlab hook、添加dockerfile文件等等。

  所以就想自己写一套简单的持续化集成发布的系统。便有了接下来的EasyCi。

  EasyCi系统开发的目的是免去远程发布的免密登陆、拉取gitlab代码的认证、手动添加gitlab hook、查看gitlab中该项目的git地址等等多余的操作。这些操作均有后台自动完成,系统提供运行环境一键安装脚本、自动化安装部署本系统、开箱即用,只需要几个参数即可实现项目的远程构建,暂时只支持vue和java项目的构建。

  Easyci系统采用B/S架构,后端采用springboot框架、前端采用Vue的element ui、数据库采用mysql、运行工具为shell脚本、采用websocket进行实时日志传输。

  由于系统由本人独立开发,对前端开发不是很擅长,页面比较简单,只为实现基本功能,后续会对功能和页面进行优化。

系统架构

Jenkins系统架构

工具链

Jenkins:集成各种工具,持续集成、持续交付

Gitlab:代码托管库,通过gitlab hook触发Jenkins持续集成交付

Maven私服:私有jar包仓库

Docker私服:私有docker镜像仓库,用于远程构建

Sonarqube:代码审查工具

ELK:日志手机系统、分析系统

流程

1.Jenkins集成gitlab、maven、docker、sonarqube,安装各种插件

2.开发人员提交代码到gitlab,触发gitlab hook中添加的jenkins项目url进行jenkins构建

3.jenkins自动拉取该项目的gitlab代码,进行打包、再打包成docker镜像,docker镜像提交到docker私服

4.连接需要发布的服务器,拉去docker私服中该项目的镜像,docker run运行容器

5.Jenkins构建项目运行完成后添加gitlab tag并提交gitlab作为以后回滚的依据

6.Jenkins构建失败则自动拉取最新的gitlab tag重新构建,执行回滚,回滚再次构建失败便停止

7.构建成功或者回滚成功或者回滚失败都会通过linux的sendmail发送邮件提醒,并附加构建日志

8.构建的代码会通过sonarqube插件上传sonarqube进行代码审查

系统图

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

EasyCi系统架构

工具链

EasyCI:easyci系统后台,调用shell脚本、通过接口将结果返回前端

EasyCI-UI:easyci系统前台,vue。调用后台接口展示数据

Gitlab:代码托管工具,通过gitlab hook触发easyci持续集成交付

shell脚本:linux脚本

Docker私服:私有docker镜像仓库,用于远程构建

MySQL:easyci系统数据库

流程

1.根据安装文档安装系统,启动系统

2.访问系统首先需要验证gitlab:gitlab的url、用户名和密码。用于选择项目构建、服务器拉取代码验证、自动添加hook,免去手动操作。

3.添加远程发布服务器:服务器ip、端口、用户名、密码。后台自动完成服务器间的免密登录,用于项目远程发布、查看服务器容器以及容器的各种操作。

4.部署:选择项目url、输入docker容器端口映射关系、选择项目类型、输入收件人邮箱、选择部署服务器,只需要输入两项内容即可完成部署。

5.点击部署,会弹出窗口显示系统部署日志。

6.部署会自动添加easyci的hook接口url到该部署项目的hook中,用于自动触发构建。

7.部署完成自动发送邮件给收件人邮箱,显示构建结果、构建时间、构建项目、构建日志。

8.后续开发人员提交代码到该项目的gitlab,会触发gitlab的hook调用easyci接口,查询之前部署的信息进行自动部署,实现持续集成。

9.页面展示easyci本机正在运行的容器和添加的远程服务器正在运行的容器,支持数据自动刷新与关闭

10.可以选择添加的远程服务器,查看该服务器的容器列表

11.容器操作:可点击启动  、停止、重启、销毁在页面对服务器中运行的容器进行操作,即docker  start|stop|restart|rm 容器名称

12..容器实时日志:点击日志,可以查看该容器的实时日志,即docker logs -f 容器名称

安装教程

1.系统准备

  • 本系统仅支持Centos7系统
  • 配置2H4G
  • 固定好ip

1.在公司服务器中分出一个虚拟机作为easyci的运行环境,要求如上图所示。

注意:该虚拟机最好不要运行其他服务,因为easyci会先在本地运行容器测试部署结果,再发送到远程服务器运行容器,要注意端口占用。

2.将easyici.zip通过winscp或者xftp等。

这里我放到/root目录下。

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

3.通过xshell或者其他工具连接服务器。

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

4.进入/root目录,将easyci.zip解压

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

如果解压unzip没有命令,可以执行 yum install -y unzip 安装

再次解压。解压后生成easyci文件夹。

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

5.进入easyci文件夹

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

6.编辑install.sh,修改第35行中的localhost修改为本机ip

  • vi install

按住“ℹ️”进入编辑,修改localhost为本机ip

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

修改完成后,按“Esc”退出编辑状态,按“:”输入wq回车,保存。

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

该install脚本为easyci系统部署所需要所有工具的安装,可按需调整。

7.运行install脚本,进行系统安装

  • bash install.sh

系统安装会持续20分钟左右,具体看网速。

出现下图,表示系统所需工具初步安装完成。

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

8.重载/etc/profile配置文件。

  • source /etc/profile

测试java、maven、node等命令是否正常安装。

  • java -version
  • mvn -v
  • node -v
  • npm -v

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

ok,工具按住完成。

9.永久关闭selinux

  • vi /etc/selinux/config

将SELINUX=enforcing改为SELINUX=disabled
设置后需要重启才能生效。

10.开放mysql的root用户远程访问。

  • mysql -hlocalhost -uroot -p123456
  • grant all privileges on *.* to root@"%" identified by ".";
  • flush privileges;
  • exit

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

11.启动系统

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

进入easyci系统家目录/home/easyici

执行./startEasyCi.sh启动系统

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

  • netstat -tunlp | grep -E "9875|81"

查看前端81端口和后端9875端口是否开启成功。

使用教程

1.访问系统  浏览器打开 ip:81

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

系统启动首先需要验证gitlab。

gitlaburl:输入gitlab的地址,不要加http:

用户名密码:建议用户名和密码输入管理员root的用户名和密码。

注:这里的密码不要包含@ / 等特殊符号,否则免认证拉取git代码会失败

此处输入点击登录,后台会调用gitlab api拿到access-token,用于在服务器中拉取免密拉取代码、部署时选择构建的项目。

2.添加远程部署服务器

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

输入信息点击添加,系统会系统生成本服务器的公钥,添加到该服务器的认证文件中实现免密登陆。

添加完成之后会展示该服务器的docker容器列表,可以进行启动、停止、重启、销毁、查看实时日志操作。

添加服务器完成,会显示本机的容器列表和添加服务器的容器列表。【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

如果有多个远程服务器,可以选择某个服务器,查看该服务器的容器列表,也可以开启自动刷新,实时刷新容器数据。

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

“启动|停止|重启|销毁”等操作同步docker start|stop|restart|rm 容器名称。

“日志”可以查看该服务器的实时日志,即docker logs -f -tail 200 容器名称。查看该容器近200行日志,并实时刷新。

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

3.项目构建

点击选择需要部署的gitlab醒目

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

端口输入端口映射对。

由于是采用docker容器运行。需要设置映射端口

例如6000:5000

前面的6000为宿主机对外访问开放的端口,后面的5000为构建项目的端口,注意“:”为英文状态下

项目语言选择vue或者java。

收件人邮箱:如果有多个以“,”分割

部署方式:选择要部署的服务器。

注意:本系统是在本地先运行测试容器是否正常运行。运行正常则本地会删除容器释放端口,再发布到远程服务器运行。

所以注意本地端口占用。系统初始端口如下:

22、25、81、5000、3306、9875、68、323

即端口映射前面的端口不能为上述端口。

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

如果本地或者远程端口被占用,会停止构建,弹窗提醒。

这里easyci本地运行的docker私服占用了5000端口,再发布5000端口的宿主映射会提示“端口已被占用”

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

换其他端口,开始部署,显示部署日志

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

容器部署成功会有邮件提醒。

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

部署日志

【EasyCi】持续集成交付,一键式自动化部署系统,开箱即用

上一篇:使用Bundle在Activity之间交换数据


下一篇:ubuntu14.04 安装 tensorflow9.0