• 【运维知识高级篇】超详细的Jenkins教程3(Maven项目上线全流程)


    上篇文章给大家介绍了Maven编译的内容,讲解了用Jenkins如何去集成Maven,这篇文章给大家介绍另一个的Maven项目,实现gitlab提交代码后,自动进行Maven编译,自动推送至web主机进行代码上线的效果。

    一、主机介绍

    主机名IP
    Web0110.0.0.7
    Jenkins10.0.0.201

    二、在Web主机部署Tomcat和数据库

    1、安装JDK

    rz jdk-8u181-linux-x64.rpm
    rpm -ivh jdk-8u181-linux-x64.rpm
    
    • 1
    • 2

    2、安装Tomcat

    rz apache-tomcat-8.0.27.tar.gz
    tar zvxf apache-tomcat-8.0.27.tar.gz
    mv /application/apache-tomcat-8.0.27 /usr/local/tomcat
    
    • 1
    • 2
    • 3

    3、修改Tomcat配置提升启动速度

    vim /usr/java/jdk1.8.0_181-amd64/jre/lib/security/java.security
    第117行修改为  securerandom.source=file:/dev/urandom
    
    • 1
    • 2

    4、启动Tomcat

    /usr/local/tomcat/bin/startup.sh
    
    • 1

    5、安装数据库

    yum -y install mariadb
    systemctl start mariadb.service 
    mysql_secure_installation
    mysqladmin -uroot password 'root'
    mysql -uroot -proot -e 'create database jeesns;'
    
    # 下面我把jeesns的代码包放到web服务器了,正常情况下,如果代码在jenkins服务器,可以scp把sql文件拷贝过来,再执行sql
    rz jeesns.tar.gz
    tar xf jeesns.tar.gz -C /opt/
    mysql -uroot -p1 jeesns < /opt/jeesns/jeesns-web/database/jeesns.sql
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    三、部署war包,简单展示Web页面

    jeesns.tar.gz 下载链接放到文末了

    [root@Jenkins ~]# tar xf jeesns.tar.gz -C /opt/
    [root@Jenkins ~]# cd /opt/jeesns/
    [root@Jenkins jeesns]# mvn clean
    [root@Jenkins jeesns]# mvn package
    [root@Jenkins jeesns]# scp target/jeesns-web.war 10.0.0.7:/usr/local/tomcat/webapps/ROOT
    [root@Jenkins jeesns-web]# ssh 10.0.0.7 'cd /usr/local/tomcat/webapps/ROOT && unzip jeesns-web.war && /usr/local/tomcat/bin/shutdown.sh && /usr/local/tomcat/bin/startup.sh '
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    等tomcat完全启动后,浏览器访问10.0.0.7的端口,就可以访问到了

    在这里插入图片描述

    四、新建Gitlab项目并推送代码

    在这里插入图片描述

    在这里插入图片描述

    记录此处的镜像源,一会儿要在Jenkins里面用

    在这里插入图片描述

    按照指令提示执行这两个部分的命令

    在这里插入图片描述

    [root@Gitlab ~]# git config --global user.name "Administrator"
    [root@Gitlab ~]# git config --global user.email "admin@example.com"
    [root@Gitlab ~]# cd /data/jeesns/
    [root@Gitlab jeesns]# git remote rename origin old-origin
    [root@Gitlab jeesns]# git remote add origin git@10.0.0.200:root/JEESNS.git
    [root@Gitlab jeesns]# git push -u origin --all
    [root@Gitlab jeesns]# git push -u origin --tags
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    刷新浏览器可以看到上传的代码

    在这里插入图片描述

    在这里插入图片描述

    五、配置Jenkins

    1、新建Maven项目并进行配置

    在这里插入图片描述
    在这里插入图片描述

    配置丢弃旧的构建

    在这里插入图片描述

    配置参数化构建
    在这里插入图片描述

    配置镜像源,此处报红色错误,可能是需要做jenkins到gitlab服务器的免密钥,配置通过版本号拉取代码

    在这里插入图片描述
    配置构建触发器

    在这里插入图片描述

    填写master,配置推送请求的规则,只有包含master字样的名称才会推送,点击Generate生成秘钥,将此秘钥记录下来
    在这里插入图片描述

    添加clean package指令,和执行指定位置的构建脚本的构建步骤

    在这里插入图片描述

    最终点击保存,点击保存后,将刚刚自动构建的秘钥复制到gitlab

    在这里插入图片描述

    六、编写脚本

    在Jenkins中构建步骤指定的位置编写脚本。

    [root@Jenkins ~]# cat /server/scripts/maven_JEESNS.sh
    #!/bin/sh
    DATE=$(date +%Y-%m-%d-%H-%M-%S)
    CODE_DIR="/var/lib/jenkins/workspace/JEESNS"
    WEB_DIR="/usr/local/tomcat/webapps"
    
    get_code_scp(){
            ssh 10.0.0.7 "cd $WEB_DIR && mkdir java-${git_version}"
            cd $CODE_DIR && scp jeesns-web/target/*.war 10.0.0.7:$WEB_DIR/java-${git_version}
    }
    
    
    code_tarxf(){
            ssh 10.0.0.7 "cd $WEB_DIR/java-${git_version} &&  unzip *.war && rm -rf *.war"
    
    }
    ln_html(){
             ssh 10.0.0.7 "cd $WEB_DIR/  && rm -rf ROOT && ln -s  java-${git_version} ROOT  && /usr/local/tomcat/bin/shutdown.sh && /usr/local/tomcat/bin/startup.sh"
    }
    
    main(){
    
            get_code_scp;
            code_tarxf;
            ln_html;
    }
    if [ "$deploy_env" == "deploy" ];then
            if [ "$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
                echo "构建失败该 $git_version 版本号已部署"
            else
            main
            fi
    elif [ "$deploy_env" == "rollback" ];then
            ln_html
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    七、测试Maven项目上线全流程

    1、修改代码

    [root@Gitlab jeesns]# vim jeesns-web/src/main/webapp/WEB-INF/templates/front/index.ftl 
    ...
                        
    推荐阅读v1.0
    ...
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2、推送代码

    [root@Gitlab jeesns]# git add .
    [root@Gitlab jeesns]# git commit -m "v1.0"
    [root@Gitlab jeesns]# git tag -a v1.0 -m "v1.0"
    [root@Gitlab jeesns]# git push -u origin v1.0
    
    • 1
    • 2
    • 3
    • 4

    3、Jenkins选择版本部署
    在这里插入图片描述
    在这里插入图片描述
    可以看到构建成功(因为马虎失败了两次,所以序号显示3)
    在这里插入图片描述
    4、查看v1.0部署效果并再次修改代码,推送代码,用Jenkins部署新版本
    在这里插入图片描述

    [root@Gitlab jeesns]# vim jeesns-web/src/main/webapp/WEB-INF/templates/front/index.ftl 
    ...
                        
    推荐阅读v2.0
    ... [root@Gitlab jeesns]# git add . [root@Gitlab jeesns]# git commit -m "v2.0" [root@Gitlab jeesns]# git tag -a v2.0 -m "v2.0" [root@Gitlab jeesns]# git push -u origin v2.0
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    5、查看v2.0部署效果,并回滚v1.0查看效果

    v2.0更改成功!

    在这里插入图片描述

    回滚的话是比较快的,不用去拉取代码,其实没有deploy和rollback的选项也可以,可以根据代码仓库与现有版本的版本号的大小去判断是部署还是回滚,除非是部署之前的版本,然后之前的版本也需要去代码仓库拉取代码,这种情况应该很少。
    在这里插入图片描述
    可以在此处查看

    在这里插入图片描述
    也可以在web后端服务器查看

    [root@Web01 webapps]# ll
    total 4
    drwxr-x--- 16 root root 4096 Jun 30 10:44 docs
    drwxr-x---  7 root root   99 Jun 30 10:44 examples
    drwxr-x---  6 root root   79 Jun 30 10:44 host-manager
    drwxr-xr-x  5 root root  126 Sep 28 15:40 java-v1.0
    drwxr-xr-x  5 root root  104 Sep 28 15:50 java-v2.0
    drwxr-x---  6 root root  114 Jun 30 10:44 manager
    lrwxrwxrwx  1 root root    9 Sep 28 15:57 ROOT -> java-v1.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    也可以在页面上查看效果,就是tomcat重启太慢了,页面效果要等好久

    在这里插入图片描述

    也可以做个通知机制,企业微信给开发通知,等等吧,方式很多。


    Maven项目练手代码下载链接:https://pan.baidu.com/s/1ifkGhh34uxhoTqmhf7e1lg?pwd=8464
    我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

  • 相关阅读:
    io_uring 之 liburing 的简单使用
    循环神经网络(Recurrent Neural Network)
    笔面试学习——ARM体系与结构
    我和谷歌共成长-资深安卓开发的转型之路
    【Svelte】-(7)绑定|Each 块绑定 / audio video 媒体标签绑定 / client offset 尺寸绑定 / this / 组件绑定
    【C++】泛型编程 ⑥ ( 类模板 | 类模板语法 | 代码示例 )
    2022 【SPDK原理最新视频讲解】
    数据库系统原理与应用教程(058)—— MySQL 练习题(二):单选题
    字符函数和字符串函数(下)
    ZED 2i 双目-IMU标定
  • 原文地址:https://blog.csdn.net/qq_37510195/article/details/133377071