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

发布于:2025-07-09 ⋅ 阅读:(16) ⋅ 点赞:(0)

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


在实现 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.toml

concurrent = 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的id
  token = "Jse57-spnafPstju5Y2n"  #注册runner时生成的认证token
  token_obtained_at = 2025-03-27T07:20:50Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "shell"  #直接在宿主机上执行任务,不涉及docker
  [runners.cache]
    MaxUploadedArchiveSize = 0
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]   #若使用 docker 执行器需启用此配置
    tls_verify = false
    image = "maven:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/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-amd64
 
After=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=always
 
RestartSec=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 流水线。


网站公告

今日签到

点亮在社区的每一天
去签到