jenkins安装部署及项目构建部署详解

使用jenkins部署项目,能够说在必定程度上解放了人力反复部署的困扰,但它的功能毫不仅于此。下面开始jenkins的学习之旅html

一. jenkins介绍

Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工做,功能包括:java

  一、持续的软件版本发布/测试项目。linux

  二、监控外部调用执行的工做。web

二.为何要使用jenkins(jenkins的优势)

    1 、jenkins易于使用,用户界面简单,直观
    二、 jenkins具备良好的扩展性,可以及其灵活和方便的迎合你的想法,由于其有数以千计的插件可供使用
    3 、开源的活跃度高spring

三.jenkins的安装及遇到的问题

1.安装jenkins的两种方式:

①把war包部署在servlet容器中。例如:tomcat  ②使用命令直接运行war包shell

第一种:浏览器

   一、因为Jenkins是基于Java开发的,安装前确认操做系统已经安装了jdk,参照:【Linux】 JDK安装及配置 (tar.gz版)tomcat

  二、从官网下载jenkins的war包,地址https://jenkins.io/,(注意下载的版本要与jdk的版本对应)安全

  三、按jenkins.war包放在tomcat(tomcat安装:【Linux】Tomcat安装及一个服务器配置多个Tomcat)下面的webapps下面springboot

  四、启动tomcat。tomcat会解压war包,生成一个jenkins文件夹,并且会在root目录下生成一个.jenkins的文件夹。 以下图:

 

 

第二种:

    这种也是我采用的方式,即将下载的jenkins.war包以单独的端口应用启动,

如:在安装目录下 java -jar jenkins.war  --httpPort 指定的端口(由于默认端口是8080,不指定的状况下报端口占用异常)

将jenkins.war放在服务器指定位置后,启动如上图(此时只有jenkins.war一个文件)

此时,能够在浏览器中打开jenkins页面:

为了确保管理员安全地安装Jenkins,密码已写入到日志中,通常会在服务器的/var/lib/jenkins/secrets/initalAdminPassword

输入密码,即进入选择插件安装界面,选择第一个(Install suggested plugins)

  

 

  

 插件安装完成以后,须要建立第一个用户

  建立用户以后,就可使用jenkins了

  

备注

  1)若是插件安装失败,能够去镜像地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins,手动下载,而后经过插件管理中的高级,进行上传

  

  2)若是管理员密码忘记而且没有建立新用户的条件下,参考https://blog.csdn.net/kongguyouxiang/article/details/61919263

2.jenkins相关命令

①启动jenkins

  使用内置的jetty服务器启动

        java -jar jenkins.war --httpPort=3333  随着终端关闭即中止(不推荐)

        nohup java -jar jenkins.war --httpPort=3333  不挂断的执行(推荐)

  借助其余应用服务器,如:tomcat

②关闭jenkins

  经过命令行 ps -ef|grep jenkins  使用kill -9 PID 强制关闭进程

  经过页面:

③重启jenkins

jenkins启动后,在网址栏输入http:/IP:端口/restart,点击确认后,便可完成重启jenkins

④从新加载jenkins配置信息

jenkins启动后,在网址栏输入http:/IP:端口/reload,点击确认后,便可完成从新加载jenkins配置信息

三.jenkins构建项目过程及所遇问题

1.构建项目过程

点击新建Item

选择建立一个自由风格的项目,若是工做空间中有相似的项目,能够利用下面的"复制"功能。

关于启动项目脚本BUILD_ID=pleaseDontKillMe的解释参看http://www.javashuo.com/article/p-fysvrcqg-mc.html

 启动时run.sh文件以下:

#!/bin/sh
#由export关键字处理过的变量叫作环境变量
export PARA1=$1
#若是是参数化构建项目,工做空间内需根据参数找到对应JAR包位置。例如:SxtV01.01.01
export para2=$2
#用” [ ] “来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
if [ ${PARA1}_BLANK == _BLANK ]; then
    echo '------------------------------------------------------------------------------------'
    echo '--                     显示爱税融2.0相关应用的启动状况                            --'
    echo '------------------------------------------------------------------------------------'
    ps -ef |grep '0.0.1-SNAPSHOT.jar' | grep -v 'grep'
    echo '------------------------------------------------------------------------------------'
	#echo  打印内容
	#exit(0):正常运行程序并退出程序;exit(1):非正常运行致使退出程序;
	exit 1
fi

export WS_PATH=/root/.jenkins/workspace
export JAR_NAME=${PARA1}-0.0.1-SNAPSHOT.jar
export JAR_PATH=EMPTY

if [ ${PARA1}_BLANK == uums_BLANK ]; then
	JAR_PATH=${WS_PATH}/uums_8088/uums/target
fi

