什么是Jenkins?
Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
用于监控持续重复的工作,功能包括:
1、持续的软件版本发布/测试项目。
2、监控外部调用执行的工作。
为什么要用Jenkins?
是所有CI产品中在安装和配置上最简单的。
基于Web访问,用户界面非常友好、直观和灵活,在许多情况下,还提供了AJAX的即时反馈。
Jenkins是基于Java开发的(如果你是一个Java开发人员,这是非常有用的),但它不仅限于构建基于Java的软件。
Jenkins拥有大量的插件。这些插件极大的扩展了Jenkins的功能;它们都是开源的,而且它们可以直接通过web界面来进行安装与管理。
准备工作
这里需要说明下,本次搭建是在Ubuntu16.04上完成的搭建(Maven + Git + Tomcat ),不同的Linux系统搭建可能有些细微的差别
Tomcat的安装
Tomcat 8.0.43官方下载地址(http://apache.fayea.com/tomcat/tomcat-8/v8.0.43/bin/apache-tomcat-8.0.43.tar.gz)
下载完把Tomcat目录下面的东西放到 /usr/local/tomcat 下面
然后把CATALINA_HOME配置好,并想办法开机启动Tomcat
mv apache-tomcat-8.0.43 /usr/local/tomcat
配置开机启动Tomcat
在/etc/init.d/ 新建脚本 命名为tomcat
#!/bin/sh
#tomcat auto-start
# description: Auto-starts tomcat
# processname: tomcat
# pidfile: /var/run/tomcat.pid
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
case $1 in
start)
sh /usr/lib/tomcat/bin/startup.sh
;;
stop)
sh /usr/lib/tomcat/bin/shutdown.sh
;;
restart)
sh /usr/lib/tomcat/bin/shutdown.sh
sh /usr/lib/tomcat/bin/startup.sh
;;
*)
echo 'Usage:tomcat start|stop|restart'
;;
esac
给tomcat赋予可执行权限
sudo chmod +x tomcat
配置符号链接
sudo ln -s /etc/init.d/tomcat /etc/rc1.d/K99tomcat
sudo ln -s /etc/init.d/tomcat /etc/rc2.d/S99tomcat
安装sysv-rc-conf
sudo apt-get install sysv-rc-conf
sudo sysv-rc-conf
这时候会进入启动项管理
在刚才添加的tomcat上面使用空格选中上2 3 4 5( X 代表被选中)
在Tomcat安装这里其实没什么特别的,刚开始就碰到问题了,图方便用apt-get直接装的tomcat 7,结果出了很多问题,后来去apache官网下的Tomcat 9结果更有问题了,Tomcat 9 M19版里面使用Jenkins自动化部署会报错FAIL - Deploy Upload Failed,查看了下host-Manager的启动日志,发现报的错误是Exception: Cannot find operation isServiced,去搜索,发现Tomcat M19版这里面确实是有问题的,已经提了Bug,并且将会在Tomcat M20版本解决这个问题,只好下了个Tomcat 8,结果立马就好使了。
JDK的安装
我这边是从官网下载的JDK,解压完之后替换掉系统的JDK。
我这里把jdk解压完放在了/usr/local/jdk/
配置环境变量
vi /etc/profile
#在文件默认追加
export JAVA_HOME=/usr/local/jdk
PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
编辑完成后,使更改立即生效
source /etc/profile
对应地替换系统SDK
sudo update-alternatives --install /usr/bin/java java /usr/local/jdk/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/local/jdk/bin/javac 300
Maven安装
wget http://apache.fayea.com/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar -xvzf apache-maven-3.3.9-bin.tar.gz
sudo mv apache-maven-3.3.9-bin /usr/local/mvn
这里就完成了 maven的下载解压以及移动到/usr/local/mvn目录
然后配置系统环境变量
vi /etc/profile
#在文件末尾追加
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:MAVEN_HOME
编辑完成后,使更改立即生效
source /etc/profile
git 安装
sudo apt-get install git
开始安装
Jenkins的安装
sudo apt-get install jenkins
这里也可以选择去官网下载Jenkins的war包扔到Tomcat的webapps目录
安装完需要修改Jenkins的默认端口号(默认8080与Tomcat冲突)
准备插件
因为GFW的影响,Jenkins安装过程可能不能把全部插件都能安装完毕,有红叉的时候直接跳过,过后再从Jenkins官网(https://plugins.jenkins.io/)安装即可
必备的插件有
Github
SSH
Deploy to Container Plugin
邮件提醒插件(可能已经内置了)
去官网下好后进到本地Jenkins管理界面->系统管理->插件管理->高级
把刚才下载的插件上传上去
一起安装完毕再重启
然后进系统管理->Global tool configuration
把安装好的JDK、Maven、git设置好,然后就可以新建项目了,我这里面比较偷懒,直接让Jenkins在线安装了一个JDK
完成安装,新建项目
源码管理
源码管理这里我们选择git,上面添上你的远程仓库地址
配置SSH免密登录
下面的Credentials可以配置SSH免密登录远程仓库
需要在本地生成一个SSHKey
ssh-keygen -t rsa -P ''
输入一次回车即可
Ubuntu 不像Mac里面有Pbcopy这样方便的工具,需要安装一个xclip来复制我们生成的公钥。
sudo apt-get install xclip
将
cat ~/.ssh/id_rsa.pub |xclip -selection c
这样新生成的公钥就进到我们的粘贴板里面了
把这个公钥扔进远程仓库的SSHkey里面
同样地、在刚才的Credentials新建,类型选择 SSH with private key,选择from ~/.ssh
Username 随便起 比如起24k
然后回到Credentials就可以选择24k了
配置构建触发器
构建触发器这里,可以配置定时任务用来定时构建你的Web项目
这里我选的是POLL SCM,它会按照你给定的时间去检查远程代码仓库的版本信息,并自动拉取到你的机器上完成构建动作,这里可以配置日程表定时构建,这里面给出常用日程表配置
每15分钟构建一次:H/15 * * * * 或/5 * * *
每天8点构建一次:0 8 * * *
每天8点~17点,两小时构建一次:0 8-17/2 * * *
周一到周五,8点~17点,两小时构建一次:0 8-17/2 * * 1-5
每月1号、15号各构建一次,除12月:H H 1,15 1-11 *
配置构建完成后自动部署至Tomcat容器
构建完成后可以配置构建后的操作,这里就要用到刚才安装的deploy to container插件了。
新增构建后操作,选择deploy war/ear to container
这里面选择的Tomcat 7.x
这里对参数解释一下
WAR/EAR就是你要发布的WAR包,用的是相对路径
Context Path 就是你的项目发布后的访问路径 比如http://xxx.xxx.xx:8080/Context Path
Manager user name
Manager password
Tomcat Manager是Tomcat自带的、用于对Tomcat自身以及部署在Tomcat上的应用进行管理的web应用。Tomcat是Java领域使用最广泛的服务器之一,因此Tomcat Manager也成为了使用非常普遍的功能应用。Tomcat 默认Manager User是没有启用的,所以我们要启用Manager的用户
Manager应用使用的是 Tomcat安装目录下conf/tomcat-users.xml的文件,找到并打开
sudo vi /usr/local/tomcat/conf/tomcat-users.xml
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="both" password="both" roles="tomcat,role1"/>
<user username="role1" password="role1" roles="role1"/>
上面这几行 默认是被注释掉的,把注释干掉,并加上下面的几行
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<role rolename="manager-script" />
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager,manager-script"/>
文件尾部的完整配置
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="both" password="both" roles="tomcat,role1"/>
<user username="role1" password="role1" roles="role1"/>
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<role rolename="manager-script" />
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager,manager-script"/>
文件里面的 user 现在用户名密码全都是 tomcat,需要的话可以自行修改成别的。
我们这里现在就可以在Manager 的username上添上你填好的username和password和tomcat-users.xml配置文件里面的对应,我的这里面全都是tomcat.
这样就算配置完成了.
完成所有配置后对项目立即构建,然后点开Console Output就可以查看到构建日志了,没有什么问题的话就完成了构建。
可能遇到的问题
1.Linux 系统是多用户的,所以在这种环境的配置上不同的用户很容易出问题
2.使用Maven搭建项目的时候,依赖包解析失败,我的POM里面有个Ojdbc14,因为Oracle已经收费了,所以我们需要把这个jar包打到自己的Maven本地仓库里面
这里需要切到对应的jar包目录执行下面的命令,注意用Jenkins部署的时候会产生一个Jenkins用户,所以打包时候一定要切到Jenkins用户,否则就需要自己把jar包拖拽到/home/Jenkins/目录下的maven仓库下面了
打包命令是
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.3.0 -Dpackaging=jar -Dfile=ojdbc14.jar -DgeneratePom=true
这里,我的Ojdbc14.jar是10.2.0.3.0版本,在下载的时候,可以自行改成你对应的版本
Pom.xml里面也要依赖就写你打包的jar版本就可以了,比如我这里
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.3.0</version>
</dependency>