zoukankan      html  css  js  c++  java
  • Jenkins发布Java项目

    1.Java项目部署概述
    1.什么是Java项目?
    简单来说就是使用Java编写的代码,我们称为Java项目。
     
    2.为什么Java项目需要maven编译?
    由于Java编写的代码是无法直接在服务器上运行,需要使用maven工具进行打包。
    简单理解:Java源代码就像汽车的一堆散件,必须组装才是一辆完整的汽车。这里的组装汽车可以理解是Maven编译的过程。
     
    3.实现自动化构建Java像目前,线实现手动构建Java项目?
    为什么,首先大家对Java项目不熟悉,首次要想实现自动化发布代码,必须会手动。
    所以我们先拿到一个源码>然后提交到gitlab>使用mvn手动构建>最后推送war至Tomcat发布。(一个完整的发布流程)
     
    手动部署
    1.创建git项目-提交代码(简略)
    git init 
    git remote add origin git@gitlab.precious.com:/devops/hello-world.git
    git add .
    git commit -m "xxx"
    git push -u origin master

    2.手动获取代码,然后使用maven进行编译?

    1.由于maven编译工具需要依赖Java,所以需要先安装jdk
    yum install java -y

    2.安装maven编译工具

    yum install maven -y
    
    
    # 如果需要安装高版本maven,按如下操作
    #1.下载maven
    wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.0/apache-maven-3.6.0-bin.tar.gz
    
    #2.安装maven
    tar xf apache-maven-3.6.0-bin.tar.gz
    mv apache-maven-3.6.0-bin /usr/local/
    ln -s /usr/local/apache-maven-3.6.0-bin/  /usr/local/maven
    /usr/local/maven/bin/mvn -v
    
    #3.配置环境变量
    echo "export PATH=/usr/local/apache-maven-3.6.0-bin/bin/:$PATH" >>/etc/profile
    source /etc/profile
    mvn -v

    3.克隆gitlab代码,然后手动编译成war包

    编译完成后,会生成target目录存放war包

    git clone git@gitlab.precious.com:devops/hello-world.git
    
    cd hello-world
    mvn package -Dmaven.test.skip=true # 跳过测试用例

    配置maven的依赖jar包下载地址

    PS:Java项目在编译过程中,许哟啊安装很多依赖,依赖都会上maven 官方下载。如果项目依赖的jar包较多,网络较差,那可能需要很久的时间。

    PS:建议将下载的地址调整为阿里云,具体操作如下:

    # 查看下maven安装位置下的/conf/settings.xml
    [root@dev java-hello-web]# vim settings.xml
    
    # 在159行左右添加如下内容
    <mirror>
            <id>alimaven</id>
            <name>aliyum maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
            <mirrorOf>central</mirrorOF>
    </mirror>

     4.将编译后的war批量推送至Tomcat集群,然后重启Tomcat

    # 创建备份目录
    mkdir /data/back -p
    # 打包项目目录下的文件
    tar czf tomcat-web-$(date +%Y-%m-%d-%H-%s).tar.gz /usr/local/tomcat/webapps/ROOT/*
    # 备份
    mv /usr/local/tomcat/webapps/ROOT/tomcat-web-$(date +%Y-%m-%d-%H-%s).tar.gz  /data/back/
    # 删除项目目录
    rm -rf /usr/local/tomcat/webapps/ROOT/
    
    # 将maven编译好的war包推送到tomcat并命名为ROOT.war  因为war包会自动解压生成ROOT目录,所以删除ROOT目录
    for i in {7..8};do scp targget/hello-world-war-1.0.0.war root@10.0.0.$i:/usr/local/tomcat/webapps/ROOT.war; done
    
    # 重启tomcat服务
    /usr/local/tomcat/bin/ shutdown.sh && /usr/local/tomcat/bin/startup.sh
    Jenkins半自动部署

     1.Jenkins集成maven插件(详细步骤请查阅Jenkins集成maven插件文章)

     

    安装maven插件,这样才能创建maven 项目

    Maven lntegration

    package -Dmaven.test.skip=true

     2.编写shell脚本将war包推送到tomcat集群

    [root@localhost sh]# vim java_web_update.sh 
    #!/bin/bash
    DATE=$(date +%Y-%m-%d-%H-%s)
    web_server="10.0.0.7 10.0.0.8"
    Sdir=/opt
    Ddir=/code
    Hdir=/usr/local/tomcat/webapps
    Name=${DATE}-${git_version}
    
    #1.进入gitlab项目目录,将内容进行打包
    get_code(){
            #cd /root/.jenkins/workspace/freestyle && 
            #tar czf $Sdir/web-${DATE}.tar.gz ./*
            #cd ${WORKSPACE_TMP}        
            cd ${WORKSPACE}
    }
    
    #2.将内容通过scp拷贝至web集群组 (提前做好免密钥)
    scp_web_server(){
    for i in $web_server
    do
            scp -r target/*.war root@$i:/opt/ROOT-${Ddir}/ROOT-${Name}
            ssh root@$i "mkdir -p ${Ddir}/ROOT-${Name} && 
                               upzip /opt/ROOT-${Ddir}/ROOT-${Name} && 
                               rm -rf ${Ddir}/ROOT && 
                               ln -s ${Ddir}/ROOT-${Name} $ {Ddir}/ROOT && 
                    
    /usr/local/tomcat/bin/shutdown.sh && /usr/local/tomcat/bin/startup.sh"
     done }

    # 回退 back(){
      back_file=$(ssh root@$i "find ${Ddir} -maxdepth 1 -type d -name "ROOT-*-${git_version}"")
      for hosts in $WebServer
      do
        ssh root@${hosts} "rm -rf ${Ddir}/ROOT &&
        ln -s ${Ddir}/ROOT-${DATE}-${git_version} ${Ddir}/ROOT &&
        /usr/local/tomcat/bin/shutdown.sh && /usr/local/tomcat/bin/startup.sh"
      done
    } deploy(){ get_code scp_web_server }
    # 判断该版本是否已部署过
    if [ $deploy_env == "deploy" ];then
      if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then
        echo "你已经部署过该版本 ${git_version} 版本"
        exit
      else
        deploy
      fi
    elif [ $deploy_env == "rollback" ];then
      back
    fi
    [root@localhost sh]
    # chmod +x /data/sh/java_web_update.sh [root@localhost sh]# ll total 4 -rwxr-xr-x. 1 root root 647 Dec 11 10:16 java_web_update.sh

  • 相关阅读:
    [na]ip数据包格式
    [js]浏览器同源策略(same-origin policy)
    [sql] 同库表(结构)的备份和sql聚合&navicat使用
    [svc]tcp三次握手四次挥手&tcp的11种状态(半连接)&tcp的time-wait
    [svc]ip地址划分
    [css]单/多行居中&字体设置
    时间戳转为C#格式时间
    windows 8 中 使用 httpclient
    oralce 查看是否启动 登陆 创建用户 常用命令小记
    SQL递归查询(with cte as)
  • 原文地址:https://www.cnblogs.com/fengyuanfei/p/14495091.html
Copyright © 2011-2022 走看看