背景运用场景及思路

1、为响应后端开发人员需求,提升项目开发过程效率,选择Jenkins持续构建,进行导包启动一键持续集成

思路:

使用jenkins自带,立即构建->SVN拉取代码,通过Jenkins安装的mvn编译进行打包,并自动化启动后端服务

致谢:

工作岗位的上一任,留给我很多资料进行查阅,感蟹!!

Jenkins搭建部署

1、下载tomcat软件,gz压缩包,存放到需要配置的Linux服务器上

2、 官网下载jenkins,将jenkins压缩包,解压后,放置到tomcat-->webapp目录下

3、 进入tomcat-->bin目录-->./startup.sh启动命令

配置时需注意事项:

1、需要修改tomcat-->config文件夹-->server.xml

(启动tomcat时,需要netstat查看tomcat启动的默认8080端口是否已经被占用,如果已经被占用,vim编辑server.xml文件,找到8080端口,进行修改,如下所示:)

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/> 修改后:
<Connector port="3030" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"/>

2、如启动tomcat后,进入127.0.0.1:3030检查,Tomcat是否正常启动起来 ,如果无法正常查看,则需要执行以下命令,关闭防火墙服务

service iptables stop

配置系统环境

1、Linux需安装jdk_1.8,这里可以按照自己的喜好进行下载

2、下载解压安装jdk成功后,需要进入etc/profile环境配置如下变量

(我这里下载解压后的jdk,是放置到了/opt目录下)

JAVA_HOME=/opt/jdk1.8.0_141
JAVA_BIN=$JAVA_HOME/bin
JRE_HOME=$JAVA_HOME/jre
JRE_BIN=$JAVA_HOME/bin
PATH=$JAVA_BIN:$JRE_BIN:$PATH
export JAVA_HOME JRE_HOME PATH

安装Jenkins插件

1、 Tomcat起来后进入访问页面:服务器IP地址:端口号/jenkins

2、访问Jenkins成功,进行默认选择进行下一步,下一步安装

3、安装插件时,可以根据自己的喜好进行安装的啦,这里就不概述啦

配置JDK,MAVEN安装

一、配置后台服务Maven打包时需要的jdk/maven

二、配置前端服务npm打包时所需nodeJs

配置SSH连接服务器







创建Maven项目



SVN打包构建及SSH远程部署





启动脚本

source /etc/profile # 应ssh远程连接是no-login状态,则需要每次执行source /etc/profile配置
pid=`ps -ef |grep "other"|grep -v 'grep'|awk '{print $2}'`
if [ $pid ]; then #如果存在已启动的项目进程,则kill掉,没有则不进行处理
kill -9 $aa
fi
cd /data/
if [ $? -eq 0 ]; then
rm -rf /data/xqb-other-1.0.0.jar
else
mkdir -p /data/
fi
setsid java -jar xxxx.jar > nohup.out

遇到的问题

1、安装jenkins时,出现大部分插件,自动下载失败,重新retry后,仍是如此,待解决

2、昨天一天晚上,自信满满的认为自己可以很快的能解决好Jenkins持续构建打包后端服务,结果折腾了差不多半天时间,端午放假的最后一天班,还一个人加班到了最晚,这就是技术人,没有技术的加班血泪史鸭

其中遇到的问题有自身的问题、以及技术方面欠缺的问题,总结如下:

(1)、细节没有注意到,编写构建脚本时,每个Maven项目,写的目录因copy现有的,导致存在很多小字眼写错了,这里需要面壁思过了,细节决定成败,细节决定成败呀,都是血泪史~~

(2)、Mvn编译打包后,在PostStep下,Jenkins没有将打包好后的xxx.jar包,正常远程传输到制定的路径下

(3)、打包完成后,脚本启动命令,没有正常被执行,导致传输后的jar包,无法正常启动起来

1.打包后无法传输到指定的目标服务器路径

遇到这个问题时,思考的方向是SSH配置用户名和密码是否正确,检查没有问题后,才第一时间是,查询了jenkins 项目中的poststep中各个输入框的用法,毕竟还是知识理论更重要

配置POST STEP

编译打包文成后,就需要配置post step,该模块是在你Jenkins编译打包完成后,执行的动作

需要介绍的点是:

SSH Server:用户需要ssh传输jar包的服务器

Source files:传输的源文件,这里按照Jenkins的默认路径是当前的job项目的工作路径,比如:

jenkins中创建的每个job工程项目,对应会在Jenkins安装目录下的workspace空间下自动创建

如:

jenkins在linux下默认的安装路径是以下路径

/root/.jenkins/

我创建的Job工程名字为jenkins,则构建成功后,会在以下的路径,生成jenkins文件夹,如下所示

/root/.jenkins/workspace/jenkins

