Jenkins+Docker | K8S虚拟化实现网站自动部署 简单流程 未完待续,,

news2024/9/20 0:56:17

目录

大纲

1.Jenkins 的设置与 Docker、Kubernetes 集成指南

1. 创建新的Pipeline项目或Freestyle项目

1.1 创建Pipeline项目

1.2 创建Freestyle项目

2. 配置源代码管理

2.1 配置Git作为源代码管理工具

3. 配置构建触发器

4. 配置构建步骤

4.1 对于Pipeline项目

4.2 对于Freestyle项目

5. 添加Docker构建步骤

5.1 Pipeline项目

5.2 Freestyle项目

6. 保存配置

7. 触发构建

总结

2. Docker 设置

2.1 准备 Dockerfile

2.2 确保Docker已安装

2.3 使用 Docker 插件

3. Kubernetes 设置

3.1 准备 Kubernetes 集群

3.2 创建 Kubernetes Deployment

3.3 使用 kubectl 部署应用

4. 自动化部署流程

总结:


大纲

将Jenkins与Docker和Kubernetes(K8S)结合使用可以实现网站的自动化部署和持续集成/持续部署(CI/CD)。以下是一个简单的流程,

注意:这是我以前用的开发文档,更详细的文档,因某些原因我和团队其他人共享,,所以只保留了这么多。。

后面的话,有时间,我会手动配置出一个属于我个人的,零起点,跟着做完就能用的详细教程。

Jenkins设置

在Jenkins中创建一个新的Pipeline项目或Freestyle项目。

在项目配置中设置源代码管理(如Git)和构建触发器。

配置构建步骤,例如编译代码、运行测试等。

添加Docker构建步骤,构建Docker镜像并推送到Docker仓库。

Docker设置:

在Docker中准备一个基础镜像,包含运行网站所需的环境。

在Jenkins中使用Docker插件构建镜像,并将其推送到Docker仓库。

Kubernetes设置:

在Kubernetes集群中部署一个Pod来运行网站容器。

创建Kubernetes Deployment或Service来管理网站的部署和访问。

自动化部署流程:

当代码提交到源代码仓库时,Jenkins会触发构建任务。

Jenkins将拉取代码、构建应用程序、构建Docker镜像并推送到Docker仓库。

Kubernetes会根据更新的镜像自动更新部署,确保网站始终运行最新版本。

通过这样的流程,您可以实现网站的自动化部署和持续集成/持续部署,提高部署效率并减少人为错误。请注意,具体的配置和步骤可能会根据您的实际需求和环境而有所不同,需要根据实际情况进行调整和优化。

1.Jenkins 的设置与 Docker、Kubernetes 集成指南

在现代软件开发中,Jenkins的灵活性与强大功能,成为持续集成和持续部署(CI/CD)不可或缺的工具。而在构建这一系统的过程中,Docker与Kubernetes的使用,无疑为自动化部署提供了强有力的支持。那么,如何在Jenkins中配置一个新的Pipeline项目或Freestyle项目呢?全方位一步步解析如下。

1. 创建新的Pipeline项目或Freestyle项目
1.1 创建Pipeline项目
  1. 打开Jenkins Dashboard,清晰的界面上,点击左侧菜单中的 “New Item”
  2. 在弹出的框中,输入项目名称,确保无误。
  3. 选择 “Pipeline” 选项,犹豫片刻后,点击 “OK” 。
1.2 创建Freestyle项目
  1. 再次回到Jenkins Dashboard,重复点击 “New Item”
  2. 输入项目名称,这次选择 “Freestyle project” ,同样点击 “OK”
2. 配置源代码管理
2.1 配置Git作为源代码管理工具

在项目配置页面,找到 “Source Code Management” 部分:

  • 选择 “Git” 作为源。
  • “Repository URL” 中,输入您的Git仓库地址。若有认证需求,别忘了点击 “Add” 按钮,完善凭据设置。
  • 根据实际情况,填写分支的规范,例如:*/main 或 */master。
3. 配置构建触发器

在项目的配置页面下方,寻找 “Build Triggers” 部分,选择最适合的触发器:

  • Poll SCM:定时检查源代码变化。
  • Build periodically:周期性触发构建任务。
  • GitHub hook trigger for GITScm polling:通过GitHub Webhook触发构建。
