jenkins的cicd操作

cicd概念

持续集成( Continuous Integration)

持续频繁的(每天多次)将本地代码“集成”到主干分支,并保证主干分支可用

持续交付(Continuous Delivery)

是持续集成的下一步,持续频繁地将软件的新版本交付到类生产环境(类似于预发),交付给测试、产品验收。
持续交付强调的是“交付”,不管怎么更新,软件是随时随地可以交付的,相比持续集成,持续交付除了交付到类生产环境之外,还会执行一些集成测试、API测试等等,确保交付的产物可以直接交付部署

持续部署(Continuous Deployment)

是持续交付的下一步,“自动”将代码部署到生产环境

持续部署强调的是“部署”,它的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。

持续部署和持续交付触发方式的区别是,持续部署是自动完成的,持续交付是手动完成的

1 jenkins CICD操作

前提:

gitlab安装,并创建了一个项目,gitlab安装了相应插件,参见上一篇文章 

说明:

下面步骤为一步一步进行,确保每一步都没有问题后进行下一步操作,从而得到一个比较完整的jenkinscicd操作,为后续使用jenkins pipeline项目奠定基础

项目以一个简单的springboot项目为基础,进行操作

目前操作仅为jenkins操作,未接入到k8s中,接入操作在jenkins pipeline项目时进行

1.1 jenkins拉取gitlab代码

步骤

先在jenkins中创建一个自由风格的项目

 

 

在源码管理中添加git,远程仓库名称和登陆凭证

 点击立即构建

 验证是否拉取成功

可以查看控制台输出日志

也可以进入jenkisn服务器中查看是否拉取到代码,操作如下:

进入服务器【jenkins安装的服务器】,进入容器查看【拉取的本地项目都会存放到当前用户目录的workspace目录下】

 # 1.进入容器sudo docker exec -it jenkins bash# 2.进入用户目录cd ~# 3.进入workspacecd workspace/# 4.查看项目是否已经拉去到本地
jenkins@fe5b68bad9e1:~/workspace$ cd test
jenkins@fe5b68bad9e1:~/workspace/test$ ls
pom.xml  src

发现拉取到gitlab的代码,说明该项测试没有问题

1.2 调用maven打包 

再次进入项目管理,在build steps中增加构建步骤,选择调用顶层maven目标

 

选择之前添加的maven

命令为clean package -DskipTests 打包并跳过测试

 点击立即构建 

构建完成后,进入服务器查看是否有jar包

jenkins@fe5b68bad9e1:~/workspace$ cd test
jenkins@fe5b68bad9e1:~/workspace/test$ ls
pom.xml  src  target
jenkins@fe5b68bad9e1:~/workspace/test$ cd target/
jenkins@fe5b68bad9e1:~/workspace/test/target$ ls
classes		   generated-test-sources  maven-status		    test-0.0.1-SNAPSHOT.jar.original
generated-sources  maven-archiver	   test-0.0.1-SNAPSHOT.jar  test-classes

1.3 将jar包发送到目标服务器

编辑项目配置

选择构建后操作

添加send build artifacts over ssh

选择之前配置的ssh

将target/的jar包发送到目标服务器

ssh server为上一篇中jenkisn安装插件后配置

transfers中source files为jenkisn中target目录下所有jar文件

 选择构建后在目标服务器中查看

[root@k8s-master target]# pwd
/usr/local/k8s/target
[root@k8s-master target]# ls
test-0.0.1-SNAPSHOT.jar

发现已经发送过来该jar文件

1.4 将jar构建docker镜像

在代码中添加dockerfile和docker-compose.yml

Dockerfile

FROM eclipse-temurin:8-jre
LABEL org.opencontainers.image.authors="fooleryang@139.com"
COPY mytest.jar /usr/local/
WORKDIR /usr/local
CMD java -jar mytest.jar

Docker-compose.yml

version: 'v1.0.0'
services:mytest:build:context: ./dockerfile: Dockerfileimage: mytest:v1.0.0container_name: mytestports:- 8080:8080

在pom.xml中添加固定名称,让其打包后固定名称为mytest 

jenkins中项目配置中构建后配置添加

在jenkins项目配置中增加命令 

命令为将target目录下的jar文件复制到docker目录下【保存dockerfile文件目录,在源码中创建】,再执行构建

在目标服务器上查看 

