使用Jenkins实现自动化部署项目

1 Jenkins简介与安装

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。 通常与版本管理工具(SCM)、构建工具结合使用;常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。

1.1 Jenkins使用前后对比
1.1.1 传统的项目部署

java 自动部署war java自动部署工具_java

1.1.2 Jenkins持续部署

java 自动部署war java自动部署工具_java_02

1.2 Jenkins安装与环境配置

官方下载地址:https://jenkins.io/download/,我选择下载的war包,将war包用xftp传到自己的服务器后,进入你war包存放的位置,输入以下指令后台启动jenkins:

nohup java -jar jenkins.war --logfile=server.log --httpPort=8088 > server.log 2>& 1 &`

java 自动部署war java自动部署工具_服务器_03


启动成功之后,浏览器输入服务器的ip+Jenkins启动端口号,就可以进入到 Jenkins的登录界面。登录成功之后,我们需要安装Git、Maven和deploy to web container等相应的插件。

java 自动部署war java自动部署工具_服务器_04

2 配置系统设置
2.1 新建maven项目

java 自动部署war java自动部署工具_Jenkins_05

2.2 配置项目
2.2.1 General选项

java 自动部署war java自动部署工具_jar_06

2.2.2 源码管理设置

该选项中我们要配置项目的仓库地址和管理该仓库的账号,如下图。

java 自动部署war java自动部署工具_jar_07

2.2.3 构建触发器

该选项中我们可以设置项目的定时构建,让项目每天定时构建一次。

java 自动部署war java自动部署工具_Jenkins_08

2.2.4 build与post steps设置

该选项中我们要配置项目的pom.xml文件的位置以及Maven执行的操作,这里选择clean和install。

java 自动部署war java自动部署工具_java_09


若不知道pom.xml在哪,可以先执行一次构建,构建会把代码克隆下来,我们可以在工作空间中看到。

2.2.5 构建后操作

该步骤中选择Send build artifacts Over SSH,这里我们需要填写服务器名称以及相应的路径。图中的Exec command是我们要运行的执令,此处运行了我自己写的一个叫hello.sh的启动脚本,同样,如果我们要一次部署到多台服务器上的话,只需要点击Add Transfer Set再和上图一样设置另一台服务器即可,设置完成之后点击应用和保存。

java 自动部署war java自动部署工具_服务器_10


java 自动部署war java自动部署工具_java 自动部署war_11

3 编写启动脚本

以上jenkins帮我们做了事情主要有如下几个:

  • 从仓库中克隆代码;
  • maven的clean install
  • 当build成功后,将相应的文件传输到我们指定的服务器中(此处传输的是jar包);
  • 定时重复上述步骤。
    由此可见,jenkins并没有使我们项目启动起来,为此我们需要编写启动脚本。
#!/bin/bash
function killproject()
{
  project_pid=$(netstat -lnp | grep 18099|awk '{print $7}'|cut -d/ -f1)
  if [  $project_pid > 0 ];then
        echo "项目已经启动了,开始关闭项目,项目pid为: $project_pid "
        kill -9 $(netstat -lnp | grep 18099|awk '{print $7}'|cut -d/ -f1)
        echo '项目关闭成功,开始重启项目。。。'
  else
        echo "项目未启动,直接启动"
  fi
}
function start_project()
{
        source /etc/profile
        echo '正在启动项目。。。'
        cd /usr/local/jenkins-jar/
        nohup java -jar demo-0.0.1-SNAPSHOT.jar >warpper.log &2>1 &

}
function check_project()
{
  check_pid=$(netstat -lnp | grep 18099|awk '{print $7}'|cut -d/ -f1)
  if [ $check_pid  > 0 ];then
        echo "project is start and  pid = : $check_pid  "
  else
        echo "project are not start"
  fi

}
killproject
start_project
sleep 30
check_project

代码分析,其中:

  • killproject()函数作用是查看系统中该项目是否已启动,若已启动,则先kill掉该进程,再启动;若未启动,则直接启动。
  • start_project()函数作用是进入我的jar包存储路径,并后台运行,函数中的source /etc/profile目的是使项目可以后台启动(其实我没加的时候,后台启动项目一直不能用,报错找不到java环境)。
  • check_project()函数作用是检查项目是否正常启动,可以在jenkins控制台中看到输出信息。
  • sleep 30是为了等待我的springboot启动完,然后我们查看它的进程id.
4 构建项目
  • 点击立即构建,就可以完成项目的自动部署了,控制台中我们可以看到项目的启动信息。项目正式部署完成。