linux 环境运行 jenkins.war包,有可能会出现字体问题,jdk版本:11 jenkins 版本:2.420

jenkins的目录:

/usr/jenkins

启动命令

java -Djava.awt.headless=true sudo timedatectl set-timezone Asia/Shanghai
-Xmx1024m -jar jenkins.war --httpPort=8090

任意目录启动:

nohup java -Djava.awt.headless=true -Xms1024m -Xmx1024m -jar /usr/jenkins/jenkins.war --httpPort=8090 >/usr/jenkins/log_jenkins.log 2>&1 &

服务器设置北京时间

sudo timedatectl set-timezone Asia/Shanghai

测试时间是否正确

date

jdk下载地址:

【免费】linux环境-jdk11-jdk-11.0.8-linux-x64-bin.tar资源-CSDN文库

jenkins的下载地址:

【免费】linux环境-jenkins2.420.war资源-CSDN文库

产生的秘钥

a2a528c111204ba0b7eb643672540c8c

安装字体

sudo yum install fontconfig

sudo yum install xorg-x11-fonts-type1

可以尝试安装一些基本的字体库,以确保系统有可用的字体。可以使用以下命令来安装常见的字体包:

sudo yum install fontconfig fontconfig-devel

在某些情况下,字体配置文件可能缺失或损坏。可以尝试生成新的字体缓存。运行以下命令:

fc-cache -f -v

启动命令

java -Djava.awt.headless=true -Xmx1024m -jar jenkins.war --httpPort=8090

访问地址:

http://192.168.116.156:8090/

安装插件

安装部署项目

配置maven

配置git

配置git 的账号(注意 注意 注意,保存后刷新就出来下面的界面了)

配置git的账号

配置jdk

配置远程服务器

开始构建项目

配置历史清理的规则

配置git地址

Pre Steps 打包之前删除上次的部署的代码,

Build 是 构建包文件名/pom.xml

配置 Post Steps 这里配置 远程服务器的名字,

配置 服务器二

运行脚本

bash 复制代码
#!/bin/bash

# 定义远程服务器信息
REMOTE_USER="root"
REMOTE_PASSWORD="vagrant"
REMOTE_HOST="192.168.116.155"

# 定义远程服务器上的变量
REMOTE_JAR_PATH="/home/java/app/ruo-admin.jar"
REMOTE_JAR_SOURCE="$WORKSPACE/ruoyi-web/ruoyi-admin/target/ruoyi-admin.jar"
REMOTE_LOG_FILE="/home/java/app/logs/ruo-admin.log"
REMOTE_PID_FILE="/home/java/app/pid/ruo-admin.pid"
REMOTE_DUMP_FILE="/home/java/app/dump/ruo-admin"


