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

ops/2024/10/30 8:44:37/

文章目录

  • 前言
  • 一、配置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

jenkins_14">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

jenkinsmaven_44">三、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 anyenvironment {//配置自己的仓库地址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 anyenvironment {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 = 0while (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 pollIntervalelapsed += pollInterval}}}}}
}

总结

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


http://www.ppmy.cn/ops/129532.html

相关文章

面对复杂的软件需求:5大关键策略!

面对软件需求来源和场景的复杂性&#xff0c;有效地管理和处理需求资料是确保项目成功的关键&#xff0c;能够提高需求理解的准确性&#xff0c;增强团队协作和沟通&#xff0c;降低项目风险&#xff0c;提高开发效率。反之&#xff0c;项目可能面临需求理解不准确、团队沟通不…

【优选算法篇】前缀之序,后缀之章:于数列深处邂逅算法的光与影

文章目录 C 前缀和详解&#xff1a;基础题解与思维分析前言第一章&#xff1a;前缀和基础应用1.1 一维前缀和模板题解法&#xff08;前缀和&#xff09;图解分析C代码实现易错点提示代码解读题目解析总结 1.2 二维前缀和模板题解法&#xff08;二维前缀和&#xff09;图解分析C…

FFmpeg 深度教程音视频处理的终极工具

1. 引言 什么是 FFmpeg&#xff1f; FFmpeg 是一个开源的跨平台多媒体处理工具&#xff0c;广泛应用于音视频的录制、转换、流式传输以及编辑等多个领域。它由 FFmpeg 项目团队开发和维护&#xff0c;支持几乎所有主流的音视频格式和编解码器。FFmpeg 包含了一系列强大的命令…

Redis-README官方入门文档

文章目录 Redis是什么&#xff1f;什么是Redis社区版&#xff1f;构建Redis修复依赖项或缓存构建选项的构建问题修复构建32位二进制文件的问题分配器单调时钟详细构建运行Redis运行支持TLS的Redis玩转Redis安装Redis代码贡献Redis商标Redis内部结构源代码布局server.hserver.cc…

rtp协议:rtcp包发送和接收规则和报告!

RTCP Packet Send and Receive Rules&#xff1a; 发送和接收 RTCP 包的规则在此列出。允许在多播环境或多点单播环境中运行的实现必须满足第 6.2 节中的要求。这样的实现可以使用本节定义的算法来满足这些要求&#xff0c;或者可以使用其他算法&#xff0c;只要其性能等同或更…

C++:多态(原理篇)

文章目录 前言一、常见笔试题&#xff08;问题引入&#xff09;二、虚函数表感性认识三、再谈笔试题四、父类指针或引用与赋值1. 父类的指针或引用2. 子类给父类赋值 五、子类自己的虚函数在哪里&#xff1f;1. 对于单继承2. 对于多继承1&#xff09;Derive对象的大小2&#xf…

模拟 DDoS 攻击与防御实验

模拟 DDoS 攻击与防御实验可以帮助理解攻击原理和防御策略。在进行这种实验时&#xff0c;必须确保在受控、合法的环境中进行&#xff0c;避免对真实网络造成损害。以下是具体步骤&#xff1a; 环境要求 硬件&#xff1a;至少两台计算机&#xff08;或虚拟机&#xff09;&…

[vue3 element-plus]当事件需要传递多个参数的变化写法

需求背景: 需要完成购物车的单选功能。 单选框使用el-checkbox。 通过el-checkbox我们可以通过默认参数获得是否选择。 const changeSelected (selected) > {console.log(selected) }<el-checkbox :model-value"i.selected" change"changeSelected&qu…