Jenkins使用(代码拉取->编译构建->部署上线)
Jenkins简介
Jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更重要的业务逻辑实现上。同时Jenkins能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象的展示项目构建的趋势和稳定性。
如何配置
配置路线大体可以参考《Jenkins持续集成入门到精通》.pdf
链接:https://pan.baidu.com/s/1lGq0D1NhojqTaqLBnF8LPw 提取码:6666
虚拟机安装Jenkins
因为Jenkins是java语言写的,所以首先在208机器上配置jdk,版本为11,然后下载配置Jenkins,maven,Git,完全按照《Jenkins持续集成入门到精通》上的可能会有版本过老导致Jenkins上面的可下载插件不兼容的问题,这个时候可以下载新的Jenkins配置一下就可以解决。
详细配置可参考:《Jenkins持续集成入门到精通》中Jenkins安装和持续集成环境配置
Jenkins凭证管理
《Jenkins持续集成入门到精通》上面是集成gitlab,集成云效跟教程里的效果一样,具体操作:
一、点击红框处

二、

三、

四、

五、在下面具体配置:

类型我们一般选择HTTPS账户密码类型的或者ssh类型的(在项目中我是用的HTTPS类型的)

范围默认就行
用户名和密码需要填写(取自云效)
1、点击个人设置

2、设置账户密码

3、回到第五步,将账户密码设置上去点击创建即可。
ID、描述可以不写
六、至此,你的就会保存,同时生成唯一标识。
测试凭证是否通过:可继续参考 《Jenkins持续集成入门到精通》-> 持续集成环境(4)
Maven配置
参考**《Jenkins持续集成入门到精通》-> 持续集成环境(5)-Maven安装和配置**
pipeline流水线
在此次平台建设过程中,我们需要对项目进行CICD,可以使用流水线来对项目进行自动拉取,构建,部署。
pipeline使用方式可直接参考:《Jenkins持续集成入门到精通》->Jenkins项目构建类型(4)-Pipeline流水线项目构建
具体使用
下面我利用Jenkins结合ns-service-support-user微服务进行持续集成部署操作。
第一步、部署前,需要在项目中添加相关依赖以及文件。
1、springboot项目打包
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.6</version>
</plugin>
2、添加dockerfile-maven-plugin依赖,添加此依赖后,可以通过dockerfile编译生成镜像
<plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.3.6</version><configuration><repository>${project.artifactId}</repository><buildArgs><JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE><PRO_NAME>${project.build.finalName}</PRO_NAME></buildArgs></configuration>
</plugin>
3、当前项目根目录添加dockerfile文件(把当前项目jar包生成docker镜像)
FROM openjdk:11
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
COPY ./lib/skywalking-agent.jar ./lib/skywalking-agent.jar
EXPOSE 8098
ENTRYPOINT ["java","-javaagent:./lib/skywalking-agent.jar","-Dskywalking.agent.service_name=","-Dskywalking.collector.backend_service=192.168.192.168.xxx.xxx:11800","-jar","/app.jar"]
4、当前项目根目录添加Jenkinsfile文件对应Jenkins流水线
node {stage('拉取代码') {checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])echo "拉取完成"
}
stage('编译构建') {
def code = sh (script: "docker ps | grep ${Microservices}",returnStatus: true
)
// code 为0 代表 grep 找到 了 ${Microservices} 相关 的 container
if (code==0){
//首先停止并删除一个容器xsh ("docker ps -f name=${Microservices} -q | xargs --no-run-if-empty docker container kill")sh ("docker ps -f name=192.168.xxx.xxx:5000/${Microservices} -q | xargs --no-run-if-empty docker container kill")sh ("sleep 10s")sh ("docker container ls -a -f name=${Microservices} -q | xargs -r docker container rm -f")sh ("docker container ls -a -f name=192.168.xxx.xxx:5000/${Microservices} -q | xargs -r docker container rm -f")sh ("sleep 10s")
//删除镜像
// sh ("docker rmi ${Microservices}")sh ("docker rmi -f 192.168.xxx.xxx:5000/${Microservices}")
}
//调用当前微服务dockerfile
sh label: '', script: 'mvn clean package -e -X -U dockerfile:build'
sh "/mydata/hostmachine_jenkins/version/version_up.sh ${Microservices} ${NEW_VERSION}"
def PROJECT_VERSION = readFile "/mydata/hostmachine_jenkins/version/${Microservices}"
// def NEW_VERSION="${PROJECT_VERSION}"
//将当前进镜像名修改为192.168.192.168.xxx.xxx:5000/${Microservices}:${NEW_VERSION}
sh ("docker tag ${Microservices}:latest 192.168.192.168.xxx.xxx:5000/${Microservices}:${PROJECT_VERSION}")
//push到私有仓库中
sh ("docker push 192.168.192.168.xxx.xxx:5000/${Microservices}:${PROJECT_VERSION}")
echo "构建完成"
}
stage('部署上线'){
//sh "docker run -d --net=swarm-test --name ${Microservices} -p ${port}:${port} ${Microservices}"
//sh ("docker stack deploy --compose-file=/mydata/hostmachine_jenkins/jenkins_deploy.yml api")
def PROJECT_VERSION = readFile "/mydata/hostmachine_jenkins/version/${Microservices}"
//按行读取
def lines = PROJECT_VERSION.split("\n")[0]
echo "$lines"
sh "docker service update --image 192.168.192.168.xxx.xxx:5000/${Microservices}:${lines} qa_${Microservices}"
echo "部署完成"
sh ("sleep 10s")
sh ("java -jar /mydata/hostmachine_jenkins/dingding.jar jenkins ${deployer}在${publishTime}将${Microservices}模块更新至${lines},部署已完成")
}
}
新建任务,选择流水线项目

