spring boot 项目
写一个接口
在 gitee 上创建一个 sprint boot 项目,并添加一个接口

打包注意事项
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http:///POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http:///POM/4.0.0 http:///xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.13.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId></groupId>
<artifactId>boot-shop</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<build>
<!-- jar 包名称 -->
<finalName>${artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 必须添加, 否则无法 jar 包无法运行 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<!-- maven 镜像仓库地址, 防止下载依赖失败 -->
<repositories>
<repository>
<id>public</id>
<name>aliyun nexus</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>aliyun nexus</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>验证接口连通性
打包完成后, 上传到 linux, 直接 java -jar 启动, 并访问一个接口, 查看是否请求成功, 如果请求不成功需要解决, 比如防火墙问题

脚本启动
目录结构
[laolang@localhost app]$ tree
.
├── boot-shop.jar
├── conf
│ ├── application.yml
│ └── logback-spring.xml
└── sbin
└──
2 directories, 4 files
[laolang@localhost app]$配置文件
application.yml
server:
port: 8094
servlet:
context-path: /
spring:
application:
name: boot-shop
logging:
level:
org.springframework.web.servlet.DispatcherServlet: DEBUG
com.laolang.jx: info
config: classpath:logback-spring.xml
file:
path: ../logs/boot-shoplogback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds">
<!--<include resource="org/springframework/boot/logging/logback/base.xml" />-->
<contextName>logback</contextName>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<!-- <property name="log.path" value="/home/laolang/gitosc/km-boot/km-boot/logs/km-bbs/dev"/>-->
<springProperty name="LOG_PATH" source="logging.path" defaultValue="../logs/boot-shop"/>
<!-- <property name="LOG_FILE" value="shop-boot" /> -->
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 输出到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 日志输出到文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件输出格式 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- 日志文件保留天数 -->
<maxHistory>150</maxHistory>
</rollingPolicy>
</appender>
<!--开发环境:打印控制台-->
<!--<springProfile name="dev">-->
<!--<logger name="com.laolang" level="debug"/>-->
<!--</springProfile>-->
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>启动脚本
#!/bin/bash
# 不添加此行,远程执行脚本环境变量不生效
source /etc/profile
source /home/laolang/.bashrc
APP_NAME=boot-shop.jar
OPTIONS=-Dspring.config.location=/home/laolang/app/conf/application.yml
#使用说明
usage() {
echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
exit 1
}
# 检查程序是否在运行
is_exist(){
pid=$(pgrep -f $APP_NAME)
# 如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
# 启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid}. "
else
nohup java -jar $OPTIONS ../$APP_NAME > /dev/null 2>&1 &
echo "${APP_NAME} is running..."
fi
}
# 停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
echo "${APP_NAME} is stoped"
else
echo "${APP_NAME} is not running"
fi
}
# 输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is not running"
fi
}
# 重启
restart(){
stop
start
}
# 根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac测试
在 sbin 目录执行 ./console start , 然后使用 ./console status 查看服务状态, 最后请求一个接口并使用 tail -f 命令查看日志

自由风格
直接远程执行命令
这种方式最好是把构建过程写在远程服务器脚本里面, 不然就要添加很多构建步骤, 每个构建步骤执行一条命令
安装插件 Publish over SSH

配置
http://localhost:8080/jenkins/manage/configure

timeout 设置为 0

测试连接

远程脚本准备
#!/bin/bash
source /etc/profile
source ~/.bashrc
# 停止项目
cd /home/laolang/app/sbin && ./ stop
# 删除 jar 包
rm -rf /home/laolang/app/boot-shop.jar
# 拉取代码
cd /home/laolang/gitee/boot-shop && git pull
# 打包
cd /home/laolang/gitee/boot-shop && mvn clean package
# 复制 jar 包到 app 目录
cp /home/laolang/gitee/boot-shop/target/boot-shop.jar /home/laolang/app/boot-shop.jar
# 启动项目
cd /home/laolang/app/sbin && ./ start创建项目
点击 新建 Item


配置构建步骤
丢弃旧的构建

源码管理: 无

添加构建步骤

设置超时为0

执行构建
随便改一点东西, 然后推送代码, 点击构建

maven 方式构建
安装插件
gitee
在 https://gitee.com/profile/personal_access_tokens 添加一个令牌

然后访问: http://localhost:8080/jenkins/manage/configure


Maven Integration

配置
新建项目

配置仓库地址

构建前 clean

maven 构建命令

构建成功后再执行其他步骤

构建后停止服务
脚本内容
#!/bin/bash
source /etc/profile
source ~/.bashrc
# 停止项目
cd /home/laolang/app/sbin && ./ stop
上传文件

效果


















