Jenkins+maven+git实现自动化打包部署

Jenkins+maven+git实现自动化部署

Jenkins简述

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

jenkins原理

Jenkins+maven+git实现自动化打包部署_第1张图片

安装java

Jenkins是运行在Java环境中的,要先安装Java并配置Java环境变量才能使用
我的服务器已经安装了Java,先卸载系统自带java

[root@localhost ~]# java -version
java version "1.7.0_75"
OpenJDK Runtime Environment (rhel-2.5.4.2.el7_0-x86_64 u75-b13)
OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)
[root@localhost test]# yum remove java* -y

下载解压至/usr/local目录下

[root@localhost local]# tar -zxvf /root/Desktop/jdk-8u171-linux-x64.tar.gz -C .

配置java环境变量

[root@localhost local]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_171
export PATH=$JAVA_HOME/bin:$PATH
[root@localhost local]# which java
/usr/local/jdk1.8.0_171/bin/java

安装Jenkins

Jenkins官网地址https://jenkins.io/,选择合适的版本进行下载

[root@localhost ~]# cd Downloads/
[root@localhost Downloads]# ls
jenkins-2.225-1.1.noarch.rpm
[root@localhost Downloads]# rpm -ivh jenkins-2.225-1.1.noarch.rpm 
warning: jenkins-2.225-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID d50582e6: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:jenkins-2.225-1.1                ################################# [100%]

启动Jenkins

[root@localhost Downloads]# systemctl start jenkins.service
[root@localhost Downloads]# ps -ef |grep jenkins
root      44964  14391  0 17:47 pts/0    00:00:00 grep --color=auto jenkins

通过ps命令发现并没有Jenkins相关进程

[root@localhost Downloads]# systemctl status jenkins
jenkins.service - LSB: Jenkins Automation Server
   Loaded: loaded (/etc/rc.d/init.d/jenkins)
   Active: active (exited) since Fri 2020-03-13 18:27:04 CST; 7s ago
  Process: 45725 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS)

Mar 13 18:27:02 localhost.localdomain systemd[1]: Starting LSB: Jenkins Automation Server...
Mar 13 18:27:02 localhost.localdomain runuser[45726]: pam_unix(runuser:session): session opened for user jenkins by (uid=0)
**Mar 13 18:27:04 localhost.localdomain jenkins[45725]: Starting Jenkins Jenkins requires Java8 or later, but you are running 1.7.0_75-mockbuild_2015_01_16_09_12-b00 from** /usr/lib/jvm/java-1.7.0-op..._0.x86_64/jre
Mar 13 18:27:04 localhost.localdomain jenkins[45725]: java.lang.UnsupportedClassVersionError: 51.0
Mar 13 18:27:04 localhost.localdomain jenkins[45725]: at Main.main(Main.java:124)
Mar 13 18:27:04 localhost.localdomain jenkins[45725]: [  OK  ]
Mar 13 18:27:04 localhost.localdomain systemd[1]: Started LSB: Jenkins Automation Server.
Hint: Some lines were ellipsized, use -l to show in full.

查看报错是因为Java版本太低,要求Java8及更高的版本

那就重新安装Java8呗。。。

先卸载原有java

[root@localhost Downloads]# yum remove java -y

安装java8

[root@localhost Downloads]# yum install java-1.8.0-openjdk.x86_64 -y
[root@localhost Downloads]# java -version
openjdk version "1.8.0_31"
OpenJDK Runtime Environment (build 1.8.0_31-b13)
OpenJDK 64-Bit Server VM (build 25.31-b07, mixed mode)

重启Jenkins

[root@localhost Downloads]# systemctl restart jenkins
[root@localhost Downloads]# ps -ef |grep jenkins
jenkins   46018      1 53 18:38 ?        00:00:08 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
root      46064  14391  0 18:38 pts/0    00:00:00 grep --color=auto jenkins

Jenkins端口为8080

[root@localhost Downloads]# netstat -antlpe |grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      992        91410      46018/java

在浏览器中访问localhost:8080

Jenkins+maven+git实现自动化打包部署_第2张图片
Jenkins密码

