Jenkins-SpringBoot-实现自动化构建

Jenkins

SSH-Gitlab

  • 虚拟机内存查看

    内存分配信息
  • 安装相关依赖

    sudo yum install -y curl policycoreutils-python openssh-server perl
    sudo systemctl enable sshd
    sudo systemctl start sshd
    
  • 配置镜像

    # 配置极狐 GitLab 软件源镜像。
    curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash
    
  • 开始安装

    sudo EXTERNAL_URL="http://192.168.247.129" yum install -y gitlab-jh
    

    {% note blue ‘fas fa-bullhorn’ modern %}

    随机密码存储位置: /etc/gitlab/initial_roo_password文件中(出于安全原因,24小时候,此文件会被第一次gitlab-ctlreconfgure自动删除,因此若使用随机密码登录,建议安装成功初始登录成功之后,立即修改初始密码)使用此密码和用户名root登录

    {% endnote %}

  • gitlab常用命令

    gitlab-crl start # 启动所有 gitlab 组件
    gitlab-ctl stop # 停止所有 gitlab 组件
    gitlab-ctl restart # 重启所有 gitlab 组件
    gitlab-ctl status # 查看服务状态
    gitlab-ctl reconfigure # 启动服务
    
    vi /etc/gitlab/gitlab.rb # 修改默认的配置文件
    gitlab-ctl tail # 查看日志
    
    
  • 启动

    启动
    Jenkins-SpringBoot-实现自动化构建_第1张图片
  • 密码修改

    • 说明

      24小时候删除
      Jenkins-SpringBoot-实现自动化构建_第2张图片
    • 修改

      查看临时密码 管理员 修改密码:administrator
      Jenkins-SpringBoot-实现自动化构建_第3张图片 Jenkins-SpringBoot-实现自动化构建_第4张图片 Jenkins-SpringBoot-实现自动化构建_第5张图片

Docker-Gitlab

  • 更新yum

    yum -y update
    
  • 安装依赖

    yum install -y yum-utils device-mapper-persistent-data lvm2
    
  • 添加镜像

    # 国外镜像
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    # 阿里镜像
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  • 查看源中可使用版本

     yum list docker-ce --showduplicates | sort -r
    
    版本号组成:docker-ce-20.10.9-3.el7
    Jenkins-SpringBoot-实现自动化构建_第6张图片
  • 安装指定版本

    yum install -y docker-ce-20.10.9-3.el7
    
  • 配置开机启动项

    systemctl start docker
    systemctl enable docker
    docker version
    
  • 个人内存分配情况

    内存使用情况
    Jenkins-SpringBoot-实现自动化构建_第7张图片
  • docker添加容器

    docker run --detach \
      --hostname 192.168.247.132 \
      --publish 443:443 --publish 80:80 \
      --name gitlab \
      --restart always \
      --volume $GITLAB_HOME/config:/etc/gitlab:Z \
      --volume $GITLAB_HOME/logs:/var/log/gitlab:Z \
      --volume $GITLAB_HOME/data:/var/opt/gitlab:Z \
      --shm-size 512m \
      registry.gitlab.cn/omnibus/gitlab-jh:latest
    
  • 启动容器

    docker start gitlab
    
  • 进入容器

    docker exec -it  gitlab /bin/bash
    
  • 密码

    用户名: root
    # 容器内部执行
    密码: cat /etc/gitlab/initial_root_password
    
  • 访问很慢,需要等待较长时间

  • 密码修改是同样位置root:administrator

