一、原理

       开发人员提交完代码至版本控制器后,由Jenkins自动获取远程代码,自动打包,然后再自动发布的过程。

jenkins 定时 构建 搭建jenkins实现自动化部署_jenkins 定时 构建

 二、使用Docker安装Jenkins

前提是linux中已经安装Docker,再执行以下命令:

docker run -p 8080:8080 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean

jenkins 定时 构建 搭建jenkins实现自动化部署_jenkins 定时 构建_02

 

jenkins 定时 构建 搭建jenkins实现自动化部署_jenkins 定时 构建_03

访问Jenkins:http://192.168.154.128:8080/

(无法访问可关闭防火墙 命令:systemctl stop firewalld)

jenkins 定时 构建 搭建jenkins实现自动化部署_自动化_04

提示密码在路径中的文件中,因此需要进入到docker容器找到该密码:

jenkins 定时 构建 搭建jenkins实现自动化部署_jenkins_05

 输入完密码后进入到如下界面:

 

jenkins 定时 构建 搭建jenkins实现自动化部署_java_06

 选择安装推荐的插件进入:

jenkins 定时 构建 搭建jenkins实现自动化部署_java_07

到了下面这个界面,说明Jenkins安装成功!

jenkins 定时 构建 搭建jenkins实现自动化部署_jenkins 定时 构建_08

三、Jenkins控制台配置jdk和Maven环境

        因为Docker在安装Jenkin时,已自动在容器中安装Jenkins依赖的相关jdk以及maven环境。因此可将已安装好的jdk和maven在Jenkins控制台中进行配置。

jenkins 定时 构建 搭建jenkins实现自动化部署_自动化_09

进入到docker容器jenkins中,通过echo $JAVA_HOME命令查看当前容器内jdk的安装路径

 docker ps -a

docker exec -it eb077c1bf067 bash

echo $JAVA_HOME

jenkins 定时 构建 搭建jenkins实现自动化部署_jenkins 定时 构建_10

 配置jdk:

jenkins 定时 构建 搭建jenkins实现自动化部署_jenkins_11

配置maven:

jenkins 定时 构建 搭建jenkins实现自动化部署_自动化_12

 点击最下面的保存按钮

jenkins 定时 构建 搭建jenkins实现自动化部署_jenkins 定时 构建_13

springboot项目为Maven项目,需要下载maven插件:

系统管理--插件管理--可选插件--搜索Maven Integration进行安装,然后勾选安装后重启Jenkins

jenkins 定时 构建 搭建jenkins实现自动化部署_自动化_14

    当点击新建一个任务后出现如下内容,表明maven插件安装成功

jenkins 定时 构建 搭建jenkins实现自动化部署_java_15

四、Jenkins控制台配置git/svn 源代码路径,以及启动jar/war包时的shell脚本

jenkins 定时 构建 搭建jenkins实现自动化部署_自动化_16

 回到DashBoard首页-->点击项目 --> 点击配置

jenkins 定时 构建 搭建jenkins实现自动化部署_jenkins 定时 构建_17

 3.源码管理(配置git仓库地址,Jenkins会从远程仓库拉取代码)

jenkins 定时 构建 搭建jenkins实现自动化部署_Jenkins_18

4.构建配置(Jenkin拉取代码后会自动执行打包命令)

clean install -Dmaven.test.skip=true

jenkins 定时 构建 搭建jenkins实现自动化部署_jenkins_19

5.配置-POST Steps下配置shell脚本(Jenkins打包完成后,自动执行shell脚本启动项目,实现自动化部署),最后保存即可

jenkins 定时 构建 搭建jenkins实现自动化部署_Jenkins_20

附shell脚本:

#!/bin/bash
# #!/bin/bash是指此脚本使用/bin/bash来解释执行。其中,#!是一个特殊的表示符,其后,跟着解释此脚本的shell路径。bash只是shell的一种,还有很多其它shell,如:sh,csh,ksh,tcsh,...
# #!/bin/bash只能放在第一行,如果后面还有#!,那么只能看成是注释。
 
#服务名称
 
SERVER_NAME=springbootdemo
 
#源jar路径,mm打包完成之后,target目录下的jar包名称,也可选择成为war包,war包 可移动到Tomcat的。
JAR_NAME=springbootdemo-0.0.1-SNAPSHOT
 
 
#target打包生成jar包的目录
 
JAR_PATH=/var/jenkins_home/workspace/springboot_project/springbootdemo/target    

# 以具体的打包位置为准,可以先构建一次项目,通过日志查看打包的目录
 
#打包完成之后,把iar包移动到运行jar包的目录
JAR_WORK_PATH=/var/lib
 
echo "查询进程id-->$SERVER_NAME"
PID=`ps -ef | grep "$SERVER_NAME" | awk '{print $2}'`
echo"得到进程ID: $PID"
echo"结束进程"
for id in $PID
do
kill -9 $id
echo "killed $id" 
done
echo"结束进程完成"
 
#复制jar包到执行目录_
 
#echo" 复制jar包到执行目录:cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH"
#cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH
#echo"复 制jar包完成"
#cd $JAR_WORK_PATH
#修改文件权限
#chmod 755 $JAR_NAME.jar
 
#前台启动
cd $JAR_PATH
java -jar $JAR_NAME.jar
 
#后台启动
#BUILD_ID=dontKillMe nohup java -jar $JAR_NAME.jar &
 

选择构建历史,查看工作路径

jenkins 定时 构建 搭建jenkins实现自动化部署_自动化_21

jenkins 定时 构建 搭建jenkins实现自动化部署_jenkins 定时 构建_22

jenkins 定时 构建 搭建jenkins实现自动化部署_java_23

控制台输出成功!!!

jenkins 定时 构建 搭建jenkins实现自动化部署_java_24

 访问项目成功!!!

jenkins 定时 构建 搭建jenkins实现自动化部署_java_25

问题记录:

1.当jenkins在构建项目的过程中,从github上拉取代码时超时问题(因gihub部署在国外),可以在配置--Additional Behaviours--高级的克隆行为--克隆和拉取操作的超时时间(分钟)设置超时时间

2.当日志中报pom.xml文件找不到问题。jenkins默认会去找当前jenkins项目名称目录下的pom.xml。如果你上传git的时候pom.xml文件上面还有一层目录,可以在配置pom.xml文件前加父目录

jenkins 定时 构建 搭建jenkins实现自动化部署_jenkins 定时 构建_26

3.最终在访问spring项目的时候,要看springboot项目启动时暴露的端口是多少,要与宿主机做端口的映射(启动时-p),最终访问宿主机的端口