#!groovy
def oper_checkout(SCM_TYPE,SCM_URL,SCM_AUTH_PASS,SCM_BRANCH=' ',SCM_AUTH_USER=' '){
if (SCM_TYPE =='git') {
return checkout([$class: "GitSCM", branches: [[name: "${SCM_BRANCH}"]], \
doGenerateSubmoduleConfigurations: false, extensions: [], \
submoduleCfg: [], userRemoteConfigs: [[credentialsId: "${SCM_AUTH_PASS}", \
url: "${SCM_URL}"]]])
}
else if (SCM_TYPE == 'tfs' ) {
// need SCM_AUTH_USER args
return checkout(changelog: false, poll: false, scm: [$class: 'TeamFoundationServerScm', \
password: new hudson.util.Secret("$SCM_AUTH_PASS"), projectPath: "${SCM_BRANCH}", \
serverUrl: "${SCM_URL}", useOverwrite: true, useUpdate: true, userName: "$SCM_AUTH_USER", \
workspaceName: 'Hudson-${JOB_NAME}'])
}
else if (SCM_TYPE == 'svn' ){
return checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', \
excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', \
locations: [[cancelProcessOnExternalsFail: true, credentialsId: "${SCM_AUTH_PASS}",\
depthOption: 'infinity', ignoreExternalsOption: true, local: '.', \
remote: "${SCM_URL}" ]], \
quietOperation: true, workspaceUpdater: [$class: 'CheckoutUpdater']])
}
}
pipeline { environment { // define output packagename
sourcefile="project_name"
//Tomcat Home Path SCM_TYPE = 'git'
SCM_URL = 'gitutl'
SCM_AUTH_PASS = 'jenkins_auth'
SCM_BRANCH = 'dev'
SCM_AUTH_USER = ' ' // build cmd
BUILD_CMD = 'mvn clean package' // define app env START_CMD = '/opt/apache-tomcat-8.5.34/bin/startup.sh'
STOP_CMD = '/opt/apache-tomcat-8.5.34/bin/shutdown.sh' APP_PATH = '/opt/apache-tomcat-8.5.34/webapps/ROOT' // Not need often change
zipfile="${sourcefile}.zip"
outfile="${sourcefile}.war" }
tools {
maven 'maven3'
jdk 'jdk-8'
}
agent { label 'master' } options {
buildDiscarder(logRotator(numToKeepStr: '30', artifactNumToKeepStr: '30' ))
}
stages{
stage('checkout'){
steps{
oper_checkout(SCM_TYPE,SCM_URL,SCM_AUTH_PASS,SCM_BRANCH,SCM_AUTH_USER)
}
}
stage('build'){
steps{
sh """
${BUILD_CMD};
"""
// sh """ // find target -name '*.war' | xargs -i mv {} target/${sourcefile}-1.0.jar
// """
script{
rvfind = sh returnStdout: true,script: "find target -name '${sourcefile}*.war'" if (rvfind == ''){
outfile = "${sourcefile}.jar"
rvfind = sh returnStdout: true, script: "find target -name '${sourcefile}*.jar'"
} rvfind = rvfind.trim()
sh """
if test ! -d ${sourcefile};then mkdir ${sourcefile};else rm -rf ${sourcefile}/* ; fi;
"""
if (outfile.contains('war')){
sh """
unzip -q ${rvfind} -d ${sourcefile};
"""
} else {
sh " cp ${rvfind} ${sourcefile}/;"
}
sh ""
} script {
if (outfile.contains('war')){
if (APP_PATH.contains('ROOT')) {
sh """
cd ${sourcefile};
zip -qry $zipfile .;
cd .. && mv ${sourcefile}/$zipfile .;
"""
}else{
sh """
zip -qry $zipfile ${sourcefile};
"""
}
} else {
sh """
cd ${sourcefile};
zip -qry $zipfile .;
cd .. && mv ${sourcefile}/$zipfile .;
"""
}
}
stash includes: "$zipfile", name: "$zipfile"
}
}
stage('service oper'){
agent { label '192.168.8.105'}
steps{
sh 'rm -rf ./*'
unstash "$zipfile"
sh '''
echo "Normal Stop Process ...";
sudo su -c "$STOP_CMD" && echo 'Process Stop Success' || echo 'Process Stop Fariure'
'''
script {
if (APP_PATH.contains('ROOT')) {
sh '''
sudo su -c "if test ! -d $APP_PATH;then mkdir -p $APP_PATH;fi; cd ${APP_PATH};rm -rf ./*;unzip $WORKSPACE/$zipfile;";
'''
} else {
sh '''
sudo su -c "if test ! -d $APP_PATH;then mkdir -p $APP_PATH;fi; cd ${APP_PATH};rm -rf ./${sourcefile}*;unzip $WORKSPACE/$zipfile;";
'''
}
}
sh '''
echo "Normal Start Process ...";
sudo su -c "$START_CMD" && echo 'Process Start Success' || echo 'Process Start Fariure'
'''
}
}
}
}

