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

    有兴趣的可以看下

  • 相关阅读:
    mongodb压缩——snappy、zlib块压缩,btree索引前缀压缩
    python cassandra 创建space table并写入和查询数据
    机器学习算法选择——特征提取
    机器学习的算法选择
    公积金联名卡——提取公积金用,用身份证即可办理
    Facebook图片存储系统Haystack——存小文件,本质上是将多个小文件合并为一个大文件来降低io次数,meta data里存偏移量
    HDFS namenode 高可用(HA)搭建指南 QJM方式 ——本质是多个namenode选举master,用paxos实现一致性
    javascript语言精粹:继承
    转:Javascript的10个设计缺陷
    转:CSS选择器笔记
  • 原文地址:https://www.cnblogs.com/jxd283465/p/11714490.html
Copyright © 2011-2022 走看看