[root@localhost secrets]# pwd
/var/lib/jenkins/secrets
[root@localhost secrets]# cat initialAdminPassword 
1128ca0815e444dd93fc5efdbe74f66d

选择安装Jenkins插件,这里选择推荐的就可以
Jenkins+maven+git实现自动化打包部署_第3张图片
创建用户并登陆
Jenkins+maven+git实现自动化打包部署_第4张图片

Jenkins+maven+git实现自动化打包部署_第5张图片

安装tomcat

下载地址
https://tomcat.apache.org/download-80.cgi
将tomcat解压安装到/usr/local目录下

[root@localhost local]# tar -zxvf /root/Downloads/apache-tomcat-8.5.53.tar.gz -C .

将apache-tomcat-8.5.53重命名为tomcat

[root@localhost local]# mv apache-tomcat-8.5.53/ tomcat

修改tomcat端口(tomcat默认端口为8080和Jenkins端口重复了会造成端口冲突)

[root@localhost conf]# vim server.xml 
[root@localhost conf]# pwd
/usr/local/tomcat/conf

Jenkins+maven+git实现自动化打包部署_第6张图片
启动并验证tomcat

[root@localhost bin]# sh startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]# ps -ef |grep java
jenkins   32410      1  0 10:26 ?        00:01:29 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
root      35742      1 26 14:25 pts/0    00:00:02 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root      35775   7759  0 14:25 pts/0    00:00:00 grep --color=auto java

Jenkins+maven+git实现自动化打包部署_第7张图片

maven安装

安装maven的目的是通过项目中的pom.xml文件自动解决项目依赖问题

下载maven

Jenkins+maven+git实现自动化打包部署_第8张图片
将maven放到/usr/local目录下

[root@localhost local]# pwd
/usr/local
[root@localhost local]# tar -zxvf apache-maven-3.3.9-bin.tar.gz

配置maven环境变量

[root@localhost apache-maven-3.3.9]# vim /etc/profile

export MAVEN_HOME=/usr/local/apache-maven-3.3.9
export PATH=$MAVEN_HOME/bin:$PATH

查看maven版本

[root@localhost apache-maven-3.3.9]# source /etc/profile
[root@localhost apache-maven-3.3.9]# mvn -v
which: no javac in (/usr/local/apache-maven-3.3.9/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin)
Warning: JAVA_HOME environment variable is not set.
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/apache-maven-3.3.9
Java version: 1.8.0_31, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.31-2.b13.el7.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-229.el7.x86_64", arch: "amd64", family: "unix"

安装git

安装git的目的是在自动化部署前实时从git远程仓库中拉取最新的代码。

git下载地址https://mirrors.edge.kernel.org/pub/software/scm/git/
Jenkins+maven+git实现自动化打包部署_第9张图片

解压编译

[root@localhost local]# cd git-2.1.0/
[root@localhost local]# make prefix=/usr/local/git all
[root@localhost local]# make prefix=/usr/local/git install
期间会有报错,按照报错提示安装openssl,pcre,perl等依赖包。

配置环境变量

[root@localhost .ssh]# vim /etc/profile
export PATH=$PATH:/usr/local/git/bin

配置git公钥并发送到github上

