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

GitOps实践指南:GitLab CI/CD + ArgoCD 实现 Kubernetes 自动化部署

GitOps实践指南:GitLab CI/CD + ArgoCD 实现 Kubernetes 自动化部署

文章目录

  • GitOps实践指南:GitLab CI/CD + ArgoCD 实现 Kubernetes 自动化部署
  • 一、部署 GitLab Runner(共享模式)
    • 1. 下载并安装 GitLab Runner
    • 2. 配置Runner参数:config.toml
    • 3. 配置 Systemd 启动服务
  • 二、 配置 GitLab 仓库与 CI/CD 流程
    • 1. 拉取测试仓库代码并配置Git凭据
    • 2. 编写.gitlab-ci.yml并推送仓库
    • 3. 验证Ci流程
  • 总结


在实现 Kubernetes 自动化运维和持续交付的过程中,GitLab CI/CD 是非常核心的工具链之一。本节将详细介绍如何部署 GitLab Runner,编写 .gitlab-ci.yml 自动构建并推送 Docker 镜像,结合 ArgoCD 实现自动部署。

一、部署 GitLab Runner(共享模式)

1. 下载并安装 GitLab Runner

# 下载地址
官网地址:https://gitlab.cn/docs/runner/install/bleeding-edge.html
二进制文件地址:https://s3.amazonaws.com/gitlab-runner-downloads/main/binaries/gitlab-runner-linux-amd64# 上传服务器并移动
mkdir -p /usr/local/gitlab-runner
chmod +x gitlab-runner-linux-amd64
mv gitlab-runner-linux-amd64 /usr/local/gitlab-runner/# 注册shared-runner
/usr/local/gitlab-runner/gitlab-runner-linux-amd64 register \
--non-interactive \  #非交互模式
--url http://192.168.101.11/ \  #指定gitlab的地址,根据自己的情况进行替换
--registration-token 1pfynmj564wKXsVaXiWD \  #验证 Runner 注册的令牌,也就是我下图框起来的位置
--executor "shell" \  #指定执行器为 shell
--docker-image maven:latest \
--description gitlab-runner \  #设置描述信息
--maintenance-note hwj \  #添加维护备注
--tag-list docker \  #为 Runner 设置标签,这里设置为 docker,也是根据自己情况修改
--run-untagged="true" \  #允许 Runner 运行没有标签的作业
--locked="false" \  #设置 Runner 是否锁定到当前项目
--access-level="not_protected"  #设置 Runner 的保护级别

在这里插入图片描述

2. 配置Runner参数:config.toml

vim /etc/gitlab-runner/config.tomlconcurrent = 10   #流水线并发数量默认为1,修改为10
check_interval = 0
connection_max_age = "15m0s"
shutdown_timeout = 0[session_server]session_timeout = 1800[[runners]]name = "gitlab-runner"url = "http://192.168.101.11/"  #git仓库地址id = 13  #gitlab-runner的idtoken = "Jse57-spnafPstju5Y2n"  #注册runner时生成的认证tokentoken_obtained_at = 2025-03-27T07:20:50Ztoken_expires_at = 0001-01-01T00:00:00Zexecutor = "shell"  #直接在宿主机上执行任务,不涉及docker[runners.cache]MaxUploadedArchiveSize = 0[runners.cache.s3][runners.cache.gcs][runners.cache.azure][runners.docker]   #若使用 docker 执行器需启用此配置tls_verify = falseimage = "maven:latest"privileged = falsedisable_entrypoint_overwrite = falseoom_kill_disable = falsedisable_cache = falsevolumes = ["/cache"]shm_size = 0
network_mtu = 0

3. 配置 Systemd 启动服务