一个通用的 java 项目的模板的更多相关文章

  1. 肝了一个半月的 Java 项目快速开发脚手架:Chewing

    前言 闲来无事,整一个 Java 项目快速开发脚手架. 正文 一.简介 Chewing 是一个简单的 Java 项目快速开发脚手架.既适合需要开发小型项目的小伙伴使用,也适合刚入门的新手用来学习一些常 ...

  2. Maven:如何在eclipse里新建一个Maven的java项目和web项目

    如何在eclipse里新建一个Maven的java项目和web项目: 一:java项目 New-->Other-->Maven 右击项目-->properties,修改以下文件: ① ...

  3. Amoeba是一个类似MySQL Proxy的分布式数据库中间代理层软件,是由陈思儒开发的一个开源的java项目

    http://www.cnblogs.com/xiaocen/p/3736095.html amoeba实现mysql读写分离 application  shang  2年前 (2013-03-28) ...

  4. 怎么快速入门一个老的java项目

    作者:eilen著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1.有文档肯定先看文档,先看设计文档,产品的.技术的设计文档,接口文档写的好的可以看看,要是写的不好不着急看. 2 ...

  5. Ubuntu上部署一个简单的Java项目

    一.安装tomcat7,mysql,Java JDK,直接apt安装 $ sudo aptitude install tomcat7 $ -jdk openjdk--jre $ sudo aptitu ...

  6. 使用Eclipse载入一个现有的java项目

    下文的导入记录了在Eclipse环境中,要对已经下载好的java源码进行载入时的步骤.主要用于下载后的文件不方便进行拷贝到其它位置的情况.笔者几次用到这个顺序来载入项目,但是都是隔非常长时间才用一次, ...

  7. 导入一个eclipse的java项目到IDEA报Cannot find JDK '1.7' for module 'TEST'

    解决办法: 右键你的项目--------------->OPen module settings 将dependencies里面的module sdk改成你安装的java版本就可以了(比如我电脑 ...

  8. 一个简单的java项目使用hibernate连接mysql数据库

    实体类与表对应文件Customer.hbm.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTY ...

  9. JetBrains Fleet初体验,如何运行一个java项目

    序言 各位好啊,我是会编程的蜗牛,JetBrains 日前宣布其打造的下一代 IDE Fleet 正式推出公共预览版,现已开放下载.作为java开发者,对于JetBrains开发的全家桶可以说是印象深 ...

  10. [IntelliJ IDEA入门] 新建一个Java项目

    新建一个Project 是否有JDK配置 选择JavaEE 点击Next 项目路径和文件 .idea (directory based) 创建项目的时候自动创建一个 .idea 的项目配置目录来保存项 ...

随机推荐

  1. Vue.js3.0练习题

    第一章:Vue 3.0 概述 1.选择题 1.1.在MVVM设计模式中,Model代表的是_______. A. 数据模型        B. 控制器       C. 视图      D.监听模型 ...

  2. Vue使用Element表单校验错误Cannot read property ‘validate’ of undefined

    在做注册用户的页面使用表单校验一直提示Cannot read property 'validate' of undefined错误,其实这个错误的提示根据有多种情况,比较常见的就是 ref 的名字不一 ...

  3. combotree 的简单使用

    一.前端 combotree HTML: <input id="201711281652407353448711985811" class="easyUI-comb ...

  4. easyui combobox的级联设置

    <body> <input id="title" class="easyUI-combobox" //onSelect:在该combobox被 ...

  5. nginx-1.22.0版本安装

    nginx运行状态查看 查看80端口占用情况:netstat -tunlp | grep 80 # 查看进程是否运行ps -A | grep nginx # 强制关闭nginxpkill nginx ...

  6. 【每日一题】【栈】2022年2月2日-NC40 两个链表生成相加链表

    描述 假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数. 给定两个这种链表,请生成代表两个整数相加值的结果链表. 答案:栈 import java.util.*; /* ...

  7. 【每日一题】【动态规划,递推式与公共子串的区别】2022年1月31日-NC92 最长公共子序列(二)

    描述 给定两个字符串str1和str2,输出两个字符串的最长公共子序列.如果最长公共子序列为空,则返回"-1".目前给出的数据,仅仅会存在一个最长的公共子序列 方法1: impor ...

  8. 【Day02】Spring Cloud组件的使用--Nacos配置中心、sentinel流量控制、服务网关Gateway、RocketMQ、服务调用链路(Sleuth、zipkin)

    今日内容 一.配置中心 1.遗留问题 yml配置,每一次都需要重启项目 需要不重启项目拿到更新的结果 引出:配置中心 选择:Spring Cloud Config组件 / Alibaba的Nacos( ...

  9. 粘包、struct模块、进程并行与并发

    目录 粘包现象 struct模块 粘包代码实战 udp协议(了解) 并发编程理论 多道技术 进程理论 进程并行与并发 进程的三状态 粘包现象 1.服务端连续执行三次recv 2.客户端连续执行三次se ...

  10. pytest常用参数汇总

    1.  -s    表示输出调试信息,包括print打印信息 D:\demo>pytest -s ./pytest_1 ===================================== ...