Kubernetes+Gitlab+Jenkins+ArgoCD多集群部署

2023-11-26 13:01

本文主要是介绍Kubernetes+Gitlab+Jenkins+ArgoCD多集群部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Kubernetes+Gitlab+Jenkins+ArgoCD多集群部署

文章目录

  • Kubernetes+Gitlab+Jenkins+ArgoCD多集群部署
    • 1. Kubernetes+Gitlab+Jenkins+ArgoCD多集群部署
    • 2. 添加WebHooks自动触发
    • 3. Jenkins-构建-执行Shell
    • 4. 制作镜像及修改Yaml文件
      • 4.1 Dockerfile
      • 4.2 Build-Shell
    • 5.自动部署Demo测试
      • 5.1 推送代码至仓库特定分支
      • 5.2 WebHookS自动触发
      • 5.3 镜像及Yaml自动Push成功
      • 5.4 ArgoCD检测到Yaml文件发生变化
      • 5.5 ArgoCD与Gitlab对比仓库哈希值与Commit值
      • 5.6 部署成功,钉钉告警提示
    • 6.小结

1. Kubernetes+Gitlab+Jenkins+ArgoCD多集群部署

#Kubernetes+Gitlab+Jenkins+ArgoCD多集群部署
在企业级环境中,由于业务的需要会有许多Kubernetes集群需要管理,比如Dev环境,UAT环境,Pro环境等.
每次发布和上线都需要分别登录不同集群进行部署项目.如果我们使用了ArgoCD,它可以支持多集群部署,大大提高了效率和准确性.
ArgoCD允许同时向多个集群部署应用,还可以轻松地管理不同环境的配置,轻松部署应用程序,提高生产效率.
此文档,重新规划了CI/CD流程,以符合公司的现有架构和技术需求.它将有助于我们的团队更加高效地部署代码,减少人工干预和错误率,从而提高生产效率.

K8S+Gitlab+Jenkins+ArgoCD

2. 添加WebHooks自动触发

找到Jenkins上的项目并且添加`构建触发器`.

Jenkins-webhooks

下图中两处的值是要填写到`Gitlab-WebHooks`中的.

image-20231122151528307

image-20231122151613768

找到Gitlab项目对应的仓库,设置webhooks.

image-20231122151346808

Jenkins`构建触发器`中可以找到此处所对应的值.

image-20231122151802861

3. Jenkins-构建-执行Shell

#!/bin/bash
K8S_IP="192.168.45.12"
K8S_PORT="22"
K8S_CODE="/opt/k8s-yaml/java-demo"
JKS_CODE="/var/lib/jenkins/workspace/javademo"
JKS_TAR="java-webhook"
Build_SHELL="build-webhook"
#编译
cd $JKS_CODE && mvn clean package
#项目编译以后程序存放目录
cd $JKS_CODE/target
#将编译后的程序进行打包
tar czf $JKS_TAR.tar.gz  *.jar
#进入项目目录删除旧程序包
ssh -p $K8S_PORT root@$K8S_IP "cd $K8S_CODE && rm -rf *.jar $JKS_TAR.tar.gz"
#将新程序包传输值项目目录中
scp -P $K8S_PORT $JKS_CODE/target/$JKS_TAR.tar.gz root@$K8S_IP:$K8S_CODE
#解压新程序包
ssh -p $K8S_PORT root@$K8S_IP "cd $K8S_CODE && tar xf $JKS_TAR.tar.gz"
#执行脚本(制作镜像并推送镜像至仓库,修改Yaml文件并推送至Gitlab仓库)
ssh -p $K8S_PORT root@$K8S_IP "cd $K8S_CODE && bash $Build_SHELL.sh"
#删除Jenkins项目目录中的旧代码
cd $JKS_CODE && rm -rf *

4. 制作镜像及修改Yaml文件

4.1 Dockerfile

# 使用轻量级的基础镜像  
FROM openjdk:8-jdk-alpine  
# 设置工作目录  
WORKDIR /app  
# 复制JAR文件到工作目录  
COPY www-0.0.1-SNAPSHOT.jar app.jar  
# 暴露端口  
EXPOSE 8088  
# 设置JVM参数  
ENV JAVA_OPTS="-Xms1024m -Xmx1024m -XX:+UseConcMarkSweepGC -XX:+DoEscapeAnalysis -XX:+EliminateAllocations -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails"
# 启动命令  
CMD exec java $JAVA_OPTS -jar app.jar

4.2 Build-Shell

#!/bin/bash
version=`date +%y%m%d%H%M%S`
YAML="java-deploy"
YAML_CODE="/opt/k8s-yaml/java-demo/java-demo-yaml"
echo "即将制作业务镜像!!!"
docker build -t swr.ap-southeast-1.myhuaweicloud.com/dev/java-demo:${version} .
echo "镜像构建完成,即将上传至镜像仓库" && sleep 1
docker push swr.ap-southeast-1.myhuaweicloud.com/dev/java-demo:${version}
echo "镜像已上传至镜像仓库" && sleep 1echo "修改Yaml并推送至Git仓库" && sleep 1
cd $YAML_CODE && sed -i "s/image: swr.ap-southeast-1.myhuaweicloud.*/image: swr.ap-southeast-1.myhuaweicloud.com\/dev\/java-demo:${version}/g" $YAML.yaml
echo "修改成功,正在推送代码至Git仓库" && sleep 1
cd $YAML_CODE && git add ./ && git commit -m "${version}" && git push -u origin main
echo "推送代码成功,3分钟左右,ArgoCD会自动发布到指定K8S集群中" && sleep 1

5.自动部署Demo测试

5.1 推送代码至仓库特定分支

image-20231122154603768

5.2 WebHookS自动触发

image-20231122154721179

5.3 镜像及Yaml自动Push成功

image-20231122154959147

5.4 ArgoCD检测到Yaml文件发生变化

WX20231122-150136

WX20231122-150202

5.5 ArgoCD与Gitlab对比仓库哈希值与Commit值

WX20231122-150317

1700636639736

5.6 部署成功,钉钉告警提示

image-20231122155602810

WX20231122-150705

6.小结

文档至此我们已经完成了Kubernetes+GitLab+Jenkins+ArgoCD多集群部署,使用Gitlab统一管理YAML文件,极大地提高了工作效率.

这篇关于Kubernetes+Gitlab+Jenkins+ArgoCD多集群部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

Linux部署中的文件大小写问题的解决方案

《Linux部署中的文件大小写问题的解决方案》在本地开发环境(Windows/macOS)一切正常,但部署到Linux服务器后出现模块加载错误,核心原因是Linux文件系统严格区分大小写,所以本文给大... 目录问题背景解决方案配置要求问题背景在本地开发环境(Windows/MACOS)一切正常,但部署到

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Jenkins分布式集群配置方式

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