[root@k8s-master docker]# docker images |grep test
mytest                                                                        v1.0.0              5178b6e1eab7   12 minutes ago   239MB
[root@k8s-master docker]# docker ps |grep test
f8f5be867460   mytest:v1.0.0                                       "/bin/sh -c 'java -j…"   12 minutes ago   Up 12 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   mytest

发现已经运行了镜像

访问

 1.5 修改代码,重新发布

修改代码,将返回信息为 版本为1.0.2

 提交代码到gitlab,jenkins重新进行构建

构建完成后访问

1.6 参数化构建 

修改代码,将版本输出为v2.0.0

 

修改docker-compose.yml 

将image设置为v2.0.0,version也设置为v2.0.0

 上传代码到gitlab,并打上标签为v2.0.0

jenkins中当前任务中进行配置

在general中选择参数化构建过程

选择git 参数【之前下载的Git paremeter插件】

 

名称为tag【自定义,但后续需要使用】

参数类型选择标签 

默认值选择main分支

 在build setp中添加咨询shell操作

 

添加切换分支命令

并移动该步骤到第一步 $tag可以获取到parameters中配置的参数tag

 查看项目,发现自动拉取了gitlab的标签

 选择构建v1.0.0,输出为之前修改的v1.0.2

选择构建v2.0.0,输出为当前修改的v2.0.0

 

2 总结 

至此,jenkins拉取gitlab,并可以参数化构建代码,发布到目标机完成

但是当前操作缺点也很明显,需要docker file,每次发布标签修改修改多处内容;发布过程的操作修改进入jenkins中进行设置和修改

后续将使用pipeline项目将jenkins发布操作集成到一个Jenkins文件中,该文件在项目源码中,这样只需要修改该文件,即可完成对发布操作的修改,也不需要修改多处地方来替换tag

也将使用k8s来进行发布项目 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/22835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能优化算法——哈里鹰算法(Matlab实现)

目录 1 算法简介 2 算法数学模型 2.1.全局探索阶段 2.2 过渡阶段 2.3.局部开采阶段 3 求解步骤与程序框图 3.1 步骤 3.2 程序框图 4 matlab代码及结果 4.1 代码 4.2 结果 1 算法简介 哈里斯鹰算法(Harris Hawks Optimization,HHO),是由Ali As…

高并发与性能优化的神奇之旅

作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得感谢这段苦,让笔者从头到尾去探索,找寻解决之法。 目录 第一站…

android AIDL 学习使用

