美文网首页Java
linux操作集-通过jekins+maven+git+ngin

linux操作集-通过jekins+maven+git+ngin

作者: 爱编程的凯哥 | 来源:发表于2018-12-20 22:18 被阅读51次

    需求

    多台服务器,实现自动化部署,jekins作为部署工具,maven做为编译工具,git作为代码管理仓库,nginx作为负载前置

    开始

    安装环境
    1. 下载jekins
    2. 安装jdk
    3. 安装git
    4. 安装maven私服
    5. 安装nginx
    6. 组装调试

    先说安装jekins和jdk

    1. 官网https://jenkins.io/download/下载jekins,此处选用war版,各系统通用.

    2.上传刚才下载的war包

    scp jenkins.war  root@172.16.231.134:/jekins
    

    3 .安装jdk,通过官网https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载,可以直接下载rpm包如

    image.png

    下载完成后上传到服务器

    scp jdk-8u191-linux-x64.rpm  root@172.16.231.134:/jekins
    

    安装jdk

    #当然一般情况下yum install java就好
    rpm -ivh jdk-8u191-linux-x64.rpm  
    

    查看java安装目录和版本号

    java -verbose
    java -version
    
    1. 下载tomcat7,暂时jekins支持到此版本,上传到服务器,我是通过vagrant部署的虚拟机,所以实际挂载是同构vagrant管理,只需要把文件拖入挂载点即可
    1. 本地虚拟机,关闭防火墙
    systemctl stop firewalld.service
    systemctl disable firewalld.servic
    
    1. 将jekins.war放到tomcat的wepaaps下,启动tomcat,进入项目,此时会让你输入密钥,按其指示的文件就可以找到(如果找不到密码,可以通过find / -name initialAdminPassword命令找到文件,如54bf32b3a8334a86b5842257b75d8e88),进入后,我选择标准安装


      image.png

    7.下面继续创建账号,可以先不用就用刚才的admin,但密码就是刚才那一长串,然后进入,就可以创建项目了


    image.png
    1. jekins安装完成后,我们说git服务器,我git采用阿里云的免费版gitlib,地址
      https://code.aliyun.com,可用淘宝账号登录,客户端采用sourcetree,

    2. maven 安装,下面该安装maven私服了,先安装maven

    #首先安装maven
    wget /apps http://mirror.bit.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
    
    tar -zxvf apache-maven-3.3.9-bin.tar.gz
    
    #配置maven环境
    vi /etc/profile
    
    #文件中添加
    export M2_HOME=/apps/apache-maven-3.3.9
    export PATH=$PATH:$M2_HOME/bin
    
    #然后发布
    source /etc/profile
    
    #测试
    mvn -version
    
    #修改settings中指定仓库位置
    
    mkdir /apps/mvn-repo
    
    #在settings中指定仓库地址,添加如下
    #<localRepository>/apps/mvn-repo</localRepository>
    
    
    
    1. 下面安装nexus,http://www.sonatype.org/nexus/archived/ 下载所需要的版本
    #下载完后解压
    tar -zxvf nexus-3.7.1-02-unix.tar.gz 
    #解压后有两个文件夹
    #nexus-3.7.1-02 是nexus的核心文件
    #sonatype-work maven下载jar存放地址
    
    #修改nexus的默认端口号,我采用的是3.7的版本,配置在etc中,老版本在conf下
    cd /usr/local/nexus/etc
    vi nexus-default.properties  
    
    #记得一定要先配置好M2_HOME路径,否则容易报错
    #启动nexus
    /apps/nexus-3.7.1-02/bin/nexus start
    #查看状态
     /apps/nexus-3.7.1-02/bin/nexus status
    #先说running表示成功,此时输入http://127.0.0.1:8081先说nexus页面表示成功
    
    1. 安装nginx
    #我一样采用最简单的yum安装
    #加入nginx.repo
    vim /etc/yum.repos.d/nginx.repo
    
    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=0
    enabled=1
    
    
    #安装
    yum install nginx
    
    #启动nginx
    systemctl start nginx
    
    #查看nginx状态
    ps -fe|grep Nginx
    #显示root      4641     1  0 07:56 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
    #配置文件在/etc/nginx/nginx.conf,后续我们会修改此文件做相关操作
    
    1. 组装调试

    a. 配置jenkins额外的插件


    image.png

    安装插件

    • Maven Integration
    • Git plugin

    b. 配置全局工具


    image.png image.png

    首先配置maven路径,使用settings改为我们刚才的maven配置文件地址


    image.png

    c. 新建项目,我选择自由风格,毕竟我通过脚本控制


    image.png

    配置git管理代码方式


    image.png

    新增认证信息

    image.png
    cd ~/.ssh
    #查看服务器公钥,拷贝到git服务器上
    cat id_rsa.pub
    
    #查看私钥,拷贝到jenkins中
    cat id_rsa 
    

    公钥拷到对应阿里云gitlib上


    image.png

    配置jenkins凭证


    image.png

    如上,拷贝服务器私钥到此,点击添加ok

    image.png

    点击Pre Steps


    image.png

    此处一会放置构建脚本使用。

    下面,我习惯性的把jenkins的工作空间改到了我指定的目录,

    vi /root/.jenkins/config.xml 
    
    #找到 <workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULL_NAME}</workspaceDir> 改成
    <workspaceDir>/jenkins/workspace/${ITEM_FULL_NAME}</workspaceDir>
    
    # 创建工作目录
    mkdir /jenkins
    

    然后重启jenkins

    d. 下面配置我们的两个脚本文件,因为我们模拟的是tomcat和jenkins在一个服务器上,所以,我们的maven先忽略私服的问题,且本地jar包只需install到本地即可。因此我们有以下两个脚本
    install.sh----本地打包jar使用

    #!/bin/sh -
    
    set -x
    
    targetName=${project_name}
    
    export BUILD_ID=deploy_id_${targetName}
    
    workspace=`find /jenkins/   -name  ${JOB_NAME}`
    if [ -d ${webName} ]
    then
            echo "workspace is exists ${workspace}" > /dev/null
            `cd ${webName}`
            mvn clean install -Dmaven.test.skip=true
            if [ $? -eq 0 ]
            then
                    echo "本地打包${targetName}完成" > /dev/null
            else
                    echo  "本地打包${targetName}失败" > /dev/null
                    exit 1
            fi
    else
            echo "workspace is not exists ${workspace}" > /dev/null
    fi
    ~  
    

    deplay_war.sh 构建项目,启动tomcat服务

    #!/bin/sh -
    
    set -x
    
    
    targetName=${project_name}
    targetWar=
    base_tomcat=
    port=${port}
    tomcat_name="tomcat-${project_name}-${port}"
    tomcat_target=
    
    export BUILD_ID=tomcat_deploy_id_${tomcat_name}
    
    workspace=`find /jenkins/   -name  ${JOB_NAME}`
    
    echo "$M2_REPO" 
    
    if [ -d ${workspace} ]
    then 
        echo "workspace is exists ${workspace} \n" > /dev/null
    
        cd ${workspace}
    
        mvn clean install -Dmaven.test.skip=true 
        if [ $? -eq 0 ]
        then
            echo "本地打包${targetName}完成 \n" > /dev/null
        else
            echo  "本地打包${targetName}失败 \n" > /dev/null
            exit 1
        fi
    else 
        echo "workspace is not exists ${workspace} \n" > /dev/null
    fi
    
    
    targetWar=`find  /apps/mvn-space  -name $targetName*.war`
    
    
    if [ -n "${targetWar}" ]
    then 
        echo "echo ${targetWar} build success, start tomcat "
    else
        echo "echo ${targetWar} is not exists,部署失败\n"
        exit 1
    fi
    
    
    
    # # # 清除空间内的basetomcat
    rm -rf tomcat-base
    #捡出tomcat
    git clone git@code.aliyun.com:tlgj704/tomcat-base.git
    # #
    base_tomcat=`find /jenkins/ -name tomcat-base`
    
    if [ -d "${base_tomcat}" ]
    then
        echo "base_tomcat is ${base_tomcat}"
    else
        echo "未找到base_tomcat,部署失败"
        exist 1
    fi
    #将war拷贝到base-tomcat中
    cp ${targetWar}  ${base_tomcat}/webapps/${targetName}.war
    
    pushd ${base_tomcat}/conf/
    
    #更新tomcat端口
    `sed -i "s/8080/${port}/g" server.xml`
    
    pushd 
    
    #查找原有tomcat是否在运行
    tomcat_target=`find /apps/ -name ${tomcat_name}`
    
    if [  -d "${tomcat_target}" ]
    then 
        #找到旧tomcat,将会先杀4死旧服务
        echo "${tomcat_name} arealy  exists ,will stop ,and remove \n"
    
        #查找原有服务
        oldPid=`lsof -i:${port} | grep java |awk -F " " '{ print $2}' `
    
        #如果原服务存在,先杀死原服务
        if [ -n "${oldPid}" ]
            then
                `kill -9 "${oldPid}"`
            else
                echo "old pid is null\n"
            fi
    
        rm -rf ${tomcat_target}
        
    else
        #没找到旧tomcat,将会创建新服务
        echo "${tomcat_name}  not exist,create new tomcat\n"
    fi
    
    cp -r ${base_tomcat}  /apps/${tomcat_name}
    
    #启动服务
    sh /apps/${tomcat_name}/bin/startup.sh 
    
    
    #删除临时tomcat
    rm -rf ${base_tomcat}
    
    echo "部署工程${JOB_NAME}完成"
    
    sleep 5
    
    exit 0
    
    
    

    将两个脚本文件我放到了/jenkins/script目录下,下面配置jenkins使用。

    e . 配置工程
    首先,我配置完刚才的父pom工程,记得脚本中的export project_name=wechant-sdk指定当前工程jar包名即可

    image.png

    配置完git后,如上图,配置调用脚本信息即可,点击构建


    image.png

    如上,构建完成了,然后我们配置wab服务的工程job

    注:如果此时你的linux报错No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
    可以参考 https://stackoverflow.com/questions/26313902/maven-error-perhaps-you-are-running-on-a-jre-rather-than-a-jdk 内容,大意就是maven打包时需要jdk,你的环境可能只配了jre,需要安装jdk,我的操作是如下

    #不同版本可能不一样,我是ubuntu的
    apt-get install openjdk-8-jdk 
    

    下面说web工程的脚本,project_name是war工程名

    此时用到的就发布的脚本,构建成功,就表示tomcat启动完成。恭喜我们完成了一大步。


    image.png
    1. 下面我们部署两个web服务,然后通过nginx进行负载均衡,实现热备的方式
      来实现不停机发布

    。。。

    相关文章

      网友评论

        本文标题:linux操作集-通过jekins+maven+git+ngin

        本文链接:https://www.haomeiwen.com/subject/hgzukqtx.html