#!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. 一个超经典 WinForm 卡死问题的再反思

    一:背景 1.讲故事 这篇文章起源于昨天的一位朋友发给我的dump文件,说它的程序出现了卡死,看了下程序的主线程栈,居然又碰到了 OnUserPreferenceChanged 导致的挂死问题,真的是 ...

  2. Redis可视化管理工具-RedisDesktopManager

    Windows客户端,访问Redis数据库并执行一些基本操作. 链接:https://pan.baidu.com/s/1OuGqIfbpGwglC-642rECbQ 提取码:m6uo

  3. 计算机系统大作业:Hello的一生

    计算机系统大作业 题 目 程序人生-Hello's P2P 专 业 计算机科学与技术 学 号 班 级 学 生 江水为竭 指导教师 刘宏伟 计算机科学与技术学院 2022年5月 摘 要 HelloWor ...

  4. 2022春每日一题:Day 18

    题目:[JSOI2007]字符加密 很常见的做法,破环为链,然后以2n为总长再后缀排序,然后对于SA[i] < n 的,说明第i小后缀的编号是小于n的,也就是说,以i开头的编号是合法的,那么输出 ...

  5. CentOS 7.x字符界面安装图形界面方法

    1. 配置好yum源,可以使用光盘镜像源,也可以使用网络源. 阿里源下载示例: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.ali ...

  6. NET 6 实现滑动验证码(一)、创建工程

    目录 实现滑动验证码的目的 创建.NET 6工程 实现滑动验证码的目的 传统验证码实现起来比较简单,但在OCR技术越来越成熟的情况下,验证码的破解难度越来越低,但如果将验证码难度加高(各种干扰背景,扭 ...

  7. adb shell 全局查找文件

    借助busybox 由于安卓手机没有 find 命令,所以我们需要借助busybox中的find命令 busybox 下载地址 这里我下载的是 busybox-armv6l, 一般这个版本就可以,下载 ...

  8. ValueError: Detected newline in header value. This is a potential security problem

    原因 flask框架进行重定向的url中包含 换行符\n或\r 解决方法 使用 strip() 函数去除行首或行尾的换行符(如果你url中间包含这些符号replace函数替换, 但是如果中间包含只能说 ...

  9. JavaScript入门②-函数(1)基础{浅出}

    01.JS函数基础 1.1.函数定义 函数(方法)就是一段定义好的逻辑代码,函数本身也是一个object引用对象.三种函数构造方式: ① 函数申明:function 函数名(参数){代码},申明函数有 ...

  10. 【书籍知识回顾与总结-2022】Java语言重点知识-多线程编程、流式编程

    一.多线程编程 二.流式编程 1.目的 简化集合和数组的操作 注意:每个流只能使用一次 2.获取流的方式 (1)单列集合:stream方法 KeySet()/values()/EntrySet() ( ...