栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Jenkins Pipeline 部署Java项目示例

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Jenkins Pipeline 部署Java项目示例

一、系统环境
组件版本
Jenkins2.332.2
二、Pipeline示例
pipeline {

    
    //agent any
    agent {
        node {
            //在label为dev1的节点进行部署
            label 'dev1'
        }
    }
    
	//需要使用的系统组件版本,如JDK、MVN,在 系统管理 -> 全局工具配置 中设置
    tools{
        maven '3.8.5'
    }

    
    environment {
        BUILD_USER = "" //项目构建者
        GIT_COMMIT_MSG = "" //GIT提交信息
        GIT_COMMIT_ID = "" //GIT提交ID,可用于标识版本

        
        POM_PATH = "${env.WORKSPACE}/pom.xml" //配置文件路径
        POM_ARTIFACTID = "" //项目名称
        POM_VERSION = "" //项目版本

        JAR_NAME = "" //jar包名称
        JAR_PATH = "${env.WORKSPACE}/target" //生成的jar包路径
        
        JAR_WORK_PATH = "你的程序运行路径" //运行jar的工作路径,统一管理,并需要提前创建好
        
        LOG_PATH = "你的日志统一路径" //日志路径
    }

    
    triggers{
        //每5分钟判断一次代码是否有变化
        pollSCM('H/5 * * * *')
    }

    
    stages {
        
        stage('Preparation') {
            steps {
                //使用build user vars插件,获取构建执行者
                wrap([$class: 'BuildUser']) {
                    script {
                        BUILD_USER = "${env.BUILD_USER}" //将构建执行者注入到环境变量中,方便最后通知使用
                    }
                }

                
                
                git(url: '你的Git地址', branch: 'master', credentialsId: '你的Git凭证')
                script {
                    //执行Git命令获取Git相关信息赋值给全局变量,returnStdout返回命令结果
                    GIT_COMMIT_MSG = sh(script: 'git log -1 --pretty=%B ${GIT_COMMIT}', returnStdout: true).trim()
                    GIT_COMMIT_ID = sh(script: 'git rev-parse --short HEAD', returnStdout: true ).trim()
                }

                
                readPom()
            }
        }

        
        stage('Build'){
            steps{
                
                sh 'mvn -B -DskipTests clean package'
            }

        }

        
        stage('Deliver') {
            steps {
                withEnv(['JENKINS_NODE_COOKIE=background_job']) {
                    sh """
# 停止服务并杀死进程
pid=$(ps -ef | grep ${POM_ARTIFACTID} | grep -v grep | awk '{ print $2 }')
if [ -z "$pid" ]
then
	echo ${POM_ARTIFACTID} is already stopped
else
	echo kill ${POM_ARTIFACTID}
	echo kill -2 ${pid}
	kill -15 ${pid}
fi

# kill需要一定时间,等待10秒
sleep 10

# 创建默认路径
mkdir -p ${JAR_WORK_PATH}
# 移动打包文件
cp -f ${JAR_PATH}/${JAR_NAME} ${JAR_WORK_PATH}
# 将工作目录切换到日志路径执行程序
cd ${LOG_PATH}
# /dev/null 所有写入它的内容都会永远丢失
nohup java -jar ${JAR_WORK_PATH}/${JAR_NAME} >/dev/null 2>>${JAR_WORK_PATH}/sys_error.log &
"""
                }
            }
        }
    }

    post {
        success {
            dingtalk (
                    robot: "dev1_demo",
                    type:'ACTION_CARD',
                    atAll: false,
                    title: "构建成功:${env.JOB_NAME}",
                    //messageUrl: 'xxxx',
                    text: [
                            "### [${env.JOB_NAME}](${env.JOB_URL}) ",
                            '---',
                            "- 任务:[${currentBuild.displayName}](${env.BUILD_URL})",
                            '- 状态:成功',
                            "- 持续时间:${currentBuild.durationString}".split("and counting")[0],
                            "- 执行人:${BUILD_USER}",
                            "- 提交日志: ${GIT_COMMIT_MSG}",
                    ]
            )
        }
        failure{
            dingtalk (
                    robot: "dev1_demo",
                    type:'ACTION_CARD',
                    atAll: false,
                    title: "构建失败:${env.JOB_NAME}",
                    //messageUrl: 'xxxx',
                    text: [
                            "### [${env.JOB_NAME}](${env.JOB_URL}) ",
                            '---',
                            "- 任务:[${currentBuild.displayName}](${env.BUILD_URL})",
                            '- 状态:失败',
                            "- 持续时间:${currentBuild.durationString}".split("and counting")[0],
                            "- 执行人:${BUILD_USER}",
                            "- 提交日志: ${GIT_COMMIT_MSG}",
                    ]
            )
        }
    }
}

def POM_PROJECT_NAME
def POM_VERSION
def POM_ARTIFACTID
def JAR_WORK_PATH
def JAR_NAME

def readPom(){
    def pom = readMavenPom file: "${POM_PATH}" //使用Jenkins插件pipeline-utility-steps读取pom.xml文件,使用方法详见https://www.jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#readmavenpom-read-a-maven-project-file
    POM_PROJECT_NAME = "${pom.artifactId}" + '-' + "${pom.version}" + '.jar'
    POM_VERSION = pom.version

    //设置全局变量
    POM_ARTIFACTID = "${pom.artifactId}"
    JAR_WORK_PATH += POM_ARTIFACTID +"/"
    JAR_NAME = POM_ARTIFACTID + '-' + POM_VERSION + '.jar'
}
三、使用说明

使用如上Pipeline只需要修改三行

        
        JAR_WORK_PATH = "你的程序运行路径" //运行jar的工作路径,统一管理,并需要提前创建好
        
        LOG_PATH = "你的日志统一路径" //日志路径
		......
		
        
        git(url: '你的Git地址', branch: 'master', credentialsId: '你的Git凭证')		

程序会自动调用readPom函数,获取Pom中的配置。
如果前端需要部署,可以修改readPom为readPackage函数,替换对应的变量和命令即可

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/972423.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号