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

7、Jenkins+Nexus3+Docker+K8s实现CICD

文章目录

  • 基本环境配置
  • 一、Jenkins安装必要插件
  • 二、Jenkins系统配置
  • 三、新建流水线
  • 四、在项目工程里添加Jenkinsfile、deploy.yml
  • 五、在项目工程里添加Dockerfile
    • 在这里插入图片描述
  • 总结


提示:本章主要记录各基本环境搭建好后如何配置Jenkins流水线部署微服务到K8s

基本环境配置

主机操作系统IP备注
物理主机Win11192.168.6.1Jenkins、Nexus3、Docker Desktop
虚拟主机1CentOS7192.168.6.11k8s-master
虚拟主机2CentOS7192.168.6.12k8s-worker

前提:

  1. K8s集群已经搭建好
  2. Nexus3搭建好docker私服
  3. 物理主机上安装好DockerDesktop并且能够登录docker私服
  4. 配置k8s的所有节点上的docker能访问docker私服并拉取镜像
  5. win11物理主机安装好了jdk11、maven3.8.4、jenkins2.426.1、Nexus3、DockerDesktop
  6. win11能够无密码远程ssh访问虚拟主机1

一、Jenkins安装必要插件

1、Git、 Gitee
2、Maven Integration
3、Publish Over SSH、SSH server
4、Docker plugin
注:可能还有一些其它插件

二、Jenkins系统配置

  1. 配置jenkins所在物理主机上Git安装位置
    在这里插入图片描述

  2. 配置jenkins所在物理主机上Maven安装位置
    在这里插入图片描述

  3. 配置win11物理主机远程访问虚拟主机1(k8s-master)
    在这里插入图片描述

  4. 配置win11物理主机DockerDesktoop安装路径
    在这里插入图片描述

  5. 配置win11物理主机jdk安装路径
    在这里插入图片描述

三、新建流水线

1、选择Pipeline
在这里插入图片描述
2、参数化构建,这里配置Git参数
在这里插入图片描述

3、用Git拉取Jenkinsfile,用Jenkinsfile来运行流水线脚本
在这里插入图片描述在这里插入图片描述

四、在项目工程里添加Jenkinsfile、deploy.yml

在这里插入图片描述

Jenkinsfile内容如下:

pipeline {agent any// 声明全局变量environment{nexusUserName='admin'nexusPwd='xxx'nexusAddr='192.168.6.1:8082'nexusRepository='repository'}stages {stage('Git拉取代码') {steps {checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee-auth', url: 'https://gitee.com/MonochromeContrast/mytest.git']]) echo 'Git拉取代码 - SUCCESS'}}stage('Maven构建项目') {steps {bat 'D:\\Maven\\bin\\mvn clean package -DskipTests'echo 'Maven构建项目 - SUCCESS'}}stage('Docker制作镜像') {steps {bat '''move "target\\*.jar"  "docker\\"docker build -t %JOB_NAME%:%tag% .\\docker\\'''echo 'Docker制作镜像 - SUCCESS'}}stage('推送镜像到Nexus镜像仓库') {steps {bat '''docker login -u %nexusUserName% -p %nexusPwd% %nexusAddr%docker tag %JOB_NAME%:%tag% %nexusAddr%/%nexusRepository%/%JOB_NAME%:%tag%docker push %nexusAddr%/%nexusRepository%/%JOB_NAME%:%tag%'''echo '推送镜像到Nexus镜像仓库 - SUCCESS'}}stage('将yml文件推送到k8s-master服务器'){steps{sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s-master', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'deploy.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])echo '将yml文件推送到k8s-master服务器 - SUCCESS'}}stage('远程执行k8s部署命令'){steps{bat 'ssh root@192.168.6.11 kubectl apply -f /k8s/myapp/deploy.yml'}}}
}

deploy.yml文件的内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:namespace: devname: testlabels:app: test
spec:replicas: 1selector:matchLabels:app: testtemplate:metadata:labels:app: testspec:imagePullSecrets:- name: docker-secretcontainers:- name: testimage: 192.168.6.1:8082/repository/test:v6.0.0imagePullPolicy: Alwaysports:- containerPort: 8080
---apiVersion: v1
kind: Service
metadata:namespace: devlabels:app: testname: test
spec:selector:app: testports:- port: 8081targetPort: 8080type: NodePort---apiVersion: networking.k8s.io/v1kind: Ingressmetadata:namespace: devname: testspec:ingressClassName: ingressrules:- host: felix.test.comhttp:paths:- path: /pathType: Prefixbackend:service:name: testport:number: 8081

