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

2023-12-03 02:12

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/447707

相关文章

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过