4. 配置构建步骤
4.1 对于Pipeline项目
  • 在配置页面上,找到 “Pipeline” 部分:
  • “Definition” 中选择 “Pipeline script”,并在 “Script” 框中输入类似于以下的Pipeline脚本:
pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/your-repo.git'
            }
        }
        stage('Build') {
            steps {
                sh 'make build'
            }
        }
        stage('Test') {
            steps {
                sh 'make test'
            }
        }
        stage('Docker Build and Push') {
            steps {
                script {
                    docker.withRegistry('https://index.docker.io/v1/', 'docker-credentials-id') {
                        def app = docker.build("your-docker-repo/your-app:${env.BUILD_ID}")
                        app.push()
                    }
                }
            }
        }
    }
}
4.2 对于Freestyle项目
  1. 在配置页面的 “Build” 部分,点击 “Add build step”,选择合适的构建步骤,比如 “Execute shell” 或 “Invoke Ant” 。
  2. 此处,您可以根据需求选择执行Shell命令,调用Ant或Gradle脚本。
5. 添加Docker构建步骤
5.1 Pipeline项目

在你的Pipeline脚本中,按照上述示例,明确规定Docker构建与推送的步骤。

5.2 Freestyle项目
  • 同样在 “Build” 部分,点击 “Add build step”,选择 “Execute shell”
  • 输入用于构建Docker镜像与推送至Docker仓库的Shell命令,例如:
docker build -t your-docker-repo/your-app:${BUILD_ID} .
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
docker push your-docker-repo/your-app:${BUILD_ID}

确保在Jenkins的凭据管理中,已根据Docker Hub的信息创建相应的凭据。

6. 保存配置

在完成所有重要配置之后,别忘了点击页面底部的 “Save” 按钮,将设置牢牢保存

7. 触发构建
  • 回到项目主页,点击 “Build Now” 按钮手动触发构建,或者,静待配置好的触发器自动启动构建。

总结

以上步骤展示了如何在Jenkins中从零开始创建一个新的Pipeline项目或Freestyle项目,包含源代码管理、构建触发器和构建步骤的配置。成功设置后,接下来的重点将是Docker和Kubernetes的配置,以便实现更高效的自动化部署。

Dockers安装如下,请看我的文章:

2. Docker 设置

要使用Docker构建并推送您的镜像,按照以下细节:

2.1 准备 Dockerfile

在项目根目录创建一个 Dockerfile,定义构建您的应用程序的Docker镜像,以下是Node.js应用的示例:

# 使用官方Node.js镜像作为基础镜像
FROM node:14

# 设置工作目录
WORKDIR /usr/src/app

# 复制依赖配置文件
COPY package*.json ./

# 安装依赖请求
RUN npm install

# 复制源代码
COPY . .

# 暴露应用程序端口
EXPOSE 3000

# 启动命令
CMD ["npm", "start"]
2.2 确保Docker已安装

确认Docker已在Jenkins服务器上运行并且可用,执行以下命令查看Docker版本:

docker --version
2.3 使用 Docker 插件

对于Pipeline项目,Docker构建和推送步骤已预设;而Freestyle项目需手动添加。以下是Freestyle项目的Docker构建步骤示例:

  1. 在Freestyle项目的配置页面,找到 “Build” ,再点击 “Add build step” 。
  2. 选择 “Execute shell”,输入构建与推送的命令:
docker build -t your-docker-repo/your-app:${BUILD_ID} .
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
docker push your-docker-repo/your-app:${BUILD_ID}

确保您在Jenkins凭据中添加了Docker Hub的相关凭据,并将环境变量设定为 DOCKER_USERNAME 和 DOCKER_PASSWORD。

3. Kubernetes 设置

配置Kubernetes以支持自动部署应用程序容器需要以下步骤:

3.1 准备 Kubernetes 集群

确保您的Kubernetes集群已正常运行,您可以选择本地的Minikube,或在云提供商的服务(如GKE、EKS、AKS)中创建集群。

3.2 创建 Kubernetes Deployment

您需要编写一个Kubernetes配置文件(如 deployment.yaml),定义Deployment与Service。以下是示例:.yaml 格式

apiVersion: apps/v1
kind: Deployment
metadata:
  name: your-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: your-app
  template:
    metadata:
      labels:
        app: your-app
    spec:
      containers:
      - name: your-app
        image: your-docker-repo/your-app:${BUILD_ID}
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: your-app-service
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 3000
  selector:
    app: your-app
3.3 使用 kubectl 部署应用

