zoukankan      html  css  js  c++  java
  • gitlab及jenkins

    1、安装配置gitlab服务,在gitlab新建一个仓库,配置本地密钥,并通过ssh方式拉取gitlab仓库代码

    https://packages.gitlab.com/gitlab/gitlab-ce?page=1 gitlab包下载地址

    wget https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-11.3.4-ce.0.el7.x86_64.rpm/download.rpm


     

    修改配置文件,并启动服务

    root@gitlab:~# grep "^[a-Z]" /etc/gitlab/gitlab.rb

    external_url 'http://192.168.1.196.3'

    #可选邮件通知设置

    gitlab_rails['smtp_enable'] = true

    gitlab_rails['smtp_address'] = "smtp.qq.com"

    gitlab_rails['smtp_port'] = 465

    gitlab_rails['smtp_user_name'] = "961161266@qq.com"

    gitlab_rails['smtp_password'] = "授权码"

    gitlab_rails['smtp_domain'] = "qq.com"

    gitlab_rails['smtp_authentication'] = :login

    gitlab_rails['smtp_enable_starttls_auto'] = true

    gitlab_rails['smtp_tls'] = true

    gitlab_rails['gitlab_email_from'] = "961161266@qq.com"

    user["git_user_email"] = "961161266@qq.com"

    执行配置并启动服务:

     gitlab-ctl reconfigure #修改完配置文件要执行此操作

    # gitlab-rails #用于启动控制台进行特殊操作,比如修改管理员密码、打开数据库控制

    台( gitlab-rails dbconsole)等

    # gitlab-psql #数据库命令行

    root@s1:~# gitlab-psql

    psql (9.6.11)

    Type "help" for help.

    gitlabhq_production=# db

    List of tablespaces

    Name | Owner | Location

    ------------+-------------+----------

    pg_default | gitlab-psql |

    pg_global | gitlab-psql |

    (2 rows)

    # gitlab-rake #数据备份恢复等数据操作

    # gitlab-ctl #客户端命令行操作行

    # gitlab-ctl stop #停止 gitlab

    # gitlab-ctl start #启动 gitlab

    # gitlab-ctl restar #重启 gitlab

    # gitlab-ctl status #查看组件运行状态

    # gitlab-ctl tail nginx #查看某个组件的日志

    设置密码。


     

    默认用户为root,口令没有第一次登陆时需要设置口令


     

    使用管理员 root 创建组,一个组里面可以有多个项目分支,可以将开发添加到组里

    面进行设置权限,不同的组就是公司不同的开发项目或者服务模块,不同的组添加不

    同的开发即可实现对开发设置权限的管理。


     

     

     

     

    git 客户端测试 clone 项目:


     

    编辑文件并测试提交:root@jenkins:/source

    # cd test-project/

    # git config --global user.name  #配置一个用户名

    # git config --global user.email 2973707860@qq.com #配置一个邮箱

    # vim index.html

     cat index.html

    11111111111

    22222222222

    # git add index.html #添加至本地

    # git commit -m "v1"#将代码打上标签


     

    git config --global user.name “name“ #设置全局用户名

    git config --global user.email xxx@xx.com #设置全局邮箱

    git config --global --list #列出用户全局设置

    git add index.html / . #添加指定文件、目录或当前目录下所有数据到暂存区

    git commit -m “11“ #提交文件到工作区

    git status #查看工作区的状态

    git push #提交代码到服务器

    git pull #获取代码到本地

    git log #查看操作日志

    vim .gitignore #定义忽略文件

    git reset --hard HEAD^^ #git 版本回滚, HEAD 为当前版本,加一个^为上一个,^^为上上一个版本

    git reflog # #获取每次提交的 ID,可以使用--hard 根据提交的 ID 进行版本回退

    git reset --hard 5ae4b06 #回退到指定 id 的版本

    # git branch #查看当前所处的分支

    #git checkout -b develop #创建并切换到一个新分支


     

     

     

    复制ssh链接

     

    2、安装配置jenkins,并实现jenkins和gitlab集成,实现jenkins自动化更新回滚

    配置 java 环境并部署 jenkins:

    https://jenkins.io/zh/download/下载地址

    vim /etc/sysconfig/jenkins #修改配置文件,为了后面的权限设置问题,将用户改为root

    JENKINS_USER="root"

    systemctl start jenkins #启动服务

    tail -f  /var/log/jenkins/jenkins.log

    查看日志,在第一次启动jenkins时,会生成一串秘钥。后面安装时需要提供

    /var/lib/jenkins/secrets/initialAdminPassword #在此文件中也会生成字符串


     

     

     

     

    选择推荐安装

     

    4.1.11:jenkins 插件管理及安装:

    4.1.11.1:插件安装目录:

    插件下载地址:http://updates.jenkins-ci.org/download/plugins/


     

     

    4.1.12:配置 jenkins 权限管理:

    基于角色的权限管理,先创建角色和用户,给角色授权,然后把用户管理到角色。


     

     

    4.1.12.3:更改认证方式:

    Jenkins—系统管理—全局安全配置

    默认创建的用户登录后可以做任何操作,取决于默认的认证授权方式。


     

     

     

     

    在系统配置中可以添加邮箱认证


     

    新建自由风格项目


     

    在凭据中添加私钥,用于链接gitlab仓库


     

    在项目中可以添加gitlab仓库。使用ssh秘钥认证


     

    启动tomcat 使用jenkins自动部署代码至tomcat

    yum install java-1.8.0-openjdk-devel #安装devel版本,会自动解决其他依赖关系

    wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.45/bin/apache-tomcat-8.5.45.tar.gz #下载tomcat二进制安装包

    tar xf apache-tomcat-8.5.45.tar.gz -C /usr/local/ #解压至usr/local目录中

    ln -s apache-tomcat-8.5.45.tar.gz tomcat #创建软连接方便以后修改

    useradd tomcat #添加用户,修改属组 ,tomcat默认以普通身份运行,需要修改文件权限

    chown -R .tomcat .

    chmod g+r conf/*

    chmod g+rx conf/

    chown -R tomcat logs/ temp/ work/

    vim /etc/profile.d/cols.sh #修改tomcat命令行配置。

    PS1='[e[32;40mu@h We[m]$ '

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/tomcat/bin

    更好一下tomcat中的appbase目录


     

    启动catalina.sh start

    配置gitlab仓库地址,使用秘钥认证连过去


     

    使用shell执行命令

    进入jenkins中。系统自带目录(默认创建项目时会创建根项目同名的目录在/var/lib/jenkins/workspace中)

    拉取代码至本地。远程停止tomcat服务。在将文件替换至目标目录,之后启动服务


     

    输出信息


     

     

    添加slave节点


     

     

    4.3:pipline:

    官方介绍;https://jenkins.io/2.0/

    pipline 是帮助 Jenkins 实现 CI 到 CD 转变的重要角色,是运行在 jenkins 2.X 版本的核

    心插件,简单来说 Pipline 就是一套运行于 Jenkins 上的工作流框架,将原本独立运行

    于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程,从而

    实现单个任务很难实现的复杂流程编排和任务可视化,Pipeline 的实现方式是一套

    Groovy DSL,任何发布流程都可以表述为一段 Groovy 脚本。

    4.3.2:pipline 语法:

    Stage:阶段,一个 pipline 可以划分为若干个 stage,每个 stage 都是一个操作,比如

    clone 代码、代码编译、代码测试和代码部署,阶段是一个逻辑分组,可以跨多个 node

    执行。

    Node:节点,每个 node 都是一个 jenkins 节点,可以是 jenkins master 也可以是

    jenkins agent,node 是执行 step 的具体服务器。

    Step:步骤,step 是 jenkins pipline 最基本的操作单元,从在服务器创建目录到构建容


     

    4.3.2.2:测试简单 pipline job 运行:

    node {

    stage("clone 代码"){

    echo "代码 clone"

    }

    stage("代码构建"){

    echo "代码构建"

    }

    stage("代码测试"){

    echo "代码测试"

    }

    stage("代码部署"){

    echo "代码部署"

    }

    }


     

    5.1:代码测试工具 SonarQube:

    官方网站:http://www.sonarqube.org/

    SonarQube 是一个用于代码质量管理的开放平台,通过插件机制,SonarQube可以

    集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(例如

    Hudson/Jenkins 等)不同,SonarQube 并不是简单地把不同的代码检查工具结果(例

    如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再

    加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种

    类的工程进行代码质量管理。在对其他工具的支持方面,Sonar不仅提供了对 IDE的支

    持,可以在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持

    续集成工具提供了接口支持,可以很方便地在持续集成中使用 SonarQube,此外,

    SonarQube 的插件还可以对 Java以外的其他编程语言提供支持,对国际化以及报告

    文档化也有良好的支持。

    5.2.1:编辑配置文件:

    https://www.sonarqube.org/downloads/下载地址

    sonar 依赖于 java 环境,而且 java 版本必须是 1.8 版本或更高,否则 sonar 启动失败

    6.7.X 版本的 sonar 需要调用 elasticsearch,而且默认需要使用普通用户启动

    $ unzip sonarqube-6.7.6.zip

    $ln -sv /usr/local/src/sonarqube-6.7.6 /usr/local/sonarqube

    $grep "^[za-Z]" /usr/local/sonarqube/conf/sonar.properties

    [root@s1 local]# grep "^[za-Z]" /usr/local/sonarqube/conf/sonar.properties

    sonar.jdbc.username=sonar

    sonar.jdbc.password=123456

    sonar.jdbc.url=jdbc:mysql://192.168.7.106:3306/sonar?useUnicode=true&characterEncodi

    ng=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

    sonar.web.host=0.0.0.0

    sonar.web.port=9000

    5.2.2:启动 sonarqube:

    # /usr/local/sonarqube/bin/linux-x86-64/sonar.sh start

    默认登录名及密码为admin

    5.1.2:Mysql 数据库创建及授权:

    #yum install vim gcc gcc-c++ wget autoconf net-tools lrzsz iotop lsof iotop bash-completion

    curl policycoreutils openssh-server openssh-clients postfix -y

    #cd mysql-5.6.42-linux-glibc2.12-x86_64

    #ln -sv /usr/local/src/mysql-5.6.42-linux-glibc2.12-x86_64 /usr/local/mysql

    #useradd mysql -s /sbin/nologin

    #chown mysql.mysql /usr/local/mysql/ -R

    #/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql --

    basedir=/usr/local/mysql/

    #cp /usr/local/src/mysql-5.6.42-linux-glibc2.12-x86_64/support-files/mysql.server

    /etc/init.d/mysqld

    #cp my.cnf /etc/my.cnf

    #chmod a+x /etc/init.d/mysqld

    #/etc/init.d/mysqld start

    #ln -sv /usr/local/mysql/bin/* /usr/bin/

    #mkdir /var/lib/mysql

    #ln -sv /data/mysql/mysql.sock /var/lib/mysql/

    5.3:部署扫描器 sonar-scanner:

    5.3.1:部署 sonar-scanner:

    sonarqube 通过调用扫描器 sonar-scanner 进行代码质量分析,即扫描器的具体工作就

    是扫描代码:

    #下载地址:http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

    # unzip sonar-scanner-2.6.1.zip

    # ln -sv /usr/local/src/sonar-scanner-2.6.1 /usr/local/sonar-scanner

    # cd /usr/local/sonar-scanner/

    # grep "^[a-Z]" conf/sonar-scanner.properties

    sonar.host.url=http://localhost:8800

    sonar.sourceEncoding=UTF-8

    sonar.jdbc.username=sonar

    sonar.jdbc.password=123456

    sonar.jdbc.url=jdbc:mysql://192.168.1.195:3306/sonar?useUnicode=true&character

    Encoding=utf8

    5.3.4:jenkins 关联到 SonarQube :

    首先安装插件,在 jenkins 插件安装界面安装 Sonar 插件 SonarQubePlugin

    其次配置 SonarQube server,系统管理-系统设置

    5.3.5:让 jenkins 关联到 Sonarscanner

    添加扫描器:

    系统管理-Global Tool Configuration

    5.3.6:配置扫描:

    选择自己的项目(demo)-构建-execute sonarqube scanner,将配置文件的内容修改成如

    下格式填写完成后点保存:

    sonar.projectKey=test-demo1

    sonar.projectName=test-demo1

    sonar.projectVersion=1.0

    sonar.sources=./

    sonar.language=php

    sonar.sourceEncoding=UTF-8

    5.3.6:配置扫描:

    选择自己的项目(demo)-构建-execute sonarqube scanner,将配置文件的内容修改成如

    下格式填写完成后点保存:

    sonar.projectKey=test-demo1

    sonar.projectName=test-demo1

    sonar.projectVersion=1.0

    sonar.sources=./

    sonar.language=php

    sonar.sourceEncoding=UTF-8

    使用脚本自动更新,需要传递参数,

    #!/bin/bash

    DATE=`date +%Y-%m-%d_%H-%M-%S`

    GROUP_LIST=$2

    function IP_list(){

      if [[ ${GROUP_LIST} == "online-group1" ]];then

        Server_IP="192.168.8.4"

        echo ${Server_IP}

      elif [[ ${GROUP_LIST} == "online-group2" ]];then

        Server_IP="192.168.8.5"

        ssh root@192.168.8.2 ""echo enable  server web_port/192.168.8.4" | socat stdio /var/lib/haproxy/haproxy.sock"

        ssh root@192.168.8.6 ""echo enable  server web_port/192.168.8.5" | socat stdio /var/lib/haproxy/haproxy.sock"

        echo ${Server_IP}

      elif [[ ${GROUP_LIST} == "online-all" ]];then

        Server_IP="192.168.8.4 192.168.8.5"

        echo ${Server_IP}

      fi

    }

    #function pull_code(){

    #  rm -rf /home/tomcat/.jenkins/workspace/testweb

    #  cd /home/tomcat/.jenkins/workspace

    #  git clone git@192.168.7.202:testgroup/testweb.git

    #}

    function make_zip(){

      cd /var/lib/jenkins/workspace/test-demo1  && zip testweb.war.zip ./*

    }

    function down_node(){

      for node in ${Server_IP};do

        echo ${node}

        ssh root@192.168.8.2 ""echo disable  server web_port/${node}" | socat stdio /var/lib/haproxy/haproxy.sock"

        ssh root@192.168.8.6 ""echo disable  server web_port/${node}" | socat stdio /var/lib/haproxy/haproxy.sock"

        echo "${node} 关闭成功!"

      done 

    }

    function stop_tomcat(){

      for node in ${Server_IP};do

        ssh tomcat@${node} "/etc/init.d/tomcat stop"

        echo "${node} 关闭成功!"

      done 

    }

    function start_tomcat(){

      for node in ${Server_IP};do

        ssh tomcat@${node} "/etc/init.d/tomcat start"

        echo "${node} 关闭成功!"

      done 

    }

    function scp_codefile(){

      cd /var/lib/jenkins/workspace/test-demo1

      for node in ${Server_IP};do

        scp testweb.war.zip  tomcat@${node}:/apps/tomcat_appdir

        ssh tomcat@${node} "cd /apps/tomcat_appdir && unzip testweb.war.zip -d /apps/tomcat_webdir/testweb-${DATE} && rm -rf /data/tomcat_webdir/testweb && ln -sv /apps/tomcat_webdir/testweb-${DATE} /data/tomcat_webdir/testweb"

      done

    }

    function web_test(){

      #sleep 30

      for node in ${Server_IP};do

        NUM=`curl -s  -I -m 10 -o /dev/null  -w %{http_code}  http://${node}:8080/testweb/index.html`

        if [[ ${NUM} -eq 200 ]];then

          echo "${node} 测试通过,即将添加到负载"

          add_node ${node}

        else

          echo "${node} 测试失败,请检查该服务器是否成功启动tomcat"

        fi

      done

    }

    function add_node(){

      node=$1

        echo ${node},"----->"

        if [ ${node} == "192.168.8.100" ];then

          echo "192.168.8.100部署完毕,请进行代码测试!"

        else

          ssh root@192.168.8.2 ""echo enable  server web_port/${node}" | socat stdio /var/lib/haproxy/haproxy.sock"

          ssh root@192.168.8.6 ""echo enable  server web_port/${node}" | socat stdio /var/lib/haproxy/haproxy.sock"

        fi

    }

    function rollback_last_version(){

      for node in ${Server_IP};do

        NOW_VERSION=`ssh tomcat@${node} ""/bin/ls -l  -rt /data/tomcat_webdir/ | awk -F"->" '{print $2}'  | tail -n1 | awk -F"/apps/tomcat_webdir/" '{print $2}'""`

        NAME=`ssh tomcat@${node}  ""/bin/ls -l  -rt -d  /apps/tomcat_webdir/testweb* | grep -B 1 ${NOW_VERSION} | head -n1 | awk '{print $9}'""`

        ssh tomcat@${node} "rm -rf /data/tomcat_webdir/testweb && ln -sv ${NAME} /data/tomcat_webdir/testweb"

      done

    }

    main(){

      case $1  in

          deploy)

            IP_list;       

            #pull_code;

            make_zip;

            down_node;

            stop_tomcat;

            scp_codefile;

            start_tomcat;

            web_test;

            ;;

          rollback_last_version)

            IP_list;

            echo ${Server_IP}

            down_node;

            stop_tomcat;

            rollback_last_version;

            start_tomcat;

            web_test;

            ;;

        esac

    }

    main $1 $2

    #需要自建两个参数


     
  • 相关阅读:
    IllegalStateException
    TimeUnit简析
    Cron表达式
    任务调度之Timer与TimerTask配合
    Executor简析
    this逃逸
    SQL、SQL Server、MySQL与Oracle
    数据库与实例
    vw 、vh、vmin 、vmax
    逻辑(内存)分页与物理分页
  • 原文地址:https://www.cnblogs.com/woaiyitiaochai/p/11757992.html
Copyright © 2011-2022 走看看