创建完毕会跳到configuration配置界面,点击流水线,
定义选择pipeline script from SCM
Repository URL复制云效上项目的HTTPS


Credentials选择之前创建的全局凭证

指定分支写上你需要用的
继续往下滑,会看到脚本路径这个参数,这个就是对应你项目上的Jenkinsfile文件

继续
点击General,选择参数化构建过程并点击添加参数

添加凭据参数

添加选项参数(这个只针对当前项目其实可以在项目中写死就够了)

添加文本参数

添加选项参数(同样只针对当前项目可以写死)

添加port,对应项目中的port

添加部署人员,方便知道当前是谁部署了项目

添加时间参数,对应钉钉消息提示

添加版本号,手动输入更迭版本号

以上的参数就是对应的Jenkinsfile文件中的${***},当点击构建的时候对应的参数就会映射到Jenkinsfile文件中。
构建触发器,作用是自动出发构建项目

使用方式请直接参考:《Jenkins持续集成入门到精通》->Jenkins项目构建细节(1)-常用的构建触发器
设置好后,可以先点击应用然后保存
进入自己创建的项目,界面如下:

点击build with parameter,选择或者填写对应的参数

PROJECT_VERSION项目版本号参数如果不知道上一个版本,我们可以到portainer中查看对应的服务后缀,此后缀就是对应的当前正在运行的项目版本号。

此时PROJECT_VERSION可以设为1.0.5

所有参数设置好后,点击开始构建按钮,等待他构建完成

正常情况下会全流程走完,如下:

可以悬停在对应位置并点击logs查看当前流程的日志

或者可以点击console output查看全流程日志

验证:
部署成功会有消息提醒

这个时候看portainer中的服务列表,可以看到服务正在运行,而且版本已经从1.0.4升级到1.0.5了

访问当前服务的验证接口,查看是否能正常访问

异常情况会在某个阶段爆红,这时候就需要查看日志定位具体报错位置具体解决了

笔记:
添加定时任务脚本:/mydata/hostmachine_jenkins/images_clean.sh(208位置),定时每天10/12/14三个时间段清除虚悬镜像以及当前项目之前版本未使用的镜像
添加版本自增脚本:/mydata/hostmachine_jenkins/version_up1.sh(208位置),当点击部署的时候,自动增加当前项目版本号,并且对部署的服务进行版本号赋值。