[root@localhost ~]# ssh-keygen -t rsa -C "******@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
3c:ba:ec:10:1e:12:14:ec:90:9c:ac:9e:16:4d:76:28 ********@qq.com
The key's randomart image is:
[root@localhost .ssh]# ls
id_rsa  id_rsa.pub
[root@localhost .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQy9dmvv2Wemd41RsnFwybR51MkohYxnk+91rYc8AdyaSrXt0Kf+Rr1GIkY7/UYxUC85wvn3gix/cyhpdhMXfwtr9VGAQfLLOIWDZ+9WsWybrA7SWxcap7pjmw+4MygJze+bGfzEdxiv6EjsfhiZeFwqYmEEiBGgjoTmWre3P+ULuZ2hHzpiU7/T0dV/5yVdgp64Rw7A5YCmCWAhqmwA2Shx+ad7Lcxj25KvwD/bLY10jAViyu03c2adkoUiNGjIM7BuWQc9x6KB/bY9BNAY4JQusBxC9VvKoEfA1Ab3F6Pj7nNnyT4vyUgFnOQzMqFsAmA1goO4xRG4KDeb4dVp7b *********@qq.com

开始构建一个简单的项目

输入一个项目名称,构建一个maven项目
Jenkins+maven+git实现自动化打包部署_第10张图片
(1)General

描述:this is a test 描述项目,自己随意添加;

显示名称:Jenkins-test 是Jenkins看到的项目名称;
Jenkins+maven+git实现自动化打包部署_第11张图片
源码管理
添加git库地址
Jenkins+maven+git实现自动化打包部署_第12张图片
构建Jenkins+maven+git实现自动化打包部署_第13张图片
Goals and options填写运行mvn命令的参数选项,按照本地打包命令填写“mvn”之外的内容

构建后操作
检查有没有Deploy_to_container插件,用来将war 发布到服务器上
Jenkins+maven+git实现自动化打包部署_第14张图片
填写应用发布信息
Jenkins+maven+git实现自动化打包部署_第15张图片
开始构建(构建之前先确保tomcat服务已启动)
Jenkins+maven+git实现自动化打包部署_第16张图片
查看控制台输出
Jenkins+maven+git实现自动化打包部署_第17张图片
看到有报错
Jenkins+maven+git实现自动化打包部署_第18张图片
在网上查看报错原因是在项目的配置中配置了使用本地maven 配置。改为系统默认配置即可。

Jenkins+maven+git实现自动化打包部署_第19张图片
应用保存之后再次构建

查看控制台输出,有报错了。。。
Jenkins+maven+git实现自动化打包部署_第20张图片
查看报错信息提示in directory "/var/lib/jenkins/workspace/test"没有test目录,那就创建
再次构建,又报错了。。。
Jenkins+maven+git实现自动化打包部署_第21张图片
提示git没有权限
因为Jenkins在拉取代码时使用Jenkins用户那就没有权限写入test目录,所以将test目录赋权

[root@localhost workspace]# chmod 777 -R test
[root@localhost workspace]# ll -d test
drwxrwxrwx. 2 root root 6 Mar 26 16:14 test

再次构建再次报错了!!!
提示没有pom.xml

Jenkins+maven+git实现自动化打包部署_第22张图片

这次报错是因为我们Jenkins创建的是一个maven项目而我的gitlab中只是我自己写的一个java文件,所以Jenkins找不到maven所需要的pom.xml文件,解决办法是自己创建一个maven项目并上传到gitlab,这里我已经创建好了,想了解如何创建一个maven项目的伙伴可以查看我的下一篇博客

再次构建
这次打包成功但将war包部署到tomcat时出现了保错,看报错内容应该是没有设置tomcat用户名密码导致。
Jenkins+maven+git实现自动化打包部署_第23张图片

修改tomcat conf目录下tomcat-users-xml文件

 [root@localhost conf]# vim tomcat-users.xml 
 "manager"/>
  "admin"/>
  "admin-gui"/>
  "manager-gui"/>
  "tomcat" password="tomcat" roles="admin-gui,manager-gui"/>

重启tomcat生效
同样在Jenkins中配置加入tomcat刚才配置的用户名和密码,之后应用保存
Jenkins+maven+git实现自动化打包部署_第24张图片

再次构建,还是保错,百度了一下,原因是权限问题
Jenkins+maven+git实现自动化打包部署_第25张图片

在tomcat-users-xml文件中加入manager-script角色
Jenkins+maven+git实现自动化打包部署_第26张图片
更改/webapps/manager/META_INF/context.xml文件,将文件中对访问的来源受限设置注释

在这里插入图片描述
重启tomcat

再次构建
还是失败,但是这次war包已经成功部署到了tomcat,失败的原因是java代码的问题,我对java不是很了解就网上随便抄了代码,具体问题我也无能为力了。
Jenkins+maven+git实现自动化打包部署_第27张图片

[root@localhost webapps]# pwd
/usr/local/tomcat/webapps
[root@localhost webapps]# ls
docs  examples  host-manager  jenkins_test  jenkins_test.war  manager  ROOT

虽然没有部署成功,单Jenkins工具的自动化部署功能已经实现了,想尝试的小伙伴可以借鉴。

你可能感兴趣的:(jenkins,maven,git,jenkins,linux)