source files,是我要打包完成的jar进行上传到其他服务器,所以我这里写的是target/*.jar

Remove prefix:这里表示上传后,不需要创建的target目录,所以这里需要填写target,表示上传完成后,不会在对应指定的目录下再生成一个/target目录,而是直接把*.jar包直接上传到指定的目录里

Remote diretory: 比如我要把*.jar包,放置到tomcat的webapp里,则我这里就填写 webapp,上传包后需要存放的地方

Exec command: 这里填写需要启动jar包的命令

例子:

setsid java -jar xxx.jar > nohup.out &

这里参考原文地址(推荐):[原文]https://www.cnblogs.com/abcwt112/p/6296399.html

2.setsid java -jar xxx.jar脚本命令无法正常启动

使用上面的setid启动jar包命令后,看到进程总是启动到一半后,

ps -fe |grep java

看到进程正常启动后一半,就自动停掉了,但是将上面的命令直接放在服务器上root用户下,直接执行时确能够执行成功,后来经过研发童鞋的指点,说在jenkins这里的命令,命令肯定是没有被启动起来,或者jenkins没有执行这行命令权限

经过思考推敲后,进行百度搜索无意间看到有位博主也遇到类似问题,才发现时ssh远程操作执行命令时,时non-login状态,ssh远程执行该命令时,是需要不会执行/etc/profile里面定义的变量的,而刚好jdk的配置,在/etc/profile文件里,所以ssh Server模块的脚本里,需要加上如下source /etc/profile:

source /etc/profile
setsid java -jar xxx.jar > nohup.out&

这里参考原文地址(推荐):[原文]http://blog.sina.cn/dpool/blog/s/blog_64693fd40101eyyh.html

最后轻松解决了上面害我加班的问题,真的是在你最无奈的时候,那么你就该要好好的静下心来,学习了。

效果

1、写代码(更新代码),push到SVN服务器

2、立即构建Job--> checkout SVN代码-->编译打包-->上传服务器-->自动启动执行jar服务

3、登陆使用项目,一体化,是不是爽歪歪呢,跟自己做好一道美味的菜后,最后有人帮把美酒倒了,饭给你装了,筷子给你拿了,你直接开吃的效果差不多。可惜我不是开发,哈哈哈哈

Jenkins持续构建打包后端服务流程详解的更多相关文章

  1. unity3d-配置Android环境,打包发布Apk流程详解

    31:unity3d-配置Android环境,打包发布Apk流程详解 作者 阿西纳尼 关注 2016.08.28 22:52 字数 498 阅读 1806评论 0喜欢 5 Unity配置Android ...

  2. 苹果企业账号打包发布APP流程详解

    原文链接:http://www.cnblogs.com/mddblog/p/4718228.html 一.通过企业账号申请证书 1 Certificate Signing Request (CSR)文 ...

  3. AppStore企业账号打包发布APP流程详解

    一.通过企业账号申请证书 1 Certificate Signing Request (CSR)文件 在Mac系统中进入“钥匙串访问”,选择“钥匙串访问”-“证书助理”-“从证书颁发机构请求证书…”, ...

  4. 个人环境搭建——搭建jenkins持续构建集成环境

    ---恢复内容开始--- 搭建jenkins持续构建集成环境  要搭建jenkins持续构建集成环境,首先要安装tomcat和JDK:   第一部分,基本说明:   敏捷(Agile) 在软件工程领域 ...

  5. 2-4、nginx特性及基础概念-nginx web服务配置详解

    Nginx Nginx:engine X 调用了libevent:高性能的网络库 epoll():基于事件驱动event的网络库文件 Nginx的特性: 模块化设计.较好扩展性(不支持模块动态装卸载, ...

  6. C++的性能C#的产能?! - .Net Native 系列《二》:.NET Native开发流程详解

    之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...

  7. Linux启动流程详解【转载】

    在BIOS阶段,计算机的行为基本上被写死了,可以做的事情并不多:一般就是通电.BIOS.主引导记录.操作系统这四步.所以我们一般认为加载内核是linux启动流程的第一步. 第一步.加载内核 操作系统接 ...

  8. Lucene系列六:Lucene搜索详解(Lucene搜索流程详解、搜索核心API详解、基本查询详解、QueryParser详解)

    一.搜索流程详解 1. 先看一下Lucene的架构图 由图可知搜索的过程如下: 用户输入搜索的关键字.对关键字进行分词.根据分词结果去索引库里面找到对应的文章id.根据文章id找到对应的文章 2. L ...

  9. FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

随机推荐

  1. POJ 2167 Irrelevant Elements 质因数分解

    Irrelevant Elements Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2231   Accepted: 55 ...

  2. HTML5的未来

    2014年10月29日,万维网联盟(W3C)宣布,经过差点儿8年的艰辛努力.该标准规范终于终于制定完毕.之所以是8年,由于在1999年HTML4的规范制定以后,W3C对于HTML的发展.貌似就不再那么 ...

  3. hdu4762Cut the Cake(概率+大数操作(java)+C++高精度模板)

    题目链接:点击打开链接 题目描写叙述:现有一个大蛋糕.上面随机分布了n个草莓,然后将草莓切成m块,问n个草莓全在一块蛋糕上面的概率? 解题思路:细致分析可得:C(n,1)/m^(n-1) 因为m< ...

  4. 邮箱smtpserver及port收集

    网易   163邮箱 POP3:pop.126.com SMTP:smtp.126.com SMTPport号:25   126邮箱 POP3:pop.126.com SMTP:smtp.126.co ...

  5. 【网络协议】ICMP协议、Ping、Traceroute

        ICMP协议 ICMP常常被觉得是IP层的一个组成部分,它是网络层的一个协议.它传递差错报文以及其它须要注意的信息.ICMP报文通常被IP层或更高层(TCP.UDP等)使用,它是在IP数据报内 ...

  6. java.lang.NoClassDefFoundError: org/json/JSONException

    问题: 解决办法:

  7. 逻辑运算0==x和x==0具体解释

    看很多大牛写的程序经常看到if(0==x){运行体},而自己写的程序常用if(x==0){运行体}.刚開始的时候我还非常自信的觉得这样的表达方式是等价的,大牛们仅仅是为了显摆下与众不同的格调.当读到C ...

  8. 为了世界的和平~一起上caioj~~~!

    打Call~打Call~打Call~~~!!! 世界毁灭了你在哪???不要犹豫,快去caioj!!! 无比优质的oj,未来大牛的明智之选----就是caioj~~~

  9. nyoj--252--01串(水题)

    01串 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有"11"子串的这种长度的0 ...

  10. Tool-Java:Eclipse

    ylbtech-Tool-Java:Eclipse Eclipse 是一个开放源代码的.基于Java的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境.幸运的是,E ...