zoukankan      html  css  js  c++  java
  • 【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系统后台,调用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目录下。

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

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

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

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

     5.进入easyci文件夹

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

    • vi install

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

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

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

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

    • bash install.sh

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

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

     

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

    • source /etc/profile

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

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

     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

     11.启动系统

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

    执行./startEasyCi.sh启动系统

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

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

    使用教程

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

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

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

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

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

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

    2.添加远程部署服务器

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

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

     添加服务器完成,会显示本机的容器列表和添加服务器的容器列表。

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

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

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

     3.项目构建

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

     端口输入端口映射对。

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

    例如6000:5000

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

    项目语言选择vue或者java。

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

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

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

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

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

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

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

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

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

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

     部署日志

    github已开源:https://github.com/jiangxd0716/easyci

    有兴趣的可以看下

  • 相关阅读:
    06 is和==的区别 encode()编码 decode()解码
    05 dic的增删改查 字典的嵌套 考试题dic.get()的相关使用
    03 编码 int ,bool,str的常用操作 主要讲str
    01 基本数据类型 变量 if语句
    04 列表的增删改查 常用方法 元祖 range
    02 while循环 格式化输出 运算符
    多校2 Harmonious Army hdu6598 网络流
    P3159 [CQOI2012]交换棋子 网络流
    P2172 [国家集训队]部落战争 最大流
    P2402 奶牛隐藏 网络流
  • 原文地址:https://www.cnblogs.com/jxd283465/p/11714490.html
Copyright © 2011-2022 走看看