安装Jenkins
jenkins官网
1、安装jdk
1)yum安装
yum search java|grep jdk # yum查看jdk版
yum install -y java-11-openjdk #安装jre
yum install -y java-devel #安装jdk
2)自定义安装
①下载java
②上传解压tar
③配置环境变量(此步骤省略即可)cd /etc/profile
export JAVA_HOME=/data/jdk-11.0.16.1
export PATH=$JAVA_HOME/bin:$PATH:$KE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
2、安装maven
1)下载maven
maven官网
二进制压缩包下载:
选择apache-maven-3.8.6-bin.tar.gz
2)压缩包上传至服务器
3)解压缩
tar -zxvf apache-maven-3.8.6-bin.tar.gz
4)修改maven配置文件镜像地址
cd /root/apache-maven-3.8.6/conf
vim settings.xml
<mirror>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
5)配置环境变量
export MAVEN_HOME=/root/apache-maven-3.8.6/
export JAVA_HOME=/data/jdk-11.0.16.1
export PATH=$JAVA_HOME/bin:$PATH:$KE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=${PATH}:${MAVEN_HOME}/bin
5)查看版本
[root@localhost ~]# mvn -v
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Maven home: /root/apache-maven-3.8.6
Java version: 11.0.16.1, vendor: Oracle Corporation, runtime: /data/jdk-11.0.16.1
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.18.0-348.el8.x86_64", arch: "amd64", family: "unix"
3、安装Git
配置git地址时,jenkins会自动使用git命令,所以需要安装git
yum install git
4、安装Jenkins
1)war包下载
war包下载
2)安装运行Jenkins
运行war包
java -jar jenkins.war
在运行的日志里面可以看见提示:运行过程中已经在/root/.jenkins路径下创建了Jenkins相关的文件,其中默认用户admin,密码在/root/.jenkins/secrets/initialAdminPassword文件里面,日志里面也打印了密码如下:
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
6394bc3ff49b476f8695b2d0233dd7ef
This may also be found at: /root/.jenkins/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************
3)访问Jenkins控制台
http://192.168.109.141:8080
输入默认密码:这个文件中/root/.jenkins/secrets/initialAdminPassword
4)推荐插件安装
选择推荐插件安装——》等待插件安装完成——》创建管理员账号——进入Jenkins控制面板
5)创建管理员账号
6)安装maven插件
需要使用maven插件构建项目,所以安装maven插件
步骤如下图:
点击安装后跳转至安装页面,滑动至最下面,查看安装进度,等待在线安装完成即可
7)配置当前服务器中安装的maven
8)配置当前服务器中安装的git
首先确定下在Jenkins服务器上已经安装了Git。
可以通过
git --version
来确定是否已经成功安装。
然后再通过
which git
来查看git的目录,并将其复制出来
然后找到Jenkins下的系统管理-全局工具配置-Git
将上面复制的git的路径放在Path to Git executable中
保存
9)配置当前服务器中安装的java
此处配置的java_home与服务器中/etc/profile中配置的一致
四、jenkins配置maven+git自动构建jar包
1)新建任务
2)源码管理
① 添加git源码地址
此步骤如果报错如下,则说明服务器没有安装git
如果报错如下,则说明该代码仓库为私有,需要修改为公有,或者在Credentials配置凭证
② 配置分支
3)Build
配置项目pom文件的路径,以gitlab上的路径为准
4)构建jar包
等待一段时间后前面时绿色的√代表成功,红色的×表示失败,具体情况查看控制台日志(可以点击名称进入,查看控制条打印的日志)
如果遇到如下问题有以下几点原因:
1)则maven仓库镜像配置问题
2)java版本问题
3)jenkins没有配置maven或java
5)自启动jar查看结果
根据上一步的日志可以查看到打包好的jar在/root/.jenkins/workspace/jenkins-test1/target/jenkins-test1-1.0-SNAPSHOT.jar,所以进入该路径启动jar包,然后访问该工程接口测试。
[root@localhost jdk-11.0.16.1]# cd /root/.jenkins/workspace/jenkins-test1/target
[root@localhost target]# ll
total 4
drwxr-xr-x. 3 root root 40 Nov 18 16:13 classes
drwxr-xr-x. 3 root root 25 Nov 18 16:13 generated-sources
-rw-r--r--. 1 root root 3008 Nov 18 16:13 jenkins-test1-1.0-SNAPSHOT.jar
drwxr-xr-x. 2 root root 28 Nov 18 16:13 maven-archiver
drwxr-xr-x. 3 root root 35 Nov 18 16:13 maven-status
[root@localhost target]# java -jar jenkins-test1-1.0-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.1)
2022-11-18 16:34:09.355 INFO 40190 --- [ main] com.buba.Application : Starting Application using Java 11.0.16.1 on localhost.localdomain with PID 40190 (/root/.jenkins/workspace/jenkins-test1/target/jenkins-test1-1.0-SNAPSHOT.jar started by root in /root/.jenkins/workspace/jenkins-test1/target)
2022-11-18 16:34:09.358 INFO 40190 --- [ main] com.buba.Application : No active profile set, falling back to 1 default profile: "default"
2022-11-18 16:34:12.217 INFO 40190 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8001 (http)
2022-11-18 16:34:12.258 INFO 40190 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2022-11-18 16:34:12.258 INFO 40190 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.64]
2022-11-18 16:34:12.447 INFO 40190 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2022-11-18 16:34:12.447 INFO 40190 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2935 ms
2022-11-18 16:34:14.383 INFO 40190 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8001 (http) with context path ''
2022-11-18 16:34:14.413 INFO 40190 --- [ main] com.buba.Application : Started Application in 6.448 seconds (JVM running for 7.687)
测试接口
如果遇到如下问题:则需要在工程的pom文件中指定maven插件,如下
no main manifest attribute, in jenkins-test1-1.0-SNAPSHOT.jar
解决方法:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.buba</groupId>
<artifactId>gitlab-test3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gitlab-test3</name>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>11</java.version>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.7.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.1</version>
<configuration>
<!-- 指定该Main Class为全局的唯一入口 -->
<mainClass>com.buba.GitlabTest3Application</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<!-- 可以把依赖的包都打包到生成的Jar包中 -->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
6)问题总结:
① springboot应用程序pom有父工程,但是没有搭建私服,找不到父工程
报错:
ERROR: Failed to parse POMs
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[FATAL] Non-resolvable parent POM for com.buba:gitlab-test3:0.0.1-SNAPSHOT: Could not find artifact org.springframework.boot:spring-boot-starter-parent:pom:2.7.2-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 5, column 13
原本pom如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.2-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>com.buba</groupId>
<artifactId>gitlab-test3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gitlab-test3</name>
<properties>
<java.version>11</java.version>
</properties>
.......................省略
</project>
解决:将父工程去掉,再以来中添加版本
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.buba</groupId>
<artifactId>gitlab-test3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gitlab-test3</name>
<packaging>jar</packaging>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.1</version>
</dependency>
</dependencies>
</project>
②maven报错:不再支持源选项 5。请使用 6 或更高版本
问题描述
在构建某个maven项目的时候发生了异常,遇到以下错误,理论上是由于没有指定JAVA版本导致的。
[ERROR] 不再支持源选项 5。请使用 6 或更高版本。
[ERROR] 不再支持目标选项 1.5。请使用 1.6 或更高版本。
解决方案
pom.xml文件中增加maven编译的java.version jdk版本设置,以及maven.compiler.source 资源编译jdk版本设置和maven.compiler.target 资源构建jdk版本设置
For JAVA6~8,一般都是1.6,1.7,1.8的写法。至于1.9用的人少,我也不知道写1.9还是9。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
For JAVA≥10,例如10以上,都是直接写10,11,12,13,14的。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>11</java.version>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
③no main manifest attribute
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.1</version>
<configuration>
<!-- 指定该Main Class为全局的唯一入口 -->
<mainClass>com.buba.GitlabTest3Application</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<!-- 可以把依赖的包都打包到生成的Jar包中 -->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
④Cannot resolve plugin org.springframework.boot:spring-boot-maven-plugin
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.1</version>
<configuration>
<!-- 指定该Main Class为全局的唯一入口 -->
<mainClass>com.buba.GitlabTest3Application</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<!-- 可以把依赖的包都打包到生成的Jar包中 -->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
⑤Maven install报错To see the full stack trace of the errors, re-run Maven with the -e switch
这个问题的原因尚未理解,但是碰巧我有上传了一部分代码,本地clean了一下。后面Jenkins构建就好了。
maven clean 一下将一下文件上传就好了
五、Jenkins自动发布
1、安装SSH插件
等待全部安装完成,如下图所示:
2、配置服务器地址
到系统配置页面后一直往下滑找到SSH配置,点击新增
然后填写必填项
Name:给目标服务器定义名字
hostname:IP地址
username:登陆服务器的用户名
然后点击高级按钮
勾选使用密码,填写密码
然后测试是否能够连接成功,连接成功后点击保存,如下图:
3、Post Steps 构建后(自动发布并运行)
①点击项目进入
②然后点击配置
③点击发布步骤配置
④选择SSH方式连接发送执行
⑤填写部署步骤配置
SSH Server Name:选择一个已经配置好的服务器
Transfer Set Source files:传输文件(此处**可以模糊匹配任意目录)
remote directory:目标文件夹
exec command:执行的命令(
nohup 在系统后台不挂断地运行命令,退出终端不会影响程序的运行
&:让命令在后台执行,终端退出后命令仍旧执行。)
点击高级,选中Exec in pty:
命令优化:nohup java -jar /root/target/*.jar &>>log.log &
在目标服务器中编写启动脚本文件start.sh:
#最后一个执行的脚本放到的位置是/projects/scripts
Project_name=$1
Port_no=$2
#echo $Project_name
#echo $Port_no
. /etc/profile
# 进入到项目
cd /root/gitlab-test3/target
# 找到原进程,kill
pid=$(ps -ef | grep java| grep $Project_name|awk -F '[ ]+' '{print $2}')
kill -9 $pid
#启动jar
nohup java -jar /root/gitlab-test3/target/$Project_name-0.0.1-SNAPSHOT.jar --server.port=$Port_no -server -Xmx1000m -Xms1000m -Xmn700m -XX:+UseParallelGC &
echo "starting service..."
sleep 20
#根据重启后是否有当前应用判断启动是否成功
pid=$(ps -ef | grep java| grep $Project_name|awk -F '[ ]+' '{print $2}')
#echo $pid
if [ -z $pid ];then
echo "启动失败"
exit 1
else
echo $Project_name : $pid "SUCCESS"
fi
4、Pre Steps 构建前(执行目标服务器脚本)
kill掉原来的进程
清理掉原来传输的文件