Jenkins

  • 下载war

    网速慢,点击无响应
    Jenkins-SpringBoot-实现自动化构建_第8张图片
  • 也可以使用如下地址下载

    wget https://get.jenkins.io/war-stable/2.361.2/jenkins.war

  • Docker安装

    要使用最新的 LTS: docker pull jenkins/jenkins:lts-jdk11
    要使用最新的每周: docker pull jenkins/jenkins:jdk11
    
  • git下载

    yum install -y git
    
  • war包启动

    # 注意下载的 jenkins 是否正常以 .war 结尾 &: 后台启动
    运行命令 java -jar jenkins.war --httpPort=8080 & 
    打开浏览器进入链接 http://localhost:8080
    
  • 查看密码

    cat /root/.jenkins/secrets/initialAdminPassword
    Jenkins-SpringBoot-实现自动化构建_第9张图片
  • 选择安装推荐的插件

  • 安装maven插件

    入口 选择:Install Without restart
    Jenkins-SpringBoot-实现自动化构建_第10张图片 Jenkins-SpringBoot-实现自动化构建_第11张图片
  • 创建构建项目

    • 选择创建maven项目

    • 填写git地址

      错误
      Jenkins-SpringBoot-实现自动化构建_第12张图片

      只需要将地址修改为: http://root:[email protected]/gitlab-instance-b5cc0499/first-app-gitlab.git

      root:administrator是登录gitlab的账户和密码也就是gitlabgit用户名和密码

    • 修改拉取分支名称

      修改分支名称
      Jenkins-SpringBoot-实现自动化构建_第13张图片
    • 配置maven环境

      点击如下 选择已安装的MAVEN环境
      Jenkins-SpringBoot-实现自动化构建_第14张图片 Jenkins-SpringBoot-实现自动化构建_第15张图片
    • 根据项目中pom.xml设定

      添加项目前缀(根据实际内容填写) 直接在仓库根目录则不需要添加
      Jenkins-SpringBoot-实现自动化构建_第16张图片 Jenkins-SpringBoot-实现自动化构建_第17张图片
    • 构建结果

      构建结果 编译最终包的位置
      Jenkins-SpringBoot-实现自动化构建_第18张图片 Jenkins-SpringBoot-实现自动化构建_第19张图片
    • 访问项目

      启动项目:由于jenkins默认8080,配置文件未修改端口,可通过--server.port=8081指定 访问项目
      Jenkins-SpringBoot-实现自动化构建_第20张图片 Jenkins-SpringBoot-实现自动化构建_第21张图片

JDK

  • 检索可用包

    yum search java|grep jdk
    
  • 安装

    # 17
    yum install -y java-11-openjdk
    yum install -y java-11-openjdk-devel
    
    # 1.8
     yum install -y java-1.8.0-openjdk
     yum install -y java-1.8.0-openjdk-devel
    
  • 确定安装路径

    # 查询 java
    whereis java
    # 根据软连接查找(bin/二进制文件)
    ls -lrt /usr/bin/java
    # 获取软连接的位置
    ls -lrt /etc/alternatives/java
    
    > /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64/jre/bin/java
    
    JAVA_HOME
    Jenkins-SpringBoot-实现自动化构建_第22张图片
  • 版本信息查看

    只能使用java --version,而不能是java -V
    Jenkins-SpringBoot-实现自动化构建_第23张图片
  • 添加环境变量

    vim /etc/profile
    
    # 末尾添加
    export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.17.0.8-2.el7_9.x86_64/
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    
  • 使环境变量生效

    source /etc/profile
    

