Jenkins部署java-maven项目
Jenkins是什么?
Jenkins是一个用java编写的开源的持续集成平台。
首先理解几个概念
- 持续集成(Continuous Integration),在传统的软件开发中,项目的整合是在项目开发结束所有人提交了代码之后。而持续集成,是在项目的开发过程中不断地进行环境构建、功能的测试与集成。
- 持续交付(Continuous Delivery),每次对代码进行了更改,会自动在当前环境中进行测试,然后提交给下一个更接近正式的工作环境进行测试。
- 持续部署(Continuous Deployment),每次对代码进行了更改,通过了所有的测试,都会将其部署到正式环境中。
我的理解:项目周期 = 程序开发 + 环境部署 + 功能测试 + 项目上线。一个完整的项目,从开发到上线要经过多次的测试、调优。一个多人开发的项目,如果项目开发与运维分开,那最后的项目整合一定是痛苦的。而持续集成的作用就是:在项目的开发过程中不断地进行环境构建、功能的测试与集成。也就是说开发与运维在同时进行,项目如果会出现问题是在第一时间发现的,而不是等到将要上线时一大堆问题才引面而来。
项目持续集成的流程图
多人开发的项目,代码提交(CHECK-IN)到版本库(SOURCE REPOSITORY)后,集成工具Jenkins能够进行: 环境的构建(BUILD) | 测试环境(TEST)的功能测试 | 过渡环境(STAGING)的功能测试 | 正式环境(PRODUCTION)的功能测试。这种流水线式的流程,能够保证项目中的BUG及时被发现(在正式环境测试之前)。
传统的项目开发周期
持续集成的项目开发周期
还想深入了解持续集成、持续交付、持续部署,可参考什么是持续集成
Jenkins的简要运用
环境配置
我的目的是:在虚拟机上用Jenkins部署java-maven项目。因此,需要先配置JDK,MAVEN环境。
- JDK配置
# 获取本机的位数
getconf LONG_BIT
# 我的虚拟机:64位。下载的jdk版本为(Linux64 jdk-8u161-linux-x64.tar.gz),将压缩包放在(/usr/local/env/java8)下,进行解压
cd /usr/local/env/java8
tar -xzvf jdk-8u161-linux-x64.tar.gz
# 编辑/etc/profile
vim /etc/profile
# 加入如下配置
export JAVA_HOME=/usr/local/env/java8/jdk1.8.0_161
export JRE_HOME=/usr/local/env/java8/jdk1.8.0_161/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$PATH:$JAVA_HOME/bin
# 保存退出后,使该配置文件即刻生效
source /etc/profile
# 使用如下命令,能正确显示信息,说明环境配置成功
java -version
如果安装的版本不对,会报错如下:-bash: /usr/local/env/java8/jdk1.8.0_161/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录,需要根据自己虚拟机位数选择正确的JDK安装包。
- MAVEN配置
# 在官网下载(apache-maven-3.5.3-bin.tar.gz),将压缩包放在(/usr/local/env/maven),进行解压
cd /usr/local/env/maven
tar -xzvf apache-maven-3.5.3-bin.tar.gz
# 编辑/etc/profile
vim /etc/profile
# 加入如下配置
MAVEN_HOME=/usr/local/env/maven/apache-maven-3.5.3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
# 保存退出后,使该配置文件即刻生效
source /etc/profile
# 使用如下命令,能正确显示信息,说明环境配置成功
mvn -version
出现如下页面说明环境部署成功:
安装Jenkins
# 导入最新版jenkins的资源
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
# 获取最新版jenkins的密钥(证书错误的信息可以忽略)
rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
# 安装jenkins
yum install jenkins
# 由于jenkins提供的服务默认暴露在8080端口,可能被占用。
# 修改配置文件
vim /etc/sysconfig/jenkins
# 改为在8081端口提供服务
JENKINS_PORT="8081"
# 修改jdk配置
vim /etc/init.d/jenkins
# 在candidates=""中加入JAVA_HOME
/usr/local/env/java8/jdk1.8.0_161/bin/java
# 启动jenkins服务
service jenkins start
安装Jenkins成功后,Jenkins的目录结构如下:
功能模块 | 路径 |
---|---|
主目录 | /var/lib/jenkins |
war包 | /usr/lib/jenkins/jenkins.war |
配置文件 | /etc/sysconfig/jenkins |
启动脚本 | /etc/init.d/jenkins |
日志 | /var/log/jenkins |
访问jenkins_server_ip:8081可看到如下页面:
第一次使用Jenkins,需要核对密钥,该密钥在上述路径的文件中。
将该密码复制粘贴到输入框中,点击继续。进入如下页面,直接选择安装推荐的插件
这些插件,都是协助jenkins进行项目的集成的。
插件安装成功后,后跳转到用户注册页面—ps:之前用的是管理员身份,注册成功后,请牢记身份和密码。
注册之后,重新启动jenkins
service jenkins stop
service jenkins restart
再次访问jenkins_server_ip:8081,能够进入jenkins的主界面如下:
安装如下插件:
- 系统管理 > 管理插件 > 可选插件 > Maven Integration
在 系统管理 > 全局工具配置 中指定需要的JDK以及MAVEN(名称可以随便指定,这里为了增加可读性,分别配置如下: java8:/usr/local/env/java8/jdk1.8.0_161 , maven3.5.3:/usr/local/env/maven/apache-maven-3.5.3),这里的地址就是java8,maven3.5.3在虚拟机上安装的地址
- JDK
- MAVEN
部署项目—learnjenkins
在所有必需的插件安装成功后,点击新建一个maven项目如下:
对该项目进行如下配置
- General
- 源码管理(这里的URL是我在github上新建的一个用来学习jenkins的maven项目)
- 构建触发器(每次有代码提交到GitHub时,进行构建)
- Build(构建时,进行打包)
- 其余的配置,可以根据实际需求进行改动。
点击应用。返回主界面,可以点击立即构建。点击控制台输出,构建成功后的日志如下:
构建成功后,再次修改代码如下:
3分钟后,发现Jenkins检测到了GitHub上项目版本的更新,并自动帮我们进行了构建。
总结
现在,已经实现了Jenkins帮助我们进行项目的自动构建。由于我们现在开发的项目是由SVN控制,并部署在Docker上。
因此,下一步的计划是:
- 改用SVN进行版本管理
- 整合Jenkins与Docker