自动化部署-02-jenkins部署微服务

文章目录


前言

jenkins从github等代码平台拉取代码到本地,然后在本地进行maven编译打包,最后启动微服务jar包。


一、配置SSH-KEY

1.1 操作jenkins所在服务器

在jenkins所在环境里执行:

bash 复制代码
#我使用root用户登录的机器,但是Jenkins 以 jenkins 用户运行的
#所以要切换到 Jenkins 用户环境
sudo -u jenkins -s
#生成SSH公钥
ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com"
#查看公钥
cat /var/lib/jenkins/.ssh/id_ed25519.pub

1.2 操作github

在设置里新增保存。

1.3 验证

bash 复制代码
sudo -u jenkins -s
ssh -T git@github.com
#成功会打印You've successfully authenticated

二、服务器安装git

bash 复制代码
dnf install git

三、jenkins页面安装maven

因为我安装好了,所以Available plugins中搜素看不到。

maven的默认settings文件路径:

/var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/maven/conf

默认仓库路径:

/var/lib/jenkins/.m2/repository

可以修改settings文件,将仓库下载地址改为阿里云等。

四、页面配置自动化任务

4.1 新建任务

4.2 选择

4.3 配置参数

4.4 配置脚本

bash 复制代码
pipeline {
    agent any

    environment {
    	//配置自己的仓库地址
        REPOSITORY = "git@github.com:xxxx/mySpringCloudStudy.git"
    }
    tools {
        maven 'maven'  // 引用在 Jenkins 中配置的 Maven 工具名称
    }

    stages {
        stage('拉取代码') {
            steps {
                echo "开始拉取代码,仓库:${REPOSITORY},分支:${branch}"
                echo "删除工作空间目录开始"
                deleteDir()
                echo "删除工作空间目录结束"
                git branch: '${branch}', url: "${REPOSITORY}"
                echo "结束拉取代码"
            }
        }
        stage('编译依赖项目') {
            steps {
                echo "编译父工程mySpringCloudStudy开始 ................................"
                //-P prod 选择编译环境,没有则删掉
                sh "mvn -P prod -U clean install -DskipTests"
                echo "编译父工程mySpringCloudStudy结束 ................................"
            }
        }
    }
}

五、执行任务

5.1 点击执行按钮

5.2 填写参数

选择分支,默认master

点击build

5.3 查看日志


success表示成功

六、查看服务器文件

bash 复制代码
cd /var/lib/jenkins/workspace/test

可以看到拉取的代码

可以看到编译好的jar包

七、部署到远程服务器(附加)

7.1 配置免密

在jenkins服务器执行

bash 复制代码
sudo -u jenkins ssh-keygen -t rsa -b 2048 -f /var/lib/jenkins/.ssh/id_rsa
cat /var/lib/jenkins/.ssh/id_rsa.pub

在远程部署微服务的服务器执行

bash 复制代码
vim ~/.ssh/authorized_keys
#将jenkins中/var/lib/jenkins/.ssh/id_rsa.pub的内容复制进去保存

回到jenkins服务器执行

bash 复制代码
sudo -u jenkins ssh root@10.211.55.110
#如果能够免密登录到远程微服务服务器,则表示成功。

7.2 远程部署脚本

start.sh

bash 复制代码
pkill -f "bztc-study01-8001-1.0.1-SNAPSHOT.jar" || true
nohup /root/jdk-17.0.10+7/bin/java -jar /opt/bztc-study/bztc-study01-8001-1.0.1-SNAPSHOT.jar > /opt/bztc-study/bztc-study01.log 2>&1 &

jenkins脚本:

