Jenkins使用pipline部署JAVA项目到远程服务器

本文介绍了采用Jenkins结合Shell脚本实现自动化部署的过程。通过Jenkinsfile定义发布流程,根据git分支选择不同的服务器进行操作,包括停止服务、更新代码、编译打包和启动服务。同时,文章预告了下篇将探讨Jenkins与Ansible的自动化部署组合。

AI 驱动代码审查实战

Claude code-review 插件深度解析,把 AI 智能审查接进 CI/CD 流水线

内容提要,本篇文章作为Devops系列的第一篇文章所以使用的方案比较“简单”

采用的发布模式:Jenkins使用pipline读取项目的JenkinsFile,在JenkinsFile中判断发布的分支,直接连接远程服务器,在服务器杀掉进程,更新代码,编译打包,运行。

本方案开发环境,因为服务器上有代码进行调整更新,debug之类都比较方便

下一篇文章预告:Jenkins+Ansible 自动化部署

node {
    //Jenkins的maven版本
    def mvnHome = tool 'maven3.6'

    //git分支
    def branchAll = "${env.branch}"
	def branch = "dev"
    if("${branchAll}"=='origin/master'||"${branchAll}"=='origin/dev'){
            def branchOut = branchAll.split("/")
            branch = branchOut[1]
    }

    //连接远程服务器进行发布,部署
    stage ('Pull & Run') {
       def remote = [:]
       remote.name = 'test'
       if("${branch}"=='release'){
       remote.host ='172.168.0.110'
       remote.user = 'root'
       remote.password ='123456'
       }else{
       remote.host ='172.168.0.111'
       remote.user = 'root'
       remote.password ='123456'
       }
       remote.allowAnyHosts= true
       if("${branch}"=='master'){
            writeFile file:'tempStart.sh', text:'''
               kill -9 $(netstat -nlp | grep :8080 | awk '{print $7}' | awk -F"/" '{ print $1 }') 
               if [  -d "xxx" ];then
                    cd /root/xxx
                    git reset --hard
                    git pull
               else
                    git clone -b master ssh://git@xxxxxxx.git
                    cd /root/xxx
               fi
               cd ./xxx/
               echo "编译打包";
               mvn clean install -U
               echo "代码质量检测";
               mvn sonar:sonar  
               cd ./target
               nohup java -jar -Xms512M -Xmx512M  -Dspring.profiles.active=*.jar >/dev/null &  
               if [ $? -eq 0 ]; then
                    echo "模块执行成功";
               else
                    echo "模块执行失败";
               fi
               '''
       }else ("${branch}"=='dev'){
            writeFile file:'tempStart.sh', text:'''
               kill -9 $(netstat -nlp | grep :8080 | awk '{print $7}' | awk -F"/" '{ print $1 }') 
               if [  -d "xxx" ];then
                    cd /root/xxx
                    git reset --hard
                    git pull
               else
                    git clone -b dev ssh://git@xxxxxxx.git
                    cd /root/xxx
               fi
                cd ./xxx/
               echo "编译打包";
               mvn clean install -U
               echo "代码质量检测";
               mvn sonar:sonar  
               cd ./target
               nohup java -jar -Xms512M -Xmx512M  -Dspring.profiles.active=test *-exe.jar >/dev/null &
               if [ $? -eq 0 ]; then
                    echo "模块执行成功";
               else
                    echo "模块执行失败";
               fi
               '''
       }
       sshScript remote: remote,script: "tempStart.sh"
    }
    //发起邮件
    stage("发送邮件"){
        echo "发送邮件"
        emailext body: '''
            <!DOCTYPE html>
            <html>
            <head>
                <meta charset="UTF-8" />
                <title>${ENV, var=&quot;JOB_NAME&quot;}-第${BUILD_NUMBER}次构建日志</title>
            </head>
            <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
                <a href="${PROJECT_URL}">${PROJECT_URL}</a>
                <hr size="2" width="100%" align="center" />
                <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
                    <tbody>
                        <tr>
                            <td>(本邮件由程序自动下发,请勿回复!)</td>
                        </tr>
                        <tr>
                            <td>
                                <h2>
                                    <font color="#FF0000">构建结果 - ${BUILD_STATUS}</font>
                                </h2>
                            </td>
                        </tr>
                        <tr>
                            <td><br /> <b>
                                    <font color="#0B610B">构建信息</font>
                                  </b>
                                <hr size="2" width="100%" align="center" />
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <ul>
                                    <li>项目名称:${PROJECT_NAME}</li>
                                    <li>GIT路径: xxxxxxx</li>
                                    <li>GIT分支: ${branch}</li>
                                    <li>构建编号:${BUILD_NUMBER}</li>
                                    <li>触发原因:${CAUSE}</li>
                                    <li>docker地址:xxxxxx</li>
                                    <li>构建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
                                </ul>
                            </td>
                        </tr>
                        <tr>
                            <td> <b>
                                    <font color="#0B610B">变更信息:</font>
                                  </b>
                                <hr size="2" width="100%" align="center" />
                            </td>
                        </tr>
                        <tr>
                            <td>
                                <ul>
                                    <li>上次构建成功后变化 : ${CHANGES_SINCE_LAST_SUCCESS}</li>
                                    <li>上次构建不稳定后变化 : ${CHANGES_SINCE_LAST_UNSTABLE}</li>
                                    <li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
                                    <li>变更集:${JELLY_SCRIPT}</a></li>
                                </ul>
                            </td>
                        </tr>

                    </tbody>
                </table>
            </body>

            </html>

          ''', subject: '$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!', to: 'xxxx@admin.com.cn'
    }
}

AI 驱动代码审查实战

Claude code-review 插件深度解析,把 AI 智能审查接进 CI/CD 流水线

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值