自动化构建

  • 插件安装

    Publish Over SSH
    Jenkins-SpringBoot-实现自动化构建_第24张图片
  • 配置Post Steps

    入口 配置Post Steps
    Jenkins-SpringBoot-实现自动化构建_第25张图片 Jenkins-SpringBoot-实现自动化构建_第26张图片
  • 生成ssh

    [root@localhost .ssh]# 目录位置
    # (gitlab 的有效默认是此邮箱)
    ssh-keygen -t rsa -b 2048 -C "[email protected]"
    eval $(ssh-agent -s)
    ssh-add id_rsa
    

    gitlab服务器上配置公钥: 头像 -> 偏好设置 ->SSH密钥

    # 添加配置
    vim config
    #-------------------------------------#
    Host gitlab.com
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa
    
    # 测试连通性
    ssh -T [email protected]
    
    [root@localhost .ssh]# chmod 700 ~/.ssh
    [root@localhost .ssh]# touch authorized_keys
    [root@localhost .ssh]# chmod 600 ~/.ssh/authorized_keys
    [root@localhost .ssh]# cat id_rsa.pub >authorized_keys 
    [root@localhost .ssh]# 
    
  • 添加私钥

    SSH Server配置 gitlab服务器生成的SSH私钥
    Jenkins-SpringBoot-实现自动化构建_第27张图片 Jenkins-SpringBoot-实现自动化构建_第28张图片

    说明: gitlab的默认用户名是root,只有密码是自定义的,所以gitlabgit账户信息只能是root[用户名]/自定义密码

  • 默认邮箱修改位置

    邮箱配置
    Jenkins-SpringBoot-实现自动化构建_第29张图片
  • 配置Post Steps后续

    服务器传输文件
    Jenkins-SpringBoot-实现自动化构建_第30张图片
    添加路径测试
    Jenkins-SpringBoot-实现自动化构建_第31张图片
  • 自动部署

    • 检测是否已经安装

      # 已安装
      [root@localhost ~]# nohup --version
      nohup (GNU coreutils) 8.22
      Copyright (C) 2013 Free Software Foundation, Inc.
      许可证:GPLv3+:GNU 通用公共许可证第3 版或更新版本。
      本软件是自由软件:您可以自由修改和重新发布它。
      在法律范围内没有其他保证。
      
      由Jim Meyering 编写。
      [root@localhost ~]# 
      
      
    • 下载nohub

      [root@localhost target]#  yum install coreutils
      
    • 配置环境变量

      [root@localhost ~]# vim ~/.bash_profile 
      
      	PATH=$PATH:$HOME/bin:/usr/bin/
      
      [root@localhost ~]# source ~/.bash_profile 
      
      
    • 启动测试

      • 远程服务器新建文件

        [root@localhost] vim startadmin.sh
        
        #!/bin/bash
        BUILD_ID=dontKillme
        # 传输后远程服务器中的 jar 文件位置
        JAR_NAME=/root/springboot/target/*.jar
        PID=`ps -ef | grep ${JAR_NAME} | grep -v grep | grep -v startup | awk '{print \$2}'`
        echo $PID;
        if [ ! "$PID" ] ;then
             echo "no exis"
        else
            echo "exis pid,kill PID: $PID"
            kill -9 $PID
        fi
        echo "service starting..........."
        /usr/bin/nohup /root/zulu8/bin/java -jar $JAR_NAME >mylog.log 2>&1 &
        
        [root@localhost] chmod 777 startadmin.sh
        
      • 选择执行脚本

        sh /root/startadmin.sh
        Jenkins-SpringBoot-实现自动化构建_第32张图片
  • 构建前置清理脚本(Pre Steps)

    • 选择

      选择如下
      Jenkins-SpringBoot-实现自动化构建_第33张图片
    • 创建脚本

      #!/bin/bash
      
      # 删除历史数据
      rm -rf springboot
      rm -rf mylog.log
      
      appname=$1
      # 获取传入的参数
      echo "arg:$1"
      
      
      # 获取正在运行的jar包pid
      pid=`ps -ef | grep $1 | grep 'java -jar' | awk '{printf $2}'`
      
      echo $pid
      
      # 如果pid为空,提示一下,否则,执行kill命令
      if [ -z $pid ];
      # 使用 -z 做空值判断
              then
                      echo "$appname not started"
      
              else
                     kill -9 $pid
                      echo "$appname stoping...."
      
      check=`ps -ef | grep -w $pid | grep java`
      if [ -z $check ];
      
              then
                      echo "$appname pid:$pid is stop"
              else
                      echo "$appname stop failed"
      
      fi
      
      
      fi
      
      
    • 执行脚本

      ./preSteps.sh gitlab[项目关键字]

    提交时自动触发构建

    • 选择配置

      选择构建触发器如下选项 测试是否触发
      Jenkins-SpringBoot-实现自动化构建_第34张图片 Jenkins-SpringBoot-实现自动化构建_第35张图片
    • 添加插件Build Authorization Token Root(解决匿名登录使用)

      Build Authorization Token Root
      Jenkins-SpringBoot-实现自动化构建_第36张图片

      插件使用的方式: Http GET or POST to buildByToken/build?job=NAME&token=SECRET.

    • 插件访问测试

      http://192.168.2.3:8080/buildByToken/build?job=first-app&token=admin
      Jenkins-SpringBoot-实现自动化构建_第37张图片
    • gitlab做以下配置

      配置(图:gitlab-webhooks)
      Jenkins-SpringBoot-实现自动化构建_第38张图片
      • 以下信息的解决方案

        !
        Jenkins-SpringBoot-实现自动化构建_第39张图片
        • 解决

          左上角菜单 -> 管理员 -> 设置 -> 网络 -> 出站请求(选择后保存)
          Jenkins-SpringBoot-实现自动化构建_第40张图片
        • 再次添加图: gitlab-webhooks的配置流程后保存

定时构建

  • 网站推荐: https://crontab.guru/

    定时理解
    Jenkins-SpringBoot-实现自动化构建_第41张图片
  • 理解

    第一个 * 表示每个小时的第几分钟,取值0~59
    
    H * * * *
    H:每小时执行一次
    
    第二颗 * 表示小时,取值0~23
    
    * 15 * * * 表示每天下午3点
    * 1 * * *  表示每天凌晨1点
    
    第三颗 * 表示一个月的第几天,取值1~31
    * 1 5 * *  表示每月5日凌晨1点
    
    第四颗 * 表示第几月,取值1~12
    * 15 5 1 *  表示每年几月执行
    
    第五颗 * 表示一周中的第几天,取值0~7,其中0和7代表的都是周日
    
    
  • /:表示每隔多长时间,比如 */10 * * * * 表示 每隔10分钟

  • H

    hash散列值,以job名取值,获取到以job名为入参的唯一值,相同名称值也相同,这个偏移量会和实际时间相加,获得一个真实的运行时间
    
    意义在于:不同的项目在不同的时间运行,即使配置的值是一样的,比如 都是`15 * * * * ` ,表示每个小时的第15分钟开始执行任务,那么会造成同一时间内在Jenkins中启动很多job,换成`H/15 * * * *`,那么在首次启动任务时,会有随机值参与进来,有的会在17分钟启动 有的会在19分钟启动,随后的启动时间也是这个值。这样就能错开相同cron值的任务执行了。
    
    H的值也可以设置范围
    
    `H * * * *`表示一小时内的任意时间
    
    `*/10 * * * *`每10分钟
    
    `H/10 * * * *`每10分钟,可能是7,17,27,起始时间hash,步长不变
    
    `45 3 * * 1-6 ` 每个周一至周六,凌晨3点45 执行1次
    
    `45 3-5 * * 1-6 ` 每个周一至周六,凌晨3点45 ,凌晨4点45,凌晨5点45 各执行1次
    
    `H(40-48) 3-5 * * 1-6 ` 在40~48之间取值 其他同上
    
    `45 3-5/2 * * 1-6 ` 每个周一至周六,凌晨3点45 ,凌晨5点45 各执行1次
    
    ` 45 0-6/2 * * 1-6 * * 1-6 ` 0点开始,每间隔2小时执行一次 0:45、2:45、4:45
    
  • 几种构建方式

    • 快照依赖构建: 当依赖的快照被构建时执行本job
    • 触发远程构建(例如: 使用脚本)
    • 定时构建: 使用cron表达式定时构建本job
    • github提交代码时触发jenkins自动构建
    • 定期检查代码变更Poll SCM:使用cron表达式定时检查代码变更,变更后构建脚本job

邮箱通知

  • 密钥

    JRWJIHADWXTPUHYB
    Jenkins-SpringBoot-实现自动化构建_第42张图片
  • 系统设置中Jenkins Location,添加发送方邮箱地址

  • 网易服务

    下图位置: 设置中
    Jenkins-SpringBoot-实现自动化构建_第43张图片
  • 添加凭证用户信息

    配置项: Extended E-mail Notification 添加
    Jenkins-SpringBoot-实现自动化构建_第44张图片 Jenkins-SpringBoot-实现自动化构建_第45张图片
  • 再配置下触发器Default Triggers

  • 邮件通知

    基础配置
    Jenkins-SpringBoot-实现自动化构建_第46张图片
  • 项目配置中

    添加邮箱配置 配置触发器
    Jenkins-SpringBoot-实现自动化构建_第47张图片 Jenkins-SpringBoot-实现自动化构建_第48张图片
  • 接收方邮件信息填写说明: 测试发送时填写的接收方

你可能感兴趣的:(Java,jenkins,spring,boot,自动化)