mkdir -p /usr/local/gitlab-runner/work  #创建工作目录
vim /usr/lib/systemd/system/gitlab-runner.service
[Unit]
Description=GitLab Runner
ConditionFileIsExecutable=/usr/local/gitlab-runner/gitlab-runner-linux-amd64After=syslog.target network.target[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/local/gitlab-runner/gitlab-runner-linux-amd64 "run" "--working-directory" "/usr/local/gitlab-runner/work" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--user" "root"Restart=alwaysRestartSec=120
EnvironmentFile=-/etc/sysconfig/gitlab-runner[Install]
WantedBy=multi-user.target# 启动gitlab-runner
systemctl daemon-reload
systemctl restart gitlab-runner.service && systemctl status gitlab-runner.service
ln -s /usr/local/gitlab-runner/gitlab-runner-linux-amd64 ./gitlab-runner

在这里插入图片描述

二、 配置 GitLab 仓库与 CI/CD 流程

1. 拉取测试仓库代码并配置Git凭据

git clone http://192.168.101.11/yw/hwj.git

在这里插入图片描述

2. 编写.gitlab-ci.yml并推送仓库

vim .gitlab-ci.yml
stages:- package  # 定义 CI/CD 任务的阶段,只有一个 package 阶段variables:GIT_DEPTH: 0  # 禁用 Git 的 shallow clone,完整拉取 Git 仓库,确保获取完整的提交历史IMAGE_NAME: "harbor.local/k8s/zhsy"  # 设定 Docker 镜像的名称IMAGE_TAG: "${CI_COMMIT_TAG}"  # 设定 Docker 镜像的标签,使用 GitLab 的提交 Tag 作为版本号package:stage: package  # 指定该 Job 属于 package 阶段tags:- docker  # 这个docker标签需与上面注册shared-runner时候配置时一致only:- tags  #只在tag被push时触发script:- mvn package -Dmaven.test.skip=true  # 执行 Maven 打包,并跳过测试,提高构建速度- echo "Harbor12345" | docker login -u "admin" --password-stdin harbor.local  # 使用密码管道方式登录 Harbor 镜像仓库- docker build -t $IMAGE_NAME:$IMAGE_TAG .  # 构建 Docker 镜像,使用变量设置镜像名称和 Tag- docker push $IMAGE_NAME:$IMAGE_TAG- 'sed -i "s|image: harbor.local/k8s/zhsy:.*|image: ${IMAGE_NAME}:${IMAGE_TAG}|" k8s/zhsy/zhsy-deploy.yaml'# Git 配置- git config --global user.email "hwj@hwj.com"- git config --global user.name "hwj"# 使用凭据方式推送(避免交互)- git remote set-url origin http://${GIT_USERNAME}:${GIT_PASSWORD}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git- git add k8s/zhsy/zhsy-deploy.yaml- git commit -m "Update image version to $IMAGE_TAG" || echo "No changes"- git push origin HEAD:master# 推送git仓库
git add .
git commit -am '上传.gitlab-ci.yml'
git push origin master

此时仓库如图所示,我这里还做了集成 Argocd 自动更新 pod 的操作,有感兴趣的详见我另一篇文章,基于k8s的Jenkins CI/CD平台部署实践(三):集成ArgoCD实现持续部署

在这里插入图片描述

3. 验证Ci流程

git tag -a v1.0.1 -m 'test'
git push origin v1.0.1

此时,将触发 GitLab CI 自动执行如下流程:

  1. 编译项目并打包
  2. 构建并推送镜像到 Harbor 仓库
  3. 修改 K8s 部署 YAML 文件中的镜像版本
  4. 提交变更到 Git 仓库
  5. ArgoCD 监听到仓库变化,自动更新部署
    在这里插入图片描述

在这里插入图片描述


总结

🚀 本篇文章详细介绍了 GitLab CI/CD 的完整流程,从部署 Runner 到自动构建镜像、推送 Harbor、修改 K8s 配置再到 ArgoCD 自动更新,形成了一个标准的 GitOps 流水线。

http://www.dtcms.com/a/270160.html

相关文章:

  • 【AI大模型】深度学习正则化技术:Batch Normalization (BatchNorm) 详解
  • 【GPT深度研究】科研SaaS项目可行性分析报告
  • 【学习笔记】网络设备(华为交换机)基础知识 24 —— 以太网子接口基础知识
  • 【入门级-C++程序设计:3、程序基本语句-多层循环语句】
  • 数据推荐|标贝科技大规模高质量数据集
  • 25.安卓逆向2-frida hook技术-拦截弹框事件(拦截强制更新弹框和解决jadx加载dex文件不全问题)
  • 从0到1搭建ELK日志收集平台
  • 扣子Coze飞书多维表插件参数获取流程
  • 如何利用机器学习(ML)检测异常登录行为
  • 深深浅浅地理解 Python 中的 `Barrier` 对象
  • emscripten编译cocos2dx项目输入框支持中文
  • MySQL 全库表记录统计与空间估算教程
  • 猿人学js逆向比赛第一届第十五题
  • SpringAI学习笔记-MCP服务器简单示例
  • 软考(软件设计师)数据库原理-SQL
  • HTML+JS+CSS制作一个数独游戏
  • CSS揭秘:9.自适应的椭圆
  • 记一次mount point is busy问题排查
  • 数据结构 —— 栈(stack)在算法思维中的巧妙运用
  • C++进阶—二叉树进阶
  • 笔记/TCP/IP四层模型
  • Fence-音视频设备资源同步
  • IT 技术领域创作者三周年纪念日
  • 【CodeTop】每日练习 2025.7.8
  • Java 阻塞队列:7种类型全解析
  • 起重机械的工作循环门限值计算逻辑
  • 容器技术入门与Docker环境部署
  • Ntfs!LfsRestartLogFile函数分析之两次调用Ntfs!LfsReadRestart函数的目的
  • (生活比喻-图文并茂)http2.0和http3.0的队头阻塞,http2.0应用层解决,TCP层存在,3.0就是彻底解决,到底怎么理解区别???
  • AI健康小屋“15分钟服务圈”:如何重构社区健康生态?