简单说明
- 服务器环境:maven, JDK, jenkins使用maven的插件, 部署war包的插件
maven用于将java源码编译成war包 - 客户机环境(需要部署web程序的机器,可以是远程的也可以是jenkins本机):tomcat, JDK
- 其他git,java项目源码
源码准备
- 模拟真实的情况需要有一个私有git保存着代码
- jenkins使用私有库时需要用密码或密钥
- 这里使用github库
- 源码为zrlog源代码,需要修改代码,设置数据库信息(让编译好的程序可以跟客户机的数据库对应上)需要修改zrlog源码的pom,或根据pom建立相应的数据库;
源码:
https://github.com/tanyyinyu/mzrlog.git
需导入的数据库初始设置(在上面的git里)
[root@iZwz9hctpdhmfmjaa93skoZ mzrlog]# ls /root/mzrlog/zrlog/data/zrlog.sql #初始设置跟上面的源码匹配,使用新版本的源码,这个数据库数据文件应该是不合适的;
/root/mzrlog/zrlog/data/zrlog.sql
[root@iZwz9hctpdhmfmjaa93skoZ mzrlog]# cat src/main/webapp/WEB-INF/db.properties
driverClass=com.mysql.cj.jdbc.Driver
user=zr
password=password
jdbcUrl=jdbc\:mysql\://127.0.0.1\:3306/zr?characterEncoding\=UTF-8&useSSL\=false&serverTimezone\=GMT
需要新建zr库,用户zr,密码password,host127.0.0.1
编译完成,数据库信息对不上,错误代码404,找不到内容
需要部署的机器安装tomcat和设置好tomcat管理功能
- https://blog.csdn.net/tanyyinyu/article/details/102700704 安装tomcat
- https://blog.csdn.net/tanyyinyu/article/details/102718491 tomcat管理功能
jenkins机器部署jdk
- 下载JDK和使用JDK而不是openjdk, 使用openjdk支持maven会有问题
- 下载后解压缩到 /usr/local/jdk1.8.0_101
- 修改环境变量,确保系统会使用JDK(虽然jenkins可另外指定JDK和maven的目录)
- shell部署jdk,tomcat, maven
https://github.com/tanyyinyu/tomcat.git
<root@linux0 ~>$ vi /etc/profile #后面加上这两句;
export JAVA_HOME=/usr/local/jdk1.8.0_101
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
<root@linux0 ~>$ source /etc/profile #使配置生效,也可以退出ssh,再登陆一次;
<root@linux0 ~>$ ln -s /usr/local/jdk1.8.0_101/bin/java /bin/java #可能还要做软链接;
安装maven
- maven使用上来说有很多功能,这个实验里,个人看到的,是按照源码的需求找到源码需要的类(每个人用的类的版本可能不一样,不方便管理而产生的工具),类会通过标准的库下载,所以编译有很多下载过程(外国服务器,很难下载完全,需要建立库的镜像),将这些类打包在一起,让程序可以调用
- 下载地址 https://maven.apache.org/download.cgi
- wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz
- tar zxvf apache-maven-3.5.2-bin.tar.gz
- mv apache-maven-3.5.2 /usr/local/
- /usr/loca/apache-maven-3.5.2/bin/mvn --version
<root@linux0 ~>$ /usr/local/apache-maven-3.6.3/bin/mvn -version #这里也可以看到使用的java来自哪个目录;
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/apache-maven-3.6.3
Java version: 1.8.0_101, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8.0_101/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
Maven私有仓库搭建以及使用
- 配置好以后下载编译时,下载各种文件才会快和顺畅
- https://www.cnblogs.com/wuwei928/p/10338307.html
- Repositories 则用来配置远程资源和本地资源,其中支持Proxy类型资源,表示远程资源的镜像,host类型的资源表示本地资源,用于保存第三方资源或团队内部共享的资源等。group类型资源是组,可以将多个proxy或host类型的资源构建成一个组,供Maven使用等
安装nexus,添加几个常用的库,然后把库加到public组里面;
设置maven setting使用mirror为public组,后面还跟着profile的设置,一并使用上; - Maven配置使用Nexus, 文章里的配置文件可直接使用,把6个IP和端口号要修改好;
<mirror>
<id>HolliParkMirror</id> #mirror id;
<mirrorOf>*</mirrorOf> #代理所有远程资源;
<name>HolliPark Repository Mirror.</name> #可省略;
<url>http://47.113.112.37:8081/nexus/repository/maven-public/</url> #本地nexus服务器地址;
</mirror>
</mirrors>
<root@linux0 ~>$ vim /usr/local/apache-maven-3.6.3/conf/settings.xml
:1,$s/localhost:8082/192.168.87.150:8081/g #配置成你容器的IP;如果nexus安装在本地(将要部署java的机器上),可使用localhost或127.0.0.1;
-
其他信息
-
docker WARNING: IPv4 forwarding is disabled. Networking will not work.
https://www.jianshu.com/p/53681806c753
处理docker 容器不能访问的问题,打开转发 -
distributionManagement
-
修改项目源码的pom.xml, 此pom.xml是项目源代码里的文件也需要修改IP和端口号
这里用于管理发布的war包,快照保存非正式版,releases保存正式版,可以在pom文件里修改version实现这个目标,这个实验里,不设置应该也是可以的,设置了没有看到效果。
<distributionManagement>
<repository>
<id>releases</id>
<name>Nexus Release Repository</name>
<url>http://192.168.87.150:8081/nexus/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://192.168.87.150:8081/nexus/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
jenkins部署java项目,综合使用以上的环境
- 系统管理 -> 管理插件,检查是否已经安装 Maven Integration plugin 和 Deploy to container Plugin,若没有安装>则需要安装这两个插件,安装好插件重启后再新建项目
- deploy会把编译好的war包放到webapps里,可以通过IP+8080/包名 访问
-
设置maven路径和JDK路径,在jenkins本地配置项目
-
安装完插件后,需要重启jenkins
systemctl restart jenkins -
创建新任务
登录jenkins,点击“新建”,任务名称自定义(我的叫做java-test)
选择“构建一个maven项目”
点击“确定” -
源码管理
选择 “git”, Repository URL填写你的git地址,并配置对应的key,大家最好事前先在jenkins这台机器上能够直接远程
git操作私有仓库 -
构建触发器、构建环境、Pre Steps保持默认
-
Build
“Root POM”为pom.xml, Goals and options 填写 clean install -D maven.test.skip=true
-
Post Steps、构建设置保持默认
-
构建后操作
点击“增加构建后操作步骤”选择“Deploy war/ear to a container”,“WAR/EAR files”填写“**/*.war”,Contex path留空
,Containers选择Tomcat 8.x(选择你的tomcat版本),Tomcat URL填写要把war包发布到的那台机器的url,如http://172.7.15.114:8080
Credentials这里需要点击右侧的Add,添加用户名和密码(tomcat管理功能的帐号和密码)
-
继续点击“增加构建后操作步骤”选择“Editable Email Notification”
Project Recipient List,改为$DEFAULT_RECIPIENTS,aming_test@163.com, 意思是增加额外一个收件人 -
点击右下角的“Advanced settings”,定位到“Triggers”,然后点击下方的“Add Trigger”,可以增加发邮件的条件。
-
最后点左下角的“保存”
-
之后就可以点左侧的“立即构建”,然后查看对应任务的“Console Output”
成功信息:
Waiting for Jenkins to finish collecting data
[JENKINS] Archiving /var/lib/jenkins/workspace/maven/pom.xml to com.zrlog/zrlog/1.8.0/zrlog-1.8.0.pom
[JENKINS] Archiving /var/lib/jenkins/workspace/maven/target/zrlog-1.8.0.war to com.zrlog/zrlog/1.8.0/zrlog-1.8.0.war
channel stopped
[DeployPublisher][INFO] Attempting to deploy 1 war file(s)
[DeployPublisher][INFO] Deploying /var/lib/jenkins/workspace/maven/target/zrlog-1.8.0.war to container Tomcat 9.x Remote with context null
Redeploying [/var/lib/jenkins/workspace/maven/target/zrlog-1.8.0.war]
Undeploying [/var/lib/jenkins/workspace/maven/target/zrlog-1.8.0.war]
Deploying [/var/lib/jenkins/workspace/maven/target/zrlog-1.8.0.war]
Finished: SUCCESS