• 持续集成和持续部署环境搭建


    Gitlab仓库搭建

        1.yum install gitlab-ce

        2.grep "^[a-z]"  /etc/gitlab/gitlab.rb

        3. external_url "http://192.168.10.30"  标识服务器的IP地址

        4.修改完配置文件执行操作    gitlab-ctl   reconfigure

        5. gitlab-ctl start /  stop / restart

        6. 打开web页面设置登陆密码

        7.默认的用户名为root

    Jenkins的安装和部署

       1.jenkins的运行依赖java运行环境 必须先安装好java

       2.配置好jenkins的官方repo

           wget  -O  /etc/yum.repos.d/jenkins.repo   https://pkg.jenkins.io/redhat/jenkins.repo

           rpm  --import   https://pkg.jenkins.io/redhat/jenkins.io.key

       3. yum install java

       4.yum install jenkins

       5.首次登陆需要打开/var/lib/jenkins/secrets/initialAdminPassword查看默认密码

       6.jenkins插件

          1.Gitlab                           从gitlab中获取代码

          2.Gitlab Hook Plugin       gitlab触发jenkins构建项目插件

    Jenkins免密码从Gitlab服务器中拉取代码

       1.在jenkins服务器上生产SSH密钥对   执行 ssh-keygen

       2.把jenkins服务器上的ssh公钥拷贝到Gitlab服务器上

            1.针对所有项目设置ssh public key

          2.针对单个项目设置ssh public key

        

      3.测试免密码使用git从Gitlab远程仓库拉取代码     git clone git@192.168.74.128:root2/myweb.git

      4.把之前在服务器生成的ssh私钥文件拷贝到jenkins服务器当中

      

    5.jenkins不能拉取空仓库    至少包含README.md文件      否则构建任务的时候会提示失败

    6.构建成功输出控制台信息

    使用jenkins把从gitlab上拉取的代码远程拷贝到web服务器上

       1.建立jenkins服务器和web服务器的免密码远程连接登录   ssh-copy-id 192.168.74.130

        创建新的任务 此次任务全部使用shell脚本来创建 不再需要配置源码管理  直接配置构建选项

        使用shell脚本的方式需要注意用户的权限问题  因为jenkins程序默认使用的是jenkins这个普通用户

           1.jenkins用户执行脚本的权限

           2.jenkins用户从gitlab中拉取代码的权限

           3.jenkins用户把代码远程拷贝到web服务器的权限

        解决方案:

           1.把jenkins的启动用户改成root

           2.给普通用户设置相应的权限

       

     

     sonar安装使用

        一个用于代码质量管理的开放平台,通过插件机制  可以集成不同的测试工具,代码分析工具 ,持续集成工具.

        安装好sonar后通过安装jenkins插件SonarQube Plugin使得jenkins关联到sonar scanner

    HAproxy实现include配置文件

       通过自带参数 -f 实现配置文件导入功能,可以按照业务配置不同的 XX.cfg文件,然后在haproxy服务启动脚本里面进行配置即可

       避免把所有的配置信息都写在一个主配置文件中 而使得主配置文件因配置项过多而后期难以进行维护

        # cat /usr/lib/systemd/system/haproxy.service 

       [Unit]
        Description=HAProxy Load Balancer
        After=syslog.target network.target
    
       [Service]
        EnvironmentFile=/etc/sysconfig/haproxy
        ExecStart=/usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/pubcfg -p /run/haproxy.pid $OPTIONS
        ExecReload=/bin/kill -USR2 $MAINPID

        #创建配置文件目录

          # mkdir /etc/haproxy/pubcfg

          # vi /etc/haproxy/pubcfg/haproxy1.cfg 

        重新加载配置文件:

         # systemctl  reload  haproxy 

     HAproxy实现后端服务器动态添加和删除

         通过haproxy动态增减web集群中的主机,打开haproxy的主机在线维护功能,主要原理是haproxy监听本地socket文件

         1.修改haproxy主配置文件

            stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin   #设置socket文件路径,权限为600级别为admin,还有其他级别,但是动态添加主机需要admin权限

         2.创建保存socket文件的目录

            mkdir /var/lib/haproxy

         3./etc/init.d/haproxy restart       ls/var/lib/haproxy/haproxy.socket

         4.安装socat命令,socat是和socket通信的命令  

            yum install socat

         5.echo "disable server web_port/web1" | socat stdio /var/lib/haproxy/haproxy.socket        #关闭指定backend下的某台web服务器

         6.echo "enable server web_port/web1" | socat stdio /var/lib/haproxy/haproxy.socket

         7.haproxy配置如下

         listen web_port
           bind :80
           mode http
           balance leastconn
           server web1 172.20.127.177:22 check
           server web2 172.20.127.178:22 check

         8.web_port 表示在haproxy配置文件中listen对应的名称

         9.web1   表示在haproxy配置文件中对应的每个后端主机设置的名称  可以把这个这个名称设置成IP地址

    CI和CD概念

      CI
        1.开发提交代码到GitLib代码仓库
        2.(webhook)对应的监控工具监控推送新代码事件的发生
        3.使用CI工具(jenkins)对代码进行静态分析 打包前测试
        4.(调用构建工具)对代码进行打包
        5.打包后测试(单元测试 集成测试)

      CD
        1.开发人员提交代码和开发配套的dockerfile把这两部分内容都提交到gitlab中
        2.jenkins首先对提交代码进行测试 构建成应用程序包
        3.jenkins调用docker build 通过dockerfile和程序包打包成docker镜像
        4.把docker镜像推送到docker 镜像仓库中
        5.开发人员开发k8s清单文件mainfest模板
        6.使用ansible的模板引擎对清单模板文件进行渲染
        7.ansible把渲染后的清单文件提交给k8s k8s根据清单创建Pod

  • 相关阅读:
    Safari书签同步
    光标从编辑器移入本页面中的其它输入域后,IE中每次只在编辑器首部插入内容
    JavaScript里模拟sleep
    外观/门面模式(Facade)
    JavaScript中delete操作符不能删除的对象
    Perl与JS的比较(子程序)
    读jQuery之二十一(队列queue)
    JavaScript中“基本类型”之争
    读jQuery之十九(多用途回调函数列表对象)
    工厂模式(Factory)
  • 原文地址:https://www.cnblogs.com/yxh168/p/9491307.html
Copyright © 2020-2023  润新知