在android studio 2023.2中使用 1、在buidl.gradle增加以下配置,然后同步。不增加这些配置,创建aidl时显示为灰色,不能创建 buildFeatures {compose true// Disable unused AGP featuresbuildConfig falseaidl truerenderScript falseresVal…

Flink学习教程

最近因为用到了Flink,所以博主开了《Flink教程》专栏来记录Flink的学习笔记。 【Apache Flink v1.16 中文文档】 【官网 - Apache Flink v1.3 中文文档】 一、基础 参考链接如下: Flink教程(01)- Flink知识图谱Flink教程&…

使用即时消息缩短 B2B 销售周期

在B2B销售中,时间就是一切。所以企业需要做的就是尽可能快地回复客户的咨询,否则会造成严重的客户流失。什么是 B2B 销售?它就是企业对企业销售,企业主要或仅向其他企业销售其产品或服务,这些产品或服务可以是从软件到…

安卓:BottomNavigationBar——底部导航栏控件

目录 一、BottomNavigationBar介绍 二、BottomNavigationBar的常用方法及其常用类 (一)、常用方法 1. 添加菜单项 2. 移除菜单项 3. 设置选中监听器 4. 设置当前选中项 5. 设置徽章 6. 样式和颜色定制 7. 动画效果 8. 隐藏底部导航栏。 9、设…

C# Blazor 学习笔记(10):依赖注入

文章目录 前言Blazor 依赖注入依赖注入用于解决什么问题?依赖注入的生命周期。测试代码 总结补充日期2023年8月4日 前言 Blazor 具有前后端不分离模式,但是如何直接调用需要一定的设置 Blazor 依赖注入 依赖注入在spring里面很常见,毕竟.N…

Maven里面没有plugins dependence问题解决

说明:今天在做Nacos、Dubbo整合的时候,在父模块中做了版本限制,出错后就又把版本控制什么都删掉,回退到最开始的状态,此时父模块下面的服务右侧的 maven里面没有plugins dependence ,然后项目全都报错。 问…

react18 之 06 之 useReducer 结合 useContext使用 (实现全局状态管理、复杂组件交互逻辑、多个组件需要共享和更新某个状态)

目录 react18 之 06 之 useReducer 结合 useContext使用 (实现全局状态管理、复杂组件交互逻辑、多个组件需要共享和更新某个状态)useReducer 结合 useContext使用 实现全局共享RootCom.jsxA.jsxASon.jsxB.jsxC.jsx执行效果 react18 之 06 之 useReducer 结合 useContext使用 (…

JavaWeb三大组件 —— Servlet

目录 servlet 注册servlet 父pom pom文件 1、通过注解注册 2、使用ServletRegistrationBean注册 API三生三世 第一生Servlet 第二生SpringMVC 今生SpringBoot servlet Servlet的作用: 接受请求参数、处理请求,响应结果,(就…

小白解密ChatGPT大模型训练;Meta开源生成式AI工具AudioCraft

🦉 AI新闻 🚀 Meta开源生成式AI工具AudioCraft,帮助用户创作音乐和音频 摘要:美国公司Meta开源了一款名为AudioCraft的生成式AI工具,可以通过文本提示生成音乐和音频。该工具包含三个核心组件:MusicGen用…

Docker 容器转为镜像

# 容器转成镜像并指定镜像名称与版本号 # commit 时原有容器挂载的目录是不会被写入到新的镜像中去的,数据卷相关的都不会生效 # 但是 root 目录下新建的内容会写入到新的镜像中去 $ docker commit 容器ID 新镜像名称:版本号 $ docker commit -m"描述信息"…

瑞芯微RK3568开发板保姆级护航入门学习嵌入式

资料优势 专为3568编写|迅为原创|拒绝网络拼凑 20个手册2800页手册进行结构分层适用于学习与开发 为了方便大家清晰快速的学习,迅为iTOP-3568开发板手册资料全面升级,对手册内容进行了结构分层,共计20个文档,超2800页的资料专为…

AI写作宝有哪些,分享两种AI写作工具

AI写作宝是一种基于人工智能技术的写作辅助工具。它可以根据用户输入的关键词和主题快速生成文章。AI写作宝可以为用户节省大量的时间和精力,帮助用户快速生成高质量的文章。今天就为大家推荐两款AI写作宝: 一、AI创作家 AI创作家是一款基于人工智能技…

企业如何搭建矩阵内容,才能真正实现目的?

当下,新媒体矩阵营销已成为众多企业的营销选择之一,各企业可以通过新媒体矩阵实现扩大品牌声量、维持用户关系、提高销售业绩等不同的目的。 而不同目的的矩阵,它的内容运营模式会稍有差别,评价体系也会大不相同。 企业在运营某类…

Jenkins工具系列 —— 插件 实现用户权限分配与管理

文章目录 安装插件 Role-based Authorization Strategy添加用户注册配置权限查看当前使用者,获取user id配置管理员权限配置普通用户权限(非管理员权限) 小知识 安装插件 Role-based Authorization Strategy 点击 左侧的 Manage Jenkins —&…

git 公钥密钥 生成与查看

1.什么是公钥 很多服务器都是需要认证的,ssh认证是其中的一种。在客户端生成公钥,把生成的公钥添加到服务器,你以后连接服务器就不用每次都输入用户名和密码了。 很多git服务器都是用ssh认证方式,你需要把你生成的公钥发送给代码仓…

Golang之路---03 面向对象——接口与多态

接口与多态 何为接口 在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为。接口只指定了对象应该做什么,至于如何实现这个行为(即实现细节),则由对象本身去确定。   在 Go 语言中,…

LeetCode 0021. 合并两个有序链表

【LetMeFly】21.合并两个有序链表 力扣题目链接:https://leetcode.cn/problems/merge-two-sorted-lists/ 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l…

网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(二)前后端实现用户的登录和注册功能【用户模块】

网页版Java五子棋项目(二)前后端实现用户的登录和注册功能【用户模块】 在用户模块我们要清楚要完成的任务一、MyBatis后端操作数据库1. 需要在数据库创建用户数据库1. 用户id2. 用户名3. 密码4. 天梯积分5. 总场数6. 获胜场数 2. 创建用户类User和数据库…