五、在项目工程里添加Dockerfile

在这里插入图片描述

FROM openjdk:11
COPY mytest.jar /usr/local/
WORKDIR /usr/local
CMD java -jar mytest.jar

总结

提示:前面的基础配置跟着做就行,重点要理解Jenkinsfile里写的每一个步骤
主要用Jenkins的片段生成器来生成每一步的脚本:

  1. 生成Git拉取代码的流水线脚本
    在这里插入图片描述

  2. 用指定目录下的maven执行Maven构建项目命令(因为该操作是在jenkins所在win11系统下进行的,所以这里用的是windows批处理命令。如果是centos系统,这里就得相应选择sh)
    在这里插入图片描述

  3. Docker制作镜像
    在这里插入图片描述

  4. 将制作好的镜像推送到Nexus镜像仓库(这里用%%包起来的是引用的环境变量,nexus镜像仓库信息都配置到了Jenkinsfile文件的环境变量里)、
    提示:windows批处理命令里引用变量用%%,shell命令应用变量则是${}
    在这里插入图片描述

  5. 将deploy.yml文件推送到k8s-master服务器(deploy.yml文件是部署k8s的描述性文件)
    在这里插入图片描述我们之前已经配置好了Jenkins与远程服务器的连接(k8s-master),而且指定了远程服务器文件夹位置:在这里插入图片描述

6.远程访问虚拟主机1(k8s-master),执行部署服务的命令

在这里插入图片描述
提示:这里必须满足两个条件:
(1)、win11能无密码远程访问虚拟主机1(k8s-master)

 ssh root@192.168.6.11// 不需要输入密码就是ok的

(2)、jenkins服务所拥有的账户身份必须能无密码远程访问虚拟主机1(要和在命令行测试的账户一致),否则这里有个坑,流水线会卡在这一步。
在这里插入图片描述

相关文章:

7、Jenkins+Nexus3+Docker+K8s实现CICD

文章目录 基本环境配置一、Jenkins安装必要插件二、Jenkins系统配置三、新建流水线四、在项目工程里添加Jenkinsfile、deploy.yml五、在项目工程里添加Dockerfile在这里插入图片描述 总结 提示:本章主要记录各基本环境搭建好后如何配置Jenkins流水线部署微服务到K8s…...

解决git action发布失败报错:Error: Resource not accessible by integration

现象: 网上说的解决方法都是什么到github个人中心setting里面的action设置里面去找。 可这玩意根本就没有! 正确解决办法: 在你的仓库页面,注意是仓库页面的setting里面: Actions> General>Workflow permisss…...