if [ ${PARA1}_BLANK == gateway_BLANK ]; then
        JAR_PATH=${WS_PATH}/gateway_8666/${para2}/target
fi
if [ ${PARA1}_BLANK == ixinnuo_sxt_BLANK ]; then
        JAR_PATH=${WS_PATH}/sxt_8070/target
fi
if [ ${JAR_PATH} == EMPTY ]; then
	echo 参数[${PARA1}]错误
	exit 1
fi

export JAR_FULL_NAME=${JAR_PATH}/${JAR_NAME}

echo 准备杀死${PARA1}进程...
#命令详解参考:https://blog.csdn.net/u____/article/details/79859503
ID=`ps -ef |grep ${JAR_NAME} | grep -v grep | awk '{printf $2}'`
echo $ID
echo "--------------------------------"
kill -9 $ID
echo "kill $ID donw"
echo "--------------------------------"
sleep 1s

echo 准备启动${PARA1}服务...
\cp -f  ${JAR_FULL_NAME} ${WS_PATH}/${JAR_NAME}
#chmod 777  文件或目录  表示目录权限被修改成777(可读,可写可执行)   (操做文件或目录的用户,有3种不一样类型:文件全部者、群组用户、其余用户 三个7对应三种用户)
chmod 777 ${WS_PATH}/${JAR_NAME}
echo "nohup java -jar ${WS_PATH}/${JAR_NAME} > ${WS_PATH}/${PARA1}.out &"
nohup java -Djava.io.tmpdir=/opt/gateway/tmp -jar ${WS_PATH}/${JAR_NAME} > ${WS_PATH}/${PARA1}.out 2>&1 &
#java -jar ${PARA1}-0.0.1-SNAPSHOT.jar
echo 启动结束. 

#exit 1
#exit 0 能够告知你的程序的使用者:你的程序是正常结束的。若是 exit 非 0值,那么你的程序的使用者一般会认为你的程序产生了一个错误。

2.重点命令解读及所遇问题

重点为后面启动项目的几行命令,其中:

nohup java -Djava.io.tmpdir=/opt/gateway/tmp -jar ${WS_PATH}/${JAR_NAME} > ${WS_PATH}/${PARA1}.out 2>&1 &

  启动项目,(简略为     nohup java -jar xxx.jar >./log.txt  2>&1 &)命令具体解释以下:

①java -D设置JVM系统属性(java -D<name>=<value>设置jvm系统属性),其中tomcat临时目录ava.io.tmpdir修改

为何要修改tomcat临时指定目录??

       springboot的应用服务在启动的时候,会生成在操做系统的/tmp目录下生成一个Tomcat.*的文件目录(用于上传文件的临时目录,系统会清理 如:https://www.cnblogs.com/ldy-blogs/p/8509343.htmlhttps://www.jianshu.com/p/cfbbc0bb0b84

 -jar ${WS_PATH}/${JAR_NAME} >${WS_PATH}/${PARA1 }.out什么意思??

    ">"前面为jar包所在位置,以后为项目日志位置---默认输出文件修改成当前目录下${WS_PATH}/${PARA1 }.out文件

"2>&1"??

表示 错误和输出都传到nohup.out文件中,默认状态只把输出输出到nohup.out文件中

问题:Jenkins构建项目默认空间的更改:

1)首先,查看jenkins工做目录显示位置:

 点击系统设置

其目录为系统目录的根目录下,那么Jenkins工做空间目录是如何采用的呢??

      Jenkins默认的查找顺序是先是在操做系统的环境变量中查找名为“JENKINS_HOME”的环境变量,若是存在该变量,那么Jenkins就采用“JENKINS_HOME”中所指定的目录做为工做空间目录,可是咱们在初次装好Jenkins时咱们是没有配置“JENKINS_HOME”环境变量的,因此说Jenkins在找不到配置的“JENKINS_HOME”环境变量时就采用了默认的环境变量配置,系统根目录。
2)修改默认的工做空间目录(为避免默认的磁盘空间不够)

linuxä¸ä¿®æ¹jenkinsé»è®¤å·¥ä½ç©ºé´

 jenkins提供了三种更改默认空间的方法,这里使用第二种解决:

中止jenkins,添加环境变量,重启。
添加环境变量方法:
vi /etc/profile   (系统配置文件)
在文件最后添加JENKINS_HOME:
export JENKINS_HOME=/home/JenkinsWorkspace
使之马上生效命令
source /etc/profile

     全部用户的shell都有权使用这个环境变量(/etc/profile : 在登陆时,操做系统定制用户环境时使用的第一个文件 ,此文件为系统的每一个用户设置环境信息,当用户第一次登陆时,该文件被执行)

    写到这里,实在发现本身在linux命令这块很不熟悉,之后有待增强!!!!