在Pipeline的阶段中加入kubectl命令,以更新当前Docker镜像:

stage('Deploy to Kubernetes') {
    steps {
        script {
            def image = "your-docker-repo/your-app:${env.BUILD_ID}"
            sh "kubectl set image deployment/your-app your-app=${image} --record"
            sh "kubectl rollout status deployment/your-app"
        }
    }
}

确保在Jenkins中已配置好kubectl,以便与Kubernetes集群顺畅通信。这通常通过设置Kubeconfig文件实现。

4. 自动化部署流程

  1. 代码提交:当开发人员向Git提交代码,Jenkins便会依设置的触发器启动构建流程。
  2. 构建与推送镜像:Jenkins从版本库中获取代码,编译应用,生成Docker镜像,并将其推送至Docker仓库。
  3. 更新Kubernetes:借助kubectl的声明式更新操作,确保Kubernetes中运行的容器镜像始终为最新版本。

总结:

通过以上的步骤,您便能构建出一套完整的自动化部署体系,充分融合Jenkins、Docker和Kubernetes,实现高效的CI/CD流程。在实施中,如遇具体需求或问题,请细致调试和优化配置,确保最佳实践的实施。

 写文不易,给我点点关注  和点点赞   点点收藏吧

3分云计算-CSDN博客3分云计算擅长云计算及运维,大数据运维及大数据基础,MySQL,等方面的知识,3分云计算关注kubernetes,求职招聘,数据仓库,量子计算,ssh,redis,spring,java,apache,elasticsearch,devops,flume,mysql,vim,开源,空间计算,python,zabbix,github,oracle,nginx,ubuntu,elk,华为云,开源软件,自动化,缓存,数据结构,交友,gitee,flink,运维,pycharm,kafka,服务器,gitlab,搜索引擎,运维开发,大数据,centos,hive,容器,idea,金融,docker,sql,ansible,git,spark,linux,debian,jenkins,json,hadoop,sublime text,数据库,云计算,系统架构,程序人生,负载均衡,vscode,hdfs,bash,aws,etcd,低代码领域.https://blog.csdn.net/qq_61414097

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

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

相关文章

Threadlocal+拦截器+JWT实现登录

很多数据库表都会有创建时间和修改时间,这个可以用mp的自动填充来实现。 也有修改人和更新人的字段,用户登录进来后,修改数据如何拿到修改人呢?每次操作不能把操作人的信息都携带者,那么如何拿到修改人的数据&#xf…

数学建模赛前备赛——模拟退火算法

一.什么是智能优化算法 智能优化算法本质上是一个优化算法,它通过不断优化模型的参数,使得系统表现达到最优,常见的只能优化算法有很多,比如说蚁群算法,遗传算法以及我们今天的主角——模拟退火算法。 二.模拟算法的前身——爬山算法 爬山算法是一种简…

【Python入门】第1节 基础语法

📖第1节 基础语法 ✅字面量✅注释✅变量✅数据类型🧊数据类型转换 ✅标识符✅运算符✅字符串扩展🧊字符串的三种定义方式🧊字符串拼接🧊字符串格式化🧊格式化的精度控制🧊字符串格式化方式2&…

equals与== 区别,全面总结如何使用(Java)

先理解JVM内存模型 虚拟机栈:JVM 运行过程中存储当前线程运行方法所需的数据, 指令、 返回地址本地方法栈:Java程序自动调用底层C/C函数库程序计数器:当前线程执行的字节码的行号指示器堆:存放我们申请的对象&#xff…

【Python 千题 —— 基础篇】入门异常处理

Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目描述 题目描述 编写一个程序,要求在处理用户输入时捕获各种异常情况,并为每种异常提供相应的处理方式。具体要求如下: 定义一个函数 divide_numbers(),它接…

php mail函数配置SMTP服务器发邮件的指南!

php mail函数安全性考虑?PHP mail()函数漏洞利用技巧? 在使用PHP进行开发时,发送邮件是一个常见的需求。使用php mail函数配置SMTP服务器发邮件,则是实现这一需求的有效途径。AokSend将详细探讨如何通过php mail函数来配置SMTP服…

Density-invariant Features for Distant Point Cloud Registration 论文解读

目录 一、导言 二、先导知识 1、FCGF 三、相关工作 1、深度学习的点云配准 2、对抗密度变化的方法 3、对比学习 四、GCL方法 1、U型曲线假设 一、导言 该论文来自于ICCV2023,上海交通大学提出的基于组对比学习的方案,来提取密度不变的几何特征&…