# 通过 sshpass 执行远程命令来删除旧的 JAR 文件
sshpass -p "$REMOTE_PASSWORD" ssh "$REMOTE_USER@$REMOTE_HOST" "bash -c '
if [ -f \"$REMOTE_JAR_PATH\" ]; then
    echo \"Removing old JAR file...\"
    rm -f \"$REMOTE_JAR_PATH\" || { echo \"Failed to remove old JAR file\"; exit 1; }
else
    echo \"No old JAR file found, skipping removal.\"
fi
'"

# 通过 scp 将新的 JAR 文件拷贝到远程服务器
echo "Copying new JAR file..."
sshpass -p "$REMOTE_PASSWORD" scp "$REMOTE_JAR_SOURCE" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_JAR_PATH" || { echo "Failed to copy new JAR file"; exit 1; }

# 在远程服务器上执行剩下的命令,启动新的进程
sshpass -p "$REMOTE_PASSWORD" ssh "$REMOTE_USER@$REMOTE_HOST" "bash -c '
cd /home/java/app/ || { echo \"Failed to change directory\"; exit 1; }

# 阻止 Jenkins 杀死项目进程
export BUILD_ID=dontKillMe

# 停止旧进程(如果有 PID 文件)
if [ -f \"$REMOTE_PID_FILE\" ]; then
    OLD_PID=\$(cat \"$REMOTE_PID_FILE\")
    if ps -p \"\$OLD_PID\" > /dev/null; then
        echo \"Stopping old process with PID \$OLD_PID...\"
        kill \"\$OLD_PID\" || { echo \"Failed to stop old process\"; exit 1; }
        rm \"$REMOTE_PID_FILE\" || { echo \"Failed to remove PID file\"; exit 1; }
    else
        echo \"Old process with PID \$OLD_PID not found.\"
    fi
else
    echo \"No PID file found, skipping old process stop.\"
fi

# 启动新进程
echo \"Starting new process...\"
nohup /usr/java/jdk-11.0.8/bin/java -Dfile.encoding=UTF-8 -Xms256m -Xmx512m -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=\"$REMOTE_DUMP_FILE\" -jar ruo-admin.jar >\"$REMOTE_LOG_FILE\" 2>&1 &
NEW_PID=\$!
echo \"\$NEW_PID\" > \"$REMOTE_PID_FILE\"

echo \"New process started with PID \$NEW_PID.\"
'"

运行失败

使用 sshpass -p 需要 在目标服务器 安装sshpass

bash 复制代码
sudo yum install sshpass

安装完成后,可以通过以下命令确认 sshpass 是否成功安装:

bash 复制代码
sshpass -V

如果 sshpass 安装失败

如果 epel-release 包未找到,你可以手动安装 EPEL 仓库。以下是步骤:

bash 复制代码
# 下载 EPEL RPM 文件
sudo yum install -y https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm

安装后再次尝试:

sudo yum install -y sshpass

更改软件源

如果以上步骤仍然无效,可以尝试更换你的 yum 源为阿里云、清华大学等国内镜像。

使用阿里云的 YUM 源

运行以下命令,备份现有的 yum repo 文件并使用阿里云源:

bash 复制代码
# 备份现有 repo 文件
sudo cp /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/bak/

# 使用阿里云的 CentOS 7 源
sudo bash -c 'cat > /etc/yum.repos.d/CentOS-Base.repo << EOF
[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS7
enabled=1

[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.aliyun.com/centos/7/updates/x86_64/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS7
enabled=1

[epel]
name=EPEL for CentOS
baseurl=http://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7
enabled=1
EOF'

尝试安装 sshpass

在更新了 repo 后,再次清理缓存并安装 sshpass

bash 复制代码
sudo yum clean all
sudo yum makecache
sudo yum install -y sshpass

安装成功

继续运行 又出现新的 错误

问题出在 SSH 连接时的主机密钥验证失败。这通常是因为目标主机的 SSH 密钥未被验证或记录。要解决这个问题,请按照以下步骤进行操作:

在 Jenkins 服务器上,运行以下命令

bash 复制代码
#  ssh user@远程服务器ip


ssh user@192.168.116.155

运行后弹出如下信息 输入 yes

[root@localhost ~]# ssh user@192.168.116.155

The authenticity of host '192.168.116.155 (192.168.116.155)' can't be established.

ECDSA key fingerprint is SHA256:ESG6zOwTENvgNUzbTHyYjBJG5DbftIbWpT4fxtQw9NY.

ECDSA key fingerprint is MD5:fc:98:53:d1:46:55:57:db:50:8a:a2:aa:11:7b:2d:85.

Are you sure you want to continue connecting (yes/no)?

然后 输入目标服务器的密码

最后表示成功

jenkins 重新部署

提示新问题 是 目标路径不存在

没有app目录

新建 app 目录

再次 重新部署

提示部署成功,但是 目标服务器没启动,但是jar包已经传输过去了

错误 原因是 脚本里面 的 pid 目录没找到 ,目标服务器 新建 pid 、logs、dump 等 目录

部署成功

远程服务器 启动成功

调用接口 又报错192.168.116.155:9090/captchaImage

原来是linux 没对应的字体,需要安装字体

安装字体

sudo yum install -y fontconfig
sudo yum install -y liberation-fonts

然后重新部署 删除远程服务器的jar包

启动成功

测试接口 成功

相关推荐
PyAIGCMaster8 分钟前
ubuntu装P104驱动
linux·运维·ubuntu
奈何不吃鱼8 分钟前
【Linux】ubuntu依赖安装的各种问题汇总
linux·运维·服务器
icy、泡芙10 分钟前
T527-----音频调试
linux·驱动开发·音视频
aherhuo13 分钟前
kubevirt网络
linux·云原生·容器·kubernetes
爱码小白14 分钟前
网络编程(王铭东老师)笔记
服务器·网络·笔记
zzzhpzhpzzz22 分钟前
Ubuntu如何查看硬件型号
linux·运维·ubuntu
蜜獾云24 分钟前
linux firewalld 命令详解
linux·运维·服务器·网络·windows·网络安全·firewalld
陌北v126 分钟前
Docker Compose 配置指南
运维·docker·容器·docker-compose
只会copy的搬运工1 小时前
Jenkins 持续集成部署——Jenkins实战与运维(1)
运维·ci/cd·jenkins
o(╥﹏╥)1 小时前
linux(ubuntu )卡死怎么强制重启
linux·数据库·ubuntu·系统安全