Jenkins+GitHub+Maven一键发布
为了学习一下工作中常用到的jenkins,于是挑了个最简单的模式动手操作了一遍。
环境->阿里云服务器:CentOS7.0
https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=pvezicr7
项目->网上找一个可在本地跑的Maven项目
安装JDK1.8、Git、Maven
已经安装的同学请忽略
JDK1.8请移步:https://www.cnblogs.com/zs-notes/p/8535275.html
Git请移步:http://weibingsheng.cn/blog/index.php/home/index/read.html?id=285
Maven请移步:https://www.cnblogs.com/jimisun/p/8054819.html
注意:配置JDK和Maven的环境变量
安装Tomcat
已经安装的同学请忽略
以下操作命令都在根目录执行
下载tomcat安装包:
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.4/bin/apache-tomcat-8.5.4.tar.gz
解压安装包:
tar -zxvf apache-tomcat-8.5.4.tar.gz
在根目录下执行(local目录中创建tomcat目录):
mkdir /usr/local/tomcat
将tomcat相关文件移动到创建的tomcat目录:
mv apache-tomcat-8.5.4/* /usr/local/tomcat
启动Tomcat:
cd /usr/local/tomcat/bin //进入bin目录下:
./startup.sh //启动tomcat
./shutdown.sh //关闭tomcat
修改tomcat8相关配置
修改tomcat-users.xml文件:
vi /usr/local/tomcat/apache-tomcat-8.5.4/conf/tomcat-users.xml
主要为了jenkins通过maven实现tomcat下热部署所做的配置,我们知道tomcat manager可以在不停止tomcat的情况实现war的部署。这样,在jenkins中项目通过Maven打包后直接放在tomcat的webapps目录下后tomcat就会自动发布。
配置role和user是的maven可以获得操作tomcat的权限,修改tomcat的tomcat-users.xml文件,添加如下配置:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>
这里配置的username,password在jenkins中会用到
然后开放manager访问权限(这一步一定不能少,不然会报权限错误):
【权限错误:org.codehaus.cargo.container.tomcat.internal.TomcatManagerException:
The username you provided is not allowed to use the text-based】
修改webapps/manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" >
<!--注释掉这里-->
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />-->
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
安装Jenkins
jenkins可以直接下载运行;也可以只下载war包格式,然后放到tomcat的webapps中启动;jenkins本来就是一个webApp。
这里我下载了可以直接运行的jenkins。
$ yum install yum-fastestmirror -y #安装自动选择最快源的插件
#添加Jenkins源:
$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://jenkins-ci.org/redhat/jenkins.repo
$ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
$ yum install jenkins #安装jenkins
启动方式:
$ sudo service jenkins start
访问方式:
浏览器输入http://你服务器的公网ip:8080/
tomcat和jenkins的端口如果冲突就选择其中一个修改端口
Jenkins如果要更改配置(端口):
$ vim /etc/sysconfig/jenkins
$ sudo service jenkins restart
修改端口
然后我们在浏览器输入http://你服务器的公网ip:8080/后便可以访问自己的jenkins了,当您第一次访问新的Jenkins实例时,系统会要求您使用自动生成的密码对其进行解锁。
根据上面提示在linux的根目录下执行
cat /var/jenkins_home/secrets/initialAdminPassword
找到密码后,直接复制到输入框中,点击继续,进入一下界面,证明解锁成功
点击推荐安装(install suggested plugins)即可,如果安装失败可以跳过,之后再在jenkins管理界面手动安装就行。
下载完成后会让创建一个管理员用户,需要设置用户名、密码等。默认配置即可。管理员相关配置完成后,需要重启,点击重启。
浏览器再次输入你的服务器IP:8080,便可进入到登录页,输入上面设置的管理员用户名和密码即可登录到管理后台。
登陆界面手动安装需要的插件(maven和热部署),进入到管理后台后
点击系统管理->插件管理->可选插件
过滤搜索框输入Maven Integration来搜索Maven Integration插件。
过滤搜索框输入Maven Integration来搜索Maven Integration插件。
点击直接安装(install without restart)。下面搜索并安装热部署插件Deploy to container,安装完这俩插件了,需要重启jenkins。
注意:可以自行去查一下jenkins启动Maven常用的插件安装,这里就不赘述了
进入jenkins管理后台配置jdk、maven、git
进入到管理后台后,点击系统管理->全局工具管理
配置git,由于git在linux下安装还需要其他的依赖库,在容器内安装这些比较麻烦,所以这里直接让jenkins自行安装。勾选自动安装单选框。
创建一个maven项目并实现自动化部署
条件:maven类型的、github上的Web项目;已经启动的tomcat8的应用服务器。
注意:若在同一台服务器上tomcat8和jenkins的端口冲突
jenkins创建maven任务,点击新建任务,进入创建界面。
进入配置界面:首先配置general,勾选github。并填写github上项目地址。
构建后操作:配置maven生成war信息、上下文及web容器信息、Credentials 和tomcat Url。
WAR/EAR files选择你需要部署的war包在工作空间下的**相对路径**
Context path意为发布到目标tomcat的webapp后的文件夹名字
Credentials 需要先添加一个用户,点击添加,用户名和密码是tomcat_user.xml中配置的
Tomcat URL 就是你需要连接的tomcat地址和端口号
到此配置基本完成,点击应用,保存。
手动构建,测试下:进入到已经创建的任务界面,点击立即构建。点击左下角的 build history 查看控制台日志(console Output)。第一次构建会有点慢,需要等一会儿。
注意点:项目中的数据库是连接的本地的话就需要换掉,如果用远程服务器的数据库记得远程授权。
如果报了类似这样的错误:the Tomcat Manager responded "FAIL - " instead of the expected "OK" message
那就要去tomcat中查看下报错,可以能是项目报错了。
例如:# [java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect to database in eclipse [closed]](https://stackoverflow.com/questions/11869697/java-sql-sqlexception-access-denied-for-user-rootlocalhost-using-password)
就需要用一个能够远程访问的数据库了。
以上笔记只作为一个基础来看,若有错误还请指正,后面还有很多扩展的内容要学习,比如:不同场景下jenkins的配置、Maven打包时对于dev,uat等环境下的自定义操作、手写shell脚本等等。。。路漫漫其修远兮。