【终端IDPS】开源安全平台Wazuh之Wazuh Server

引言 Wazuh是一个开源的、免费的企业级安全监控解决方案,专注于威胁检测、完整性监控、事件响应和合规性。它由部署在受监控系统的端点安全代理和管理服务器组成,服务器收集并分析代理收集的数据。Wazuh支持多平台,包括Windows、Linux、macOS…

Linux学习笔记4 重点!网络排障命令

网络排障命令 命令行下载工具wget wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.20.17.tar.gz wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.20.17.tar.gz 限速下载 wget --limit-rate1M https://mirrors.edge.kernel.or…

【已解决】Vue Duplicate keys detected: ‘[object Object]’

【已解决】Vue Duplicate keys detected: ‘[object Object]’ 在Vue项目开发过程中,我们可能会遇到这样的报错:“Duplicate keys detected: ‘[object Object]’. This may cause an update error.”。这个错误通常发生在Vue的虚拟DOM进行渲染更新时&a…

上书房信息咨询:医疗满意度调研

随着人们生活水平的不断提高,医疗服务的需求日益增长。近期,上书房信息咨询受托完成了某市医疗市场的满意度调研,旨在深入了解市民对医疗服务的评价和需求,为提升医疗服务质量提供有力支持。 近年来,某市致力于推进医…

鸿蒙ArkTS语言学习(五):扩展(函数)@Extend@Styles@Builder

如何实现结构、样式复用呢? Extend:扩展组件(样式、事件) 作用:将相同组件复用的属性结构抽取封装,将不同的结构通过传入参数进行修改。 1. 定义语法 Extend(组件名) function 函数名{ ... } 2. 调用 组件…

一起学习LeetCode热题100道(60/100)

60.单词搜索(学习) 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那…

selenium消除启动特征避免被反爬-使用已经打开的浏览器

selenium消除启动特征避免被反爬 启动特征很多,如何消除selenium启动特征呢?这个也是因站而异,如果规避常规的检测,做到以下2点就可以。 1 是消除window.navigator.webdriver的值; 2 是修改chromedriver.exe的源码…

鸿蒙开发 数组改变,ui渲染没有刷新

问题描述: 数组push, 数组长度改变,ui也没有刷新 打印出了数组 console.log(this.toDoData.map(item > ${item.name}).join(, ), this.toDoData.length) 原代码: Text().fontSize(36).margin({ right: 40 }).onClick(() > {TextPicker…

在SpringBoot项目中使用多线程(配合线程池)加快从MySQL导入数据到ElasticSearch的速度

文章目录 1. 准备工作1.1 索引库1.2 建表1.3 实体类1.3.1 item.java1.3.2 itemDocument.java 1.4 编写配置文件1.5 编写 Mapper 类和 Service 类 2. 没有使用多线程的情况2.1 编码2.2 测试结果 3. 使用多线程(配合线程池)的情况3.1 自定义类,…

EM-7肽;EM-7-NH2;CAS:289632-61-7

【EM-7 简介】 EM-7,也被称为EM-7-NH2,其化学名称为[D-Glu5,D-Trp7,9,10]-Substance P (5-11),分子式为C57H66N12O10S,分子量为1111.273。 【中文名称】(D-谷氨酰 5,D-色氨酰 7,9,10)-物质 P (5-11) 【英文名称】(D-Glu5,D-Trp7…

openlayers+vite+vue3实现规划某一特定行政区(二)

在前一期实现离线地图初始化的基础上,本文中主要阐述如何实现规划某一特定行政区,并展示其行政区的区县名称。 提示:因前文中阐述了如何实现离线地图的初始化,所以在此不再进行书写并详解初始化的过程和流程,如有不明…

Task-Embedded Control Networks for Few-Shot Imitation Learning

发表时间:CoRL 2018 论文链接:https://readpaper.com/pdf-annotate/note?pdfId4500197057754718210&noteId2424798567891365120 作者单位:Imperial College London Motivation:就像人类一样,机器人应该能够利用来…

力扣经典题目之->另一颗树的子树(subRoot是否是root的子树)

一:题目 本题需要用到力扣经典题目之->相同的树(递归判断两颗二叉树是否相同)-CSDN博客 中的isSameTree,直接cv即可。 二:代码 三:解释 第一个函数: 力扣经典题目之->相…