当前位置: 首页 > article >正文

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

文章目录

  • 前言
  • 一、配置SSH-KEY
    • 1.1 操作jenkins所在服务器
    • 1.2 操作github
    • 1.3 验证
  • 二、服务器安装git
  • 三、jenkins页面安装maven
  • 四、页面配置自动化任务
    • 4.1 新建任务
    • 4.2 选择
    • 4.3 配置参数
    • 4.4 配置脚本
  • 五、执行任务
    • 5.1 点击执行按钮
    • 5.2 填写参数
    • 5.3 查看日志
  • 六、查看服务器文件
  • 七、部署到远程服务器(附加)
    • 7.1 配置免密
    • 7.2 远程部署脚本
  • 总结


前言

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


一、配置SSH-KEY

1.1 操作jenkins所在服务器

在jenkins所在环境里执行:

#我使用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 验证

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

在这里插入图片描述

二、服务器安装git

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 配置脚本

在这里插入图片描述

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表示成功
在这里插入图片描述

六、查看服务器文件

cd /var/lib/jenkins/workspace/test

可以看到拉取的代码
在这里插入图片描述
可以看到编译好的jar包
在这里插入图片描述

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

7.1 配置免密

在jenkins服务器执行

sudo -u jenkins ssh-keygen -t rsa -b 2048 -f /var/lib/jenkins/.ssh/id_rsa
cat /var/lib/jenkins/.ssh/id_rsa.pub

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

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

回到jenkins服务器执行

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

7.2 远程部署脚本

start.sh

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脚本:

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
                    }
                }
            }
        }
    }
}

总结

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


http://www.kler.cn/a/371188.html

相关文章:

  • GitHub Actions的 CI/CD
  • rabbitmq 使用注意事项
  • npm指令合集
  • iOS Swift逆向——被编译优化后的函数参数调用约定修复
  • 人工智能:未来生活与工作的全新蓝图
  • PHP函数来判断目录/文件是否绝对可写
  • 抖音短剧小程序上线:短视频平台的全新娱乐体验
  • 力扣每日一题合集
  • 深入理解Redis的四种模式
  • 江协科技STM32学习- P24 DMA数据转运DMA+AD多通道
  • jupyter notebook 启动 Clusters 教程
  • .Net桌面程序开发框架汇总
  • 基于ResNet50模型的船型识别与分类系统研究
  • 智能工厂的设计软件 “word”篇、“power”篇和“task”篇
  • 【Linux】ClickHouse 部署
  • 计算机毕业设计Hadoop+大模型高考推荐系统 高考分数线预测 知识图谱 高考数据分析可视化 高考大数据 大数据毕业设计 Hadoop 深度学习
  • 石头剪刀布升级版[NOIP2014]
  • 聊一聊Elasticsearch的一些基本信息
  • 【数据结构 | PTA】与零交换
  • MATLAB基础应用精讲-【数模应用】PageRank(附R语言、MATLAB、Java和python代码实现)
  • 数字身份发展趋势前瞻:无密码认证
  • 哈工大《理论力学》第九版课后答案解析及笔记PDF
  • Java Lock ReentrantLock 源码
  • Redis的删除策略以及内存淘汰机制
  • 探索 Surya:一款强大的开源 OCR 工具,支持 90 多种语言识别
  • C#实现word和pdf格式互转