[传智杯 #2 决赛] 补刀

题目描述 UIM 在写程序的空闲玩一款 MOBA 游戏。 当敌方的小兵进入到我方防御塔的范围内,就会持续受到防御塔造成的伤害;当然我方英雄也可以对它造成伤害。当小兵的血量降到了 0 或者更低,就会被击杀。为了获得经验,UIM 希望在防…...

C语言:求Sn=a+aa+aaa+aaaa+……(n个a)之值,其中a表示一个数字,n表示a的位数,n由键盘录入。

分析: 在主函数 main 中,程序首先定义四个整型变量 a、n、i 和 sn,并初始化 a、n 和 i 的值,其中 sn 用于记录数列的和。然后使用 scanf 函数从标准输入中读取用户输入的两个整数 a 和 n。 接下来,程序通过 while …...

【nlp】4.1 fasttext工具介绍(文本分类、训练词向量、词向量迁移)

fasttext工具介绍与文本分类 1 fasttext介绍1.1 fasttext作用1.2 fasttext工具包的优势1.3 fasttext的安装1.4 验证安装2 fasttext文本分类2.1 文本分类概念2.2 文本分类种类2.3 文本分类的过程2.4 文本分类代码实现2.4.1 获取数据2.4.2 训练集与验证集的划分2.4.3 训练模型2.4…...

Spring中的事务管理

1 基本概念 事务:将一组操作抽象成一个不可再分的单位,这组操作可以有很多个,但是它们要么就全部都执行成功,这时算作事务执行成功;要不其中有操作执行失败,则其余操作都视为执行失败,这时候需…...

量子光学的进步:光子学的“下一件小事”

量子光学是量子力学和光学交叉领域中发展迅速的一门学科,探索光的基本特性及其与物质在量子水平上的相互作用。通过利用光的独特特性,量子光学为通信、计算、密码学和传感等各个学科的变革性进步铺平了道路。 如今,量子光学领域的研究人员和工…...

微信小程序获取定位显示在百度地图上位置出现偏差

项目场景: 背景: 微信小程序端获取手机定位坐标,以及正确展示位置通过详细地址解析为定位坐标显示在小程序端以及PC后台小程序获取的地理坐标与百度地图坐标相互转化 相关知识 目前国内主要有以下三种坐标系: WGS84&#xff1a…...

【LeetCode 0170】【哈希】两数之和(3) 数据结构设计

https://leetcode.com/problems/two-sum-iii-data-structure-design/ 描述 Design and implement a TwoSum class. It should support the following operations: add and find. add(input) – Add the number input to an internal data structure. find(value) – Find if …...

005、简单页面-容器组件

之——布局 目录 之——布局 杂谈 正文 1.布局基础知识 2.Column 3.Row 4.实践 杂谈 布局容器组件。 一个丰富的页面需要很多组件组成,那么,我们如何才能让这些组件有条不紊地在页面上布局呢?这就需要借助容器组件来实现。 容器组件是…...

stm32中断调用流程

USART1_IRQHandler(void)(中断服务函数) -> HAL_UART_IRQHandler(UART_HandleTypeDef *huart)(中断处理函数) -> UART_Receive_IT(UART_HandleTypeDef *huart) (接收函数) -> HAL_UART_RxCpltCallback(huart);(中断回调函数) HAL_UART_IRQHandler(UART_HandleTypeDef…...

18487.1 - 2015 电动汽车充电系统标准 第1部分 关键点梳理

一、部分知识介绍 1、连接方式 使用电缆和连接器将电动汽车接入电网(电源)的方法。 1.1、连接方式A 1.2、连接方式B 1.3、连接方式C 2、电动汽车控电设备 2.1、按照输出电压分类 1)交流 单相 220V,三相 380V. 2&#xff09…...

WPF实战项目十八(客户端):添加新增、查询、编辑功能

1、ToDoView.xmal添加引用&#xff0c;添加微软的行为类 xmlns:i"http://schemas.microsoft.com/xaml/behaviors" 2、给项目添加行为 <i:Interaction.Triggers><i:EventTrigger EventName"MouseLeftButtonUp"><i:InvokeCommandAction Com…...

职位招聘管理与推荐系统Python+Django网页界面+协同过滤推荐算法

一、介绍 职位招聘管理与推荐系统。本系统使用Python作为主要开发语言&#xff0c;以WEB网页平台的方式进行呈现。前端使用HTML、CSS、Ajax、BootStrap等技术&#xff0c;后端使用Django框架处理用户请求。 系统创新点&#xff1a;相对于传统的管理系统&#xff0c;本系统使用…...

C#文件流二进制文件的读写

目录 一、BinaryWriter类 二、BinaryReader类 三、示例 1.源码 2.生成效果 二进制文件的写入与读取主要是通过BinaryWriter类和BinaryReader类来实现的。 一、BinaryWriter类 BinaryWriter类以二进制形式将基元类型写入流&#xff0c;并支持用特定的编码写入字符串&#…...

如何正确选择爬虫采集接口和API?区别在哪里?

在信息时代&#xff0c;数据已经成为了一个国家、一个企业、一个个人最宝贵的资源。而爬虫采集接口则是获取这些数据的重要手段之一。本文将从以下八个方面进行详细讨论&#xff1a; 1.什么是爬虫采集接口&#xff1f; 2.爬虫采集接口的作用和意义是什么&#xff1f; 3.爬虫…...

k8s部署jenkins

1.先决条件 1.因为国内的容器镜像加速器无法实时更新docker hub上的镜像资源.所以可以自己进行jenkins的容器镜像创建,. 2.这里用到了storageClass k8s的动态制备.详情参考: k8s-StoargClass的使用-基于nfs-CSDN博客 3.安装docker服务.(用于构建docker image) 2.构建jenki…...

HTTP相关

HTTP 什么是http - 蘑菇声活 http特点 1.基于TCP协议之上的应用层协议 2.基于请求--响应 3.无状态&#xff08;每次发送请求对服务端都是新的&#xff09; 4.无/短连接&#xff08;客户端不会一直跟服务端连接&#xff09; http请求协议与响应协议 请求协议 请求首行&…...

Armv8.x和Armv9.x架构扩展简介

目录 一、概述 二、Armv8.x和Armv9.x是什么意思? 三、为什么我们需要.x扩展? 四、处理器实现...

node的proxy-server使用

代理服务器是一种常见的网络工具&#xff0c;可以用来隐藏客户端的真实IP地址&#xff0c;保护客户端的隐私&#xff0c;也可以用来绕过一些网络限制&#xff0c;访问被封锁的网站。在这篇博客文章中&#xff0c;我们将讲解代理服务器的API基本使用流程和思路&#xff0c;以及代…...

从SAP实施到微信上线:一文读懂不同类型软件公司的实施岗到底有啥区别

从SAP实施到微信上线&#xff1a;一文读懂不同类型软件公司的实施岗核心差异 刚入行的技术新人小张最近很困惑&#xff1a;同样是"软件实施工程师"岗位&#xff0c;为什么招聘JD里有的要求精通SAP模块配置&#xff0c;有的却强调微信生态部署经验&#xff1f;在面试了…...

告别鼠标!用Vim打造你的极速编程工作流(含常用脚本编辑配置)

用Vim打造无鼠标编程工作流&#xff1a;从入门到精通的完整指南 作为一名开发者&#xff0c;你是否厌倦了在键盘和鼠标之间来回切换的低效操作&#xff1f;Vim这款诞生于1991年的文本编辑器&#xff0c;凭借其独特的模态编辑理念和全键盘操作方式&#xff0c;至今仍是提升编程…...

Godot引擎资源提取完全指南:从PCK文件到资产复用的技术实践

Godot引擎资源提取完全指南&#xff1a;从PCK文件到资产复用的技术实践 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 技术挑战速览 核心问题解决方案预览技术价值如何识别有效PCK文件&#xff1f…...

Jimeng AI Studio应用场景:独立艺术家数字创作工作流整合方案

Jimeng AI Studio应用场景&#xff1a;独立艺术家数字创作工作流整合方案 1. 引言&#xff1a;当艺术家遇见AI 想象一下&#xff0c;你是一位独立艺术家或设计师。灵感来了&#xff0c;你想立刻把它变成一幅画、一张海报&#xff0c;或者一个全新的视觉概念。但传统的数字创作…...

CodeSys随机数生成实战:从GPS通信验证到实验作业的完整代码解析

CodeSys随机数生成实战&#xff1a;从GPS通信验证到实验作业的完整代码解析 在工业自动化领域&#xff0c;随机数生成看似是个小众需求&#xff0c;直到你遇到需要模拟设备故障、生成验证码或创建随机测试场景时才会发现它的重要性。CodeSys作为工业控制领域的"瑞士军刀&…...

【微知】Mellanox网卡配置异常?mlxconfig reset全解与实战场景指南

1. Mellanox网卡配置异常&#xff1f;先别慌 遇到Mellanox网卡配置异常时&#xff0c;很多工程师第一反应是重装驱动或者更换硬件。其实在大多数情况下&#xff0c;用对mlxconfig reset这个神器就能快速解决问题。我处理过上百台配备Mellanox网卡的服务器&#xff0c;发现80%的…...

避开Psins惯导仿真中的那些“坑”:ethupdate参数传递与setdiag内存操作详解

避开Psins惯导仿真中的那些“坑”&#xff1a;ethupdate参数传递与setdiag内存操作详解 在惯性导航系统&#xff08;SINS&#xff09;仿真中&#xff0c;Psins工具箱因其高效性和灵活性备受开发者青睐。然而&#xff0c;即便是经验丰富的工程师&#xff0c;也常在一些看似简单的…...

C#实战:基于TouchSocket构建高性能WebSocket双向通信系统

1. WebSocket与TouchSocket核心概念 第一次接触WebSocket时&#xff0c;我被它的双向通信能力惊艳到了。想象一下快递员和收件人的关系&#xff1a;传统HTTP就像每次送货都要重新敲门确认身份&#xff08;建立连接&#xff09;&#xff0c;而WebSocket则像快递员直接把包裹交给…...

IPATool终极指南:如何用命令行轻松获取iOS应用安装包?

IPATool终极指南&#xff1a;如何用命令行轻松获取iOS应用安装包&#xff1f; 【免费下载链接】ipatool Command-line tool that allows searching and downloading app packages (known as ipa files) from the iOS App Store 项目地址: https://gitcode.com/GitHub_Trendin…...

挑战复杂功能,让快马AI成为你微信小程序开发的智能编程搭档

最近在开发一个微信小程序时&#xff0c;遇到了一个比较复杂的自定义组件需求&#xff1a;一个可以左右滑动切换日期、并显示对应日程的周视图日历。这个功能看似简单&#xff0c;但实际开发中涉及到日期计算、滑动事件处理、数据绑定等多个难点。好在发现了InsCode(快马)平台&…...