zoukankan      html  css  js  c++  java
  • DevOps之持续集成Jenkins+Gitlab

    一、什么是DevOps

          DevOps(英文Development(开发)和Operations(技术运营)的组合)是一组过程、方法与系统的统称,DevOps是一组最佳实践强调(开发、运维、测试)在应用和服务生命周期中的协作和沟通,强调整个组织的合作,以及交付和基础设施变更的自动化,从而实现持续集成、持续部署和持续交付。

    1、什么是持续集成

            持续集成是指开发人员在程序的开发过程中,可以频繁的将代码部署集成到主干,并进程自动化测试

    2、什么是持续交付

           持续交付指的是在持续集成的环境基础之上,将代码部署到预生产环境 

    3、什么是持续部署

           在持续交付的基础上,把部署到生产环境的过程自动化,持续部署和持续交付的区别就是最终部署到生产环境是自动化的。

     二、Jenkins安装

    1、Jenkins是什么?

            jenkins是一个用JAVA编写的开源的持续集成工具,运行在servlet容器中,支持软件配置管理(SCM)工具,可以执行基于APACHE ANT和APACHE MAVEN的项目,以及任意Shell脚本和Windows批处理命令,可用于自动执行与构建,测试和交付或部署软件有关的各种任务。

    ①Yum安装jenkins

    #安装yum源#
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    yum clean all && yum makecache
    #安装JDK#
    下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    上传jdk-8u181-linux-x64.tar.gz包到目标服务器

    #解压拷贝jdk#
    tar xf jdk-8u181-linux-x64.tar.gz -C /usr/local/
    ln -s /usr/local/jdk1.8.0_171/ /usr/local/jdk
    ln -s /usr/local/jdk/bin/java /usr/bin/java
    #设置环境变量#
    $ vim /etc/profile
    export JAVA_HOME=/usr/local/jdk
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$JAVA_HOME/bin:$PATH
    source  /etc/profile

    安装Jenkins

    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
    yum install jenkins -y
    systemctl start jenkins

    具体配置请参照:https://www.cnblogs.com/yanxinjiang/p/8058711.html

    ②War包安装jenkins

    配置JDK环境略过……

    官网War包下载地址:https://jenkins.io/download/

    下载Tomcat与JDK版本相同

    wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.35/bin/apache-tomcat-8.5.35.tar.gz
    tar xf apache-tomcat-8.5.35.tar.gz –C /application/
    mv /application/apache-tomcat-8.5.35 /application/jenkins
    rm -rf /application/jenkins/webapps/* && mkdir –p /application/jenkins/webapps/ROOT

    下载Jenkins的war包

    wget http://mirrors.jenkins.io/war/latest/jenkins.war
    cp jenkins.war  /application/jenkins/webapps/ROOT/
    unzip /application/jenkins/webapps/ROOT/jenkins.war
    bin/startup.sh #启动即可

    插件源问题

    ###Jenkins 2.222.1更新插件源###
    locate default.json找到文件所在路径或使用find查找文件
    sed -i 's/http://updates.jenkins-ci.org/download/https://mirrors.tuna.tsinghua.edu.cn/jenkins/g' default.json && sed -i 's/http://www.google.com/https://www.baidu.com/g' default.json
    
    安装中文插件 localization-zh-cn
    右下角点击jenkins中文社区
    使用->更新中心镜像设置
    修改更新中心的地址为 https://updates.jenkins-zh.cn/update-center.json

    三、Gitlab介绍

           GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。 
      GitLab拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

    1、部署Gitlab

    安装文档  https://about.gitlab.com/downloads/#centos7
    https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/ 
    yum install -y policycoreutils-python
    #下载RPM包到目标服务器#
    rpm -ivh gitlab-ce-10.8.7-ce.0.el7.x86_64.rpm
    gitlab-ctl reconfigure #初始化,执行一次即可

    2、查看Gitlab状态

    [root@gitlab tools]# gitlab-ctl status
    run: alertmanager: (pid 5787) 739s; run: log: (pid 5810) 738s
    run: gitaly: (pid 5742) 742s; run: log: (pid 5763) 741s
    run: gitlab-monitor: (pid 5761) 741s; run: log: (pid 5777) 740s
    run: gitlab-workhorse: (pid 5728) 743s; run: log: (pid 5733) 742s
    run: logrotate: (pid 5392) 894s; run: log: (pid 5760) 741s
    run: nginx: (pid 5375) 900s; run: log: (pid 5734) 742s
    run: node-exporter: (pid 5460) 881s; run: log: (pid 5764) 741s
    run: postgres-exporter: (pid 5803) 738s; run: log: (pid 5811) 737s
    run: postgresql: (pid 5124) 955s; run: log: (pid 5719) 743s
    run: prometheus: (pid 5774) 740s; run: log: (pid 5798) 739s
    run: redis: (pid 5064) 961s; run: log: (pid 5718) 743s
    run: redis-exporter: (pid 5577) 862s; run: log: (pid 5778) 740s
    run: sidekiq: (pid 5348) 908s; run: log: (pid 5751) 742s
    run: unicorn: (pid 5310) 914s; run: log: (pid 5720) 743s

    浏览器访问10.0.0.22出现如下界面则部署成功

    具体配置细节请参照:https://www.cnblogs.com/yanxinjiang/p/8056845.html

     3、修改Gitlab仓库地址

    修改gitlab.yml文件

    vim /var/opt/gitlab/gitlab-rails/etc/gitlab.yml

    修改gitlab默认端口

    vim /var/opt/gitlab/nginx/conf/gitlab-http.conf
    server {
      listen *:80;
      listen *:9000;

    重启Gitlab即可

    gitlab-ctl restart

     4、GitLab内存占用过高解决方法

    ①、减少进程数

    修改配置文件/etc/gitlab/gitlab.rb中的worker_processes:
    
    unicorn['worker_processes'] = 2
    默认是被注释掉的,官方建议该值是CPU核心数加一,可以提高服务器的响应速度,如果内存只有4G,或者服务器上有其它业务,就不要改了,以免内存不足。另外,这个参数最小值是2,设为1,服务器可能会卡死。
    

    ②减少数据库缓存

    postgresql['shared_buffers'] = "256MB"
    默认为256MB,可适当改小
    

    ③减少数据库并发数

    postgresql['max_worker_processes'] = 8
    默认为8,可适当改小
    

    ④减少sidekiq并发数

    sidekiq['concurrency'] = 25
    默认是25,可适当改小
    

      

    具体调优参数:

    [root@gitlab ~]# egrep -v "#|^$" /etc/gitlab/gitlab.rb
    external_url 'http://10.0.0.22'
    unicorn['worker_timeout'] = 60
    unicorn['worker_processes'] = 10
    unicorn['worker_memory_limit_min'] = "200 * 1 << 20"
    unicorn['worker_memory_limit_max'] = "300 * 1 << 20"
    sidekiq['concurrency'] = 15
    postgresql['shared_buffers'] = "256MB"
    postgresql['max_parallel_workers_per_gather'] = 0
    prometheus['monitor_kubernetes'] = false

     5、GitLab问题

    ①Gitlab 403 forbidden 并发引起IP被封

    原因:Gitlab使用rack_attack做了并发访问的限制

    解决:将Gitlab服务器的IP设置为白名单即可

    vim  /etc/gitlab/gitlab.rb
    
    gitlab_rails['rack_attack_git_basic_auth'] = {
           'enabled' => true,
           'ip_whitelist' => ["127.0.0.1","192.168.1.200","公网IP"],
           'maxretry' => 100,   #参数调整
           'findtime' => 60,      
           'bantime' => 60
         }
    
    
    gitlab-ctl reconfigure

    ②访问502问题

    vim /etc/gitlab/gitlab.rb
    
    unicorn['port']         #默认8080  端口冲突
    unicorn['port'] = 8081  #修改为8081
    
    #####修改上面文件有时候不管用####
    
    vim /var/opt/gitlab/gitlab-rails/etc/unicorn.rb
    
    listen "127.0.0.1:8081", :tcp_nopush => true

    ③点击项目500

       gitlab数据迁移时的一个缺陷,个别项目点击报500

    1、拷贝原来gitlab的 db_key_base 到新的gitlab
    文件位置:/etc/gitlab/gitlab-secrets.json
    2、EE版本执行
    gitlab-rails runner "Project.where(mirror: false).where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"
    CE版本执行
    gitlab-rails runner "Project.where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"

    四、Jenkins集成gitlab

    1、Jenkins生成ssh秘钥认证

    ssh-keygen -t rsa

    分发公钥到gitlab服务器

    cat /root/.ssh/id_rsa.pub 
    ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA2M2BY3CNUbLmkfMUFbKEBK8MTYzDcuegb4w3JC+Sa0LzgZknncodEwsxQ7qz7aKmAPmyGztzBP5NIinnqUGZ+jVHLr1wy9eYrzKfw5zLHlPML2P5+MzKmt/yW6Sc3nUcpSkoWg0fV0KJGvaHQbobziSFCEQWnsQJpW5LGfznQm6qrAxO/5AMg1vNG2xThY9nc+wgFYy/D0A58xG8KFnD+REwJk2ASV/XMteeRq0fyr/LVjgniqdgxnrERNoGoW+E+9ccYEm2TBuW/1yNBoNSog8S7Q9VDBvmJUfpcIGhhH7VH/TA4gHefho6ksN8b/sYyBI+9jAQmMiuUJtyY36a+w== root@jenkins

    Jenkins拉取代码认证

    cat /root/.ssh/id_rsa
    -----BEGIN RSA PRIVATE KEY-----
    MIIEogIBAAKCAQEA2M2BY3CNUbLmkfMUFbKEBK8MTYzDcuegb4w3JC+Sa0LzgZkn
    ncodEwsxQ7qz7aKmAPmyGztzBP5NIinnqUGZ+jVHLr1wy9eYrzKfw5zLHlPML2P5
    +MzKmt/yW6Sc3nUcpSkoWg0fV0KJGvaHQbobziSFCEQWnsQJpW5LGfznQm6qrAxO
    /5AMg1vNG2xThY9nc+wgFYy/D0A58xG8KFnD+REwJk2ASV/XMteeRq0fyr/LVjgn
    iqdgxnrERNoGoW+E+9ccYEm2TBuW/1yNBoNSog8S7Q9VDBvmJUfpcIGhhH7VH/TA
    4gHefho6ksN8b/sYyBI+9jAQmMiuUJtyY36a+wIBIwKCAQBpTd/ClcD7y+xVhLH7
    6P5LavdY3fiIRJ5iEOeVO62EjjvCmti6Wtrr/h8+J3v3FHyEIYJk/55EQQDktUSi

     2、Jenkins基于角色的权限管理RBAC

    ①安装插件: Role-based Authorization Strategy

    ②配置

    ③创建用户

    ④创建角色

    创建dev角色

    ⑤给用户分配角色

  • 相关阅读:
    操作权限和数据权限
    maven scope
    maven dependencies与dependencyManagement的区别
    maven pom继承与聚合
    java @SuppressWarnings注解
    java使用省略号代替多参数(参数类型... 参数名)
    Bean Validation 技术规范特性概述
    synchronized锁住的是代码还是对象
    Java泛型
    Java的外部类为什么不能使用private、protected进行修饰
  • 原文地址:https://www.cnblogs.com/yanxinjiang/p/10026390.html
Copyright © 2011-2022 走看看