相关文章:
Jenkins使用(代码拉取->编译构建->部署上线)
Jenkins简介 Jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更重要的业务逻辑实现上。同时Jenkins能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用…...
IEEE期刊论文投稿前期准备
目录 1、简介 2、资料准备 TPAMI 投稿须知 Letex模板资料下载 下载参考文献Bib文件...
[AAAI 2022] TransFG: A Transformer Architecture for Fine-grained Recognition
Contents TransFG ArchitectureExperimentsReferencesTransFG Architecture Overlapping patch split:ViT 是把图片分成一系列不重叠的 patches,作者认为这可能会破坏 discriminative regions. 为了解决上述问题,作者提出使用 Overlapping patch split,划分的 patch 数 N …...
机器学习之决策树原理详解、公式推导(手推)、面试问题、简单实例(python实现,sklearn调包)
目录1. 决策树原理1.1. 特性1.2. 思路1.3. 概念决策树概念信息论2. 公式推导2.1. 构造决策树2.1.1. ID3理论示例缺点2.1.2. C4.5理论示例缺点2.1.3. CART示例对比分析2.2. 剪枝3. 实例3.1. 数据集3.2. ID33.3. C4.53.4. CART3.5. sklearn实现4. 几个注意点(面试问题)5. 运行&am…...
一文搞懂CAS实现原理——怀玉
点个关注,必回关 文章目录CAS原理剖析1、参数解密CAS底层指令CAS(Compare and swap)是一种用于在多线程环境下实现同步功能的机制CAS原理剖析 CAS 被认为是一种乐观锁,有乐观锁,相对应的是悲观锁。 在上述示例中&…...
typora每次复制文档都要附带图片文件夹?学会配置gitee图床
0. 引言 作为开发人员,我们习惯使用md格式来编写文档,特别是typora编辑器更是日常使用的软件。但作为轻量化的文档编辑器,我们在默认插入图片时,一般typora会将图片保存到本地或者引用一个本地图片的路径 当文档还在我们本地打开…...
Linux--gdb
gdb用于实现在linux下通过gdb进行调试。由于gcc、g生成的文件是release文件,而不是用于调试的debug文件,所以需要使用gcc -g命令,生成debug文件 调试器:核心工作,主要是为了定位问题 所有查看内容的指令,不…...
c++11 标准模板(STL)(std::multimap)(二)
定义于头文件 <map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class multimap;(1)namespace pmr { template <class Key, class T…...
【数据结构】二叉排序树——平衡二叉树的调整
文章目录前置概念一、构造平衡二叉树的基本思想二、一个示例三、平衡二叉树的调整细节(1)LL型(顺时针 )举例(2)RR型(逆时针)(3)LR型(先逆时针再顺…...
03- pandas 数据库可视化 (数据库)
pandas库的亮点: 一个快速、高效的DataFrame对象,用于数据操作和综合索引;用于在内存数据结构和不同格式之间读写数据的工具:CSV和文本文件、Microsoft Excel、SQL数据库和快速HDF 5格式;智能数据对齐和丢失数据的综合处理&#…...
第三方电容笔怎么样?开学适合买的电容笔
随着科学技术的进步,很多新型的电子产品和数码设备都出现了。比如手机,IPAD,蓝牙耳机,电容笔等等。实际上,如果你想要更好的使用ipad,那么你就需要一支电容笔。比如ipad,我们用ipad来做笔记&…...
Java学习-IO流-字节输出流
Java学习-IO流-IO流的体系和字节输出流基本用法 //IO流 → 字节流 → 字节输入流:InputStream // ↘ ↘ 字节输出流:OutputStream // ↘ 字符流 → 字符输入流:Reader // ↘ 字符输出流:WriterFileInputStream…...
linux性能分析 性能之巅学习笔记和内容摘录
本文只是在阅读《性能之巅》的过程中,对一些觉得有用的地方进行的总结和摘录,并附加一些方便理解的材料,完整内容还请阅读Gregg的大作 概念和方法 性能分析领域一词的全栈代表了整个操作系统的软硬件在内的所有事物 软件生命周期和性能规划…...
机器学习笔记之生成模型综述(三)生成模型的表示、推断、学习任务
机器学习笔记之生成模型综述——表示、推断、学习任务引言生成模型的表示任务从形状的角度观察生成模型的表示任务从概率分布的角度观察生成模型的表示任务生成模型的推断任务生成模型的学习任务引言 上一节介绍了从监督学习、无监督学习任务的角度介绍了经典模型。本节将从表…...
第八章 Flink集成Iceberg的DataStreamAPI、TableSQLAPI详解
1、概述 目前Flink支持使用DataStream API 和SQL API方式实时读取和写入Iceberg表,建议使用SQL API方式实时读取和写入Iceberg表。 Iceberg支持的Flink版本为1.11.x版本以上,以下为版本匹配关系: Flink版本Iceberg版本备注Flink1.11.XI…...
PyTorch学习笔记:nn.Sigmoid——Sigmoid激活函数
PyTorch学习笔记:nn.Sigmoid——Sigmoid激活函数 torch.nn.Sigmoid()功能:逐元素应用Sigmoid函数对数据进行激活,将元素归一化到区间(0,1)内 函数方程: Sigmoid(x)σ(x)11e−xSigmoid(x)\sigma(x)\frac1{1e^{-x}} Sigmoid(x)σ(…...
个人学习系列 - 解决拦截器操作请求参数后台无法获取
由于项目需要使用拦截器对请求参数进行操作,可是请求流只能操作一次,导致后面方法不能再获取流了。 新建SpringBoot项目 1. 新建拦截器WebConfig.java /*** date: 2023/2/6 11:21* author: zhouzhaodong* description:*/ Configuration public class W…...
【编程基础之Python】2、安装Python环境
【编程基础之Python】2、安装Python环境安装Python环境在Windows上安装Python验证Python运行环境在Linux上安装Python验证Python运行环境总结安装Python环境 所谓“工欲善其事,必先利其器”。在学习Python之前需要先搭建Python的运行环境。由于Python是跨平台的&am…...
Java开发 - 问君能有几多愁,Spring Boot瞅一瞅。
前言 首先在这里恭祝大家新年快乐,兔年大吉。本来是想在年前发布这篇博文的,奈何过年期间走街串巷,实在无心学术,所以不得不放在近日写下这篇Spring Boot的博文。在还没开始写之前,我已经预见到,这恐怕将是…...
Office Server Document Converter Lib SDK Crack
关于 Office Server 文档转换器 (OSDC) 无需 Microsoft Office 或 Adobe 软件即可快速准确地转换文档。antennahouse.com Office Server 文档转换器 (OSDC) 会将您在 Microsoft Office(Word、Excel、PowerPoint)中创建的重要文档转换为高质量的 PDF …...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
