使用 Jenkins 自动化部署 Java Web 程序

Jenkins 是一个开源软件,旨在提供一个开放易用的软件平台,是软件的持续集成变成可能。

功能

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

  1. 持续的软件版本发布/测试项目;
  2. 监控外部调用执行的工作。

安装

Jenkins 安装比较简单,可以参考官方文档。

CentOS为例:

1
2
3
4
5
$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
$ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
$ yum install jenkins

Jenkins 基础配置

在开始自动化任务之前需要配置一些系统的基础项,比如安装必要的插件,配置相应服务器的证书等。

安装 Jenkins 插件

进入 系统管理 - 插件管理 可以看到 可更新 | 可选插件 | 已安装这几项,可选插件中可以选择安装我们需要的插件。

jenkins1

推荐几个插件:

  • GitLab Plugin
  • GIT plugin
  • Gradle plugin
  • Publish Over SSH
  • SSH Credentials Plugin

Jenkins 系统配置

Jenkins 并不能单独完成一套完整的自动化构建流程,它需要搭配其它工具,如 Git/SVN, Gradle/Maven, SSH/FTP...等等。

进入系统管理 - 系统设置,我会一一讲解各个参数。

JDK

在安装 Jenkins 之前,应该已经先安装 JDK 了,我们只需要将相应的路径填入即可。(这里也可以通过 Jenkins 自动安装,不推荐。)

jenkins_jdk

Git

我用的代码管理工具是 GitLab,Jenkins 服务器上需要安装好 Git 客户端,一般 Linux 服务器默认都已安装好,把路径填入即可。

jenkins_git

Gradle

我们公司项目管理用 Gradle, 相应的 Jenkins 服务器需要安装好 Gradle, 并把路径填入。

jenkins_gradle

Publish over SSH

Jenkins 有多种代码部署方式,我选择的是 SSH,记得配置证书。

jenkins_ssh

这里可以配置多台需要推送的服务器信息。

jenkins_server

Tip

这里无论是 Jenkins 从 GitLab 上拉取代码,还是推送应用到服务器上,都推荐使用 SSH,并且配置证书。

可以在 GitLab 不同的项目 Settings - Deploy Keys里授权给相应的 Jenkins 项目。

同样,只给相应的应用服务器部署 Jenkins 服务器的 SSH 公钥。

其它配置

由于我这里使用的是 Git、Gradle、SSH 等功能,配置 SVN、Maven、FTP 基本类似,安装好相应的程序配置好目录即可。

详细的配置和说明可参考官网文档。

Jenkins 任务

完成以上一系列基本配置之后就可以开始创建 Jenkins 任务了。

首页 - 新建

输入任务名称。

这里可以选择几种创建方式,如果你不了解而且是第一次的用户建议选择`构建一个自由风格的软件项目`。

jenkins_job1

一次基本的构建过程包括以下五个步骤:

  1. 源码管理
  2. 构建触发器
  3. 构建环境
  4. 构建
  5. 构建后操作

源码管理

以 Git 为例,需要配置三个主要参数:

  • Repositories 仓库地址
  • Credentials 用户授权
  • Branched to build 构建分支

jenkins_job_git

构建触发器

触发器可以设置一些触发构建的条件,如钩子、定时任务等…如下图所示每15分钟检测一次远端仓库是否有更新。

jenkins_job_hook

构建环境

  • Send files or execute commands over SSH before the build starts
  • Send files or execute commands over SSH after the build runs

构建

这里是主要编译打包代码环节,可选多种方式,这里介绍使用 shell 和 gradle 两种。

Gradle比较简单,项目根目录写好 build.gradle文件,这里直接配置gradle参数 clean build即可。

jenkins_job_build1

如果项目不支持 Gradle 或其它管理工具,需要写一些简单的脚本来编译打包。

jenkins_job_build2

构建后操作

构建好后需要推送到远端应用服务器,有时还需要执行一些命令来重启相应的应用或执行一系列操作。

jenkins_job_push

顺便附上我部署 tomcat 应用以及重启的脚本。jenkins_deploy.sh

后记

Jenkins 的功能远不止这些,它可以结合很多组件构建一个完整的系统。

TODO