Jenkins自动化CI CD流水线之8--流水线自动化发布Java项目
一、前提
插件:Maven Integration plugin
环境:
maven、tomcat
用的博客系统代码:
git clone https://github.com/b3log/solo.git
远端git服务器:
[git@git repos]$ mkdir -p solo
[git@git repos]$ cd solo/
[git@git solo]$ git --bare init
Initialized empty Git repository in /home/git/repos/solo/
本地web:
[root@web solo]# git remote -v
origin git@172.16.1.3:/home/git/repos/solo (fetch)
origin git@172.16.1.3:/home/git/repos/solo (push)
[root@web solo]# git remote rm origin
[root@web solo]# git init
Reinitialized existing Git repository in /root/solo/.git/
[root@web solo]# git remote add origin git@172.16.1.3:/home/git/repos/solo
[root@web solo]# git add .
[root@web solo]# git commit -m "java solo all"
# On branch master
nothing to commit, working directory clean
[root@web solo]# git push origin master
Counting objects: , done.
Compressing objects: % (/), done.
Writing objects: % (/), 47.77 MiB | 39.28 MiB/s, done.
Total (delta ), reused (delta )
To git@172.16.1.3:/home/git/repos/solo
* [new branch] master -> master
因为solo需要改如下配置才可以访问:(改serverhost为指定的域名)
vim /root/solo/src/main/resources/latke.properties
然后再重新提交上去
二、配置
1)新建job
2)参数化构建
3)配置git仓库(针对jenkinsfile)
三、编写Jenkinsfile
源码配置文件:
node ("slave02-172.16.1.3") {
//def mvnHome = '/usr/local/maven'
stage('git checkout') {
checkout([$class: 'GitSCM', branches: [[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'git@172.16.1.3:/home/git/repos/solo']]])
}
stage('maven build') {
sh '''export JAVA_HOME=/usr/local/jdk1.8
/usr/local/maven3./bin/mvn clean package -Dmaven.test.skip=true'''
}
stage('deploy') {
sh '''
JENKINS_NODE_COOKIE=dontkillme
export JAVA_HOME=/usr/local/jdk1.
TOMCAT_NAME=tomcat
TOMCAT_HOME=/application/$TOMCAT_NAME
WWWROOT=$TOMCAT_HOME/webapps/ROOT if [ -d $WWWROOT ]; then
mv $WWWROOT /data/backup/${TOMCAT_NAME}-$(date +"%F_%T")
fi
unzip ${WORKSPACE}/target/*.war -d $WWWROOT
PID=$(ps -ef |grep $TOMCAT_NAME |egrep -v "grep|$$" |awk \'{print $2}\')
[ -n "$PID" ] && kill -9 $PID
/bin/bash $TOMCAT_HOME/bin/startup.sh
'''
}
stage('test') {
//sh "curl http://solo.test.com/status.html"
echo "test ok!!!!!!!"
}
}
下面为带解释版,但不可以使用,部分注释会造成问题
node ("slave02-172.16.1.3") { //绑定到该节点构建
//def mvnHome = '/usr/local/maven'
stage('git checkout') { //拉代码
checkout([$class: 'GitSCM', branches: [[name: '${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'git@172.16.1.3:/home/git/repos/solo']]])
}
stage('maven build') { //maven build
sh '''export JAVA_HOME=/usr/local/jdk1.8 //在指定java环境变量
/usr/local/maven3./bin/mvn clean package -Dmaven.test.skip=true''' //构建maven包 clean package表示构建之前会清理之前构建的包,-Dmaven.test.skip=true表示跳过单元测试
}
stage('deploy') { //部署
sh '''
JENKINS_NODE_COOKIE=dontkillme #tomcat启动时会衍生出一些子进程,然后才能成功启动,但是jenkins会在构建结束杀掉tomcat的那些衍生子进程,造成tomcat启动失败,此处加上这个参数可以解决这个问题。
export JAVA_HOME=/usr/local/jdk1.
TOMCAT_NAME=tomcat
TOMCAT_HOME=/usr/local/$TOMCAT_NAME
WWWROOT=$TOMCAT_HOME/webapps/ROOT if [ -d $WWWROOT ]; then //如果目录存在,先备份
mv $WWWROOT /data/backup/${TOMCAT_NAME}-$(date +"%F_%T")
fi
unzip ${WORKSPACE}/target/*.war -d $WWWROOT //项目包解压到站点目录
PID=$(ps -ef |grep $TOMCAT_NAME |egrep -v "grep|$$" |awk \'{print $2}\') //重启tomcat
[ -n "$PID" ] && kill -9 $PID
/bin/bash $TOMCAT_HOME/bin/startup.sh'''
}
stage('test') { //测试
//sh "curl http://wp.test.com/status.html"
echo "test ok!!!!!!!"
}
}
四、构建
五、访问
Jenkins自动化CI CD流水线之8--流水线自动化发布Java项目的更多相关文章
- 【linux】【jenkins】自动化运维四 整合gitlab、docker发布java项目
jenkins发布java项目 过程参考发布vue项目.https://www.cnblogs.com/jxd283465/p/11543431.html 大同小异. vue建立的是Freestyle ...
- Jenkins自动化CI CD流水线之1--介绍与安装
第1章 大纲 CI/CD, DevOps介绍 Git安装与使用 Jenkins安装与使用 权限管理 参数化构建 Master-Slave 流水线(Pipeline) 邮件通知 应用案例 自动发布PHP ...
- Jenkins与Docker的自动化CI/CD实战
Jenkins与Docker的自动化CI/CD实战 互联网Java架构 2018-09-19 15:46:13 一.发布流程设计 工作流程: 开发人员提交代码到Git版本仓库:Jenkins人工/定时 ...
- Jenkins 配置CI/CD任务
本文演示如何通过Jenkins创建CI/CD任务,部署一整套微服务体系结构,并运行在之前搭建的mini云平台上. 如果是初始尝试实践,可能需要参考 快速搭建云原生架构的实践环境 和 Jhipster技 ...
- 使用 Jenkins 搭建 CI/CD All In One
使用 Jenkins 搭建 CI/CD All In One https://ci.jenkins.io/ https://www.jenkins.io/zh/ jobs pipelines refs ...
- 项目案例之Pipeline流水线发布JAVA项目(三)
项目案例之Pipeline流水线发布JAVA项目(三) 链接:https://pan.baidu.com/s/1NZZbocZuNwtQS0eGkkglXQ 提取码:z7gj 复制这段内容后打开百度网 ...
- Docker: Jenkins与Docker的自动化CI/CD流水线实战
什么是CI/CD 持续集成(Continuous Integration,CI):代码合并.构建.部署.测试都在一起,不断地执行这个过程,并对结果反馈.持续部署(Continuous Deployme ...
- docker | jenkins 实现自动化CI/CD,后端躺着把运维的钱挣了!(下)
前言 在上一篇文章中,我们使用docker编写Dockerfile文件,将我们自己的项目构建成镜像,然后发布到Docker Hub中,并且用自己的云服务器拉取Docker Hub上我们自己上传的项目镜 ...
- .Net在Windows上使用Jenkins做CI/CD的那些事
背景 最近入职了一家新公司,公司各个方面都让我非常的满意,我也怀着紧张与兴奋的心情入职后,在第一天接到了领导给我的第一个任务——把整个项目的依赖引用重新整理并实施项目的CI/CD. 本篇的重点主要分享 ...
- 阿里CI/CD、DevOps、分层自动化技术
原文地址:http://www.infoq.com/cn/news/2017/01/alibaba-yunxiao-cicd-devops 在互联网时代,产品快速迭代的重要性不言而喻.不管是传统企业还 ...
随机推荐
- 每天一道算法题(24)——自定义幂函数pow
double myPower(double base, int exponent){ if(exponent==0) return 1; if(exponent==1) return base; if ...
- CSS技巧: CSS隐藏文字的方法(CSS text-indent: -9999px;)
建站过过程中朋友喜欢把网站名称用H1表示,但从美观考虑,要用logo图片来代替h1,这时需要隐藏h1内的这段文字,但又不能对搜索引擎不友好,否则就失去了定义h1标签的意义. 在CSS中如何以图代字,找 ...
- Android LayoutInflater学习
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...
- android下db-journal文件作用
在学习数据库sqlite的过程中,发现在源文件包里除了生成db类型的数据库文件,还生成了db-journal类型的同名文件 查询网上资料后知道该文件是sqlite的一个临时的日志文件,主要用于sqli ...
- Nginx 正向代理和反向代理
正向代理的概念 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器这个代理服务器呢,他能访问那个我不能访问的网站于是我先连上代 ...
- C++面向对象类的实例题目三
编写一个程序,设计一个满足如下要求的CData类. (1)用下面的格式输出日期:日/月/年 (2)输出在当前日期上加一天后的日期 (3)设置日期 code: #include<iostream& ...
- 用fontcreator创建了一个半成品的字体
下效果,哈哈. 为啥说半成品呢?因为只制作了0到9这几个字符,其他的字母.汉字.符号啥的都没有制作,唯一感觉就是字体设计是一个非常有设计感的活儿,而且需要付出很多的精力,尤其是汉字字体,常见的有6k多 ...
- 导入project后lib文件夹一直没有jar包
原因: 导入project,倒错了项目,只因为后面新建的项目名称有和前面的差不多,导致自己选择了原来的项目,因此,项目的注解一直报错.
- Elasticsearch suggester搜索建议初步
环境 Elasticsearch 2.3.5 Elasticsearch-ik-plugin 实现 搜索建议的对象 假设有以下两个json对象,需要对其中tags字段进行搜索建议: //对象Produ ...
- delphi 调用百度地图WEBSERVICE转换GPS坐标
百度地图的API说明 使用方法 第一步,申请密钥(ak),作为访问服务的依据: 第二步,按照请求参数说明拼写发送http请求的url,注意需使用第一步申请的ak: 第三步,接收返回的数据(json或者 ...