当前位置: 首页 > 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.lryc.cn/news/582557.html

相关文章:

  • 如何开发第一个你的dapp项目?
  • 闲庭信步使用图像验证平台加速FPGA的开发:第四课——RGB转HSV的FPGA实现
  • 利用外部Postgresql及zookeeper,启动Apache Dolphinscheduler3.1.9
  • 进阶向:Python音频录制与分析系统详解,从原理到实践
  • 3.直面分布式核心挑战:厘清概念、破解雪崩与熔断之道
  • 采煤机:技术革新驱动下的全球市场格局与未来趋势
  • 2025年前端面试题
  • C++ 选择排序、冒泡排序、插入排序
  • 云原生安全观察:零信任架构与动态防御的下一代免疫体系
  • 小红书APP品牌升级,启用新品牌口号“你的生活兴趣社区”
  • Axure-9高级教程:Axure函数使用手册-免费
  • Menu:菜单控件应用实例
  • Python入门Day5
  • 【华为昇腾|CUDA】服务器A6000显卡部署LLM实战记录
  • RISC-V:开源芯浪潮下的技术突围与职业新赛道 (一)为什么RISC-V是颠覆性创新?
  • Redis常用数据结构以及多并发场景下的使用分析:Sorted List类型
  • 算法设计与分析 知识总结
  • 【Python-GEE】如何利用Landsat时间序列影像通过调和回归方法提取农作物特征并进行分类
  • Paimon本地表查询引擎LocalTableQuery详解
  • DVWA靶场通关笔记-SQL盲注(SQL Injection Blind Medium级别)
  • 【Mac】实现Docker下载安装【正在逐步完善】
  • hmall学习
  • Apollo源码架构解析---附C++代码设计示例
  • 基于odoo17的设计模式详解---命令模式
  • 如何快速分析光伏电站气象数据?
  • 没合适的组合wheel包,就自行编译flash_attn吧
  • 云原生技术与应用-容器技术技术入门与Docker环境部署
  • 【RL+空战】学习记录01:jsbsim 仿真环境初次学习,F16 战机起飞
  • 吃透二分法的模板解法(适合所有类似于二分的算法题)
  • 【OceanBase 诊断调优】—— SQL 查询触发笛卡尔积怎么处理