bash 复制代码
pipeline {
    agent any

    environment {
        REPOSITORY = "git@github.com:smdai/mySpringCloudStudy.git"
    }
    tools {
        maven 'maven'  // 引用在 Jenkins 中配置的 Maven 工具名称
    }

    stages {
        stage('拉取代码') {
            steps {
                echo "开始拉取代码,仓库:${REPOSITORY},分支:${branch}"
                echo "删除工作空间目录开始"
                deleteDir()
                echo "删除工作空间目录结束"
                git branch: '${branch}', url: "${REPOSITORY}"
                echo "结束拉取代码"
            }
        }
        stage('编译依赖项目') {
            steps {
                echo "编译父工程mySpringCloudStudy开始 ................................"
                sh "mvn -P prod -U clean install -DskipTests"
                echo "编译父工程mySpringCloudStudy结束 ................................"
            }
        }
        stage('部署到远程服务器') {
            steps {
                echo "开始将 bztc-study01 JAR 包传输到远程服务器,并重启服务"
                
                // 使用 scp 将 JAR 包传输到远程服务器
                sh '''
                    # 检查并终止已存在的 bztc-study01-8001-1.0.1-SNAPSHOT.jar 进程
                    #ssh -vvv root@10.211.55.110 'pkill -f "bztc-study01-8001-1.0.1-SNAPSHOT.jar" || true'
                    
                    # 备份旧的 JAR 包,带时间戳
                    ssh root@10.211.55.110 'mv /opt/bztc-study/bztc-study01-8001-1.0.1-SNAPSHOT.jar /opt/bztc-study/back/bztc-study01-8001-1.0.1-SNAPSHOT.jar.$(date +%Y%m%d%H%M%S)'
                    
                    # 传输新的 JAR 包到远程服务器
                    scp bztc-study01/target/bztc-study01-8001-1.0.1-SNAPSHOT.jar root@10.211.55.110:/opt/bztc-study/
                    
                    # 启动新的 JAR 包并放入后台
                    #ssh root@10.211.55.110 'nohup /root/jdk-17.0.10+7/bin/java -jar /opt/bztc-study/bztc-study01-8001-1.0.1-SNAPSHOT.jar > /opt/bztc-study/bztc-study01.log 2>&1 &'
                    ssh root@10.211.55.110 'sh /opt/bztc-study/start.sh'
                '''
                
                // 检查日志文件是否包含"成功"字样
                script {
                    def maxWaitTime = 30 // 最大等待时间(秒)
                    def pollInterval = 5 // 检查间隔(秒)
                    def elapsed = 0
                    
                    while (elapsed < maxWaitTime) {
                        def result = sh(
                            script: "ssh root@10.211.55.110 'grep -q \"成功\" /opt/bztc-study/bztc-study01.log' || echo 'not_found'",
                            returnStdout: true
                        ).trim()
                        
                        if (result != 'not_found') {
                            echo "远程部署完成,服务已成功启动"
                            break
                        }
                        
                        if (elapsed >= maxWaitTime - pollInterval) {
                            error "服务重启失败:未检测到"成功"字样"
                        }
                        
                        sleep pollInterval
                        elapsed += pollInterval
                    }
                }
            }
        }
    }
}

总结

如果日志中出现异常,则需具体问题具体分析。

相关推荐
JavaOpsPro2 小时前
jenkins部署手册
运维·jenkins·离线部署
Flamesky3 小时前
dotnet core微服务框架Jimu ~ 会员授权微服务
微服务·dotnet·services·micro·jimu·积木
思通数据3 小时前
AI助力医疗数据自动化:诊断报告识别与管理
大数据·人工智能·目标检测·机器学习·计算机视觉·目标跟踪·自动化
CYRUS STUDIO3 小时前
frida脚本,自动化寻址JNI方法
android·运维·自动化·逆向·移动安全·jni·frida
猫猫不是喵喵.4 小时前
【微服务】Feign 远程调用
spring cloud·微服务
AIGC绘画4 小时前
Spring微服务概述之spring cloud alibaba服务调用实践
java·spring·微服务
Liquid UI5 小时前
Amcor 如何借助 Liquid UI 实现SAP PM可靠性
ui·自动化·sap·制造
猫猫不是喵喵.6 小时前
【微服务】Nacos 注册中心
spring cloud·微服务·eureka
程序员大佬超6 小时前
Consul微服务配置中心部署(在线安装)
微服务·consul