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

Kubernetes 上的 GitLab + ArgoCD 实践(二):使用自建 GitLab Runner 完善 CI 流程

文章目录

  • 从共享 Runner 到自建 Runner
  • CI流程
  • GitLab Runner
    • Gitlab-runner创建
    • Gitlab-runner 设置
      • 增加repo并update
      • 安装
      • 验证gitlab-runner安装
  • CI过程
    • Clone repo
    • 微调CI文件
    • push repo
    • 验证
  • 结语:CI 是起点,不是终点

从共享 Runner 到自建 Runner

在上篇文章Kubernetes 上的 GitLab + ArgoCD 实践(一):实现基础 CI/CD 流程
中,我们已经将CI的流程大致走了一遍,不过当时使用的是 GitLab 已有的 Runner(通常是 Shared Runner 或 GitLab 托管 Runner)。这种方式虽然入门简单,但在真实生产环境中,我们往往需要更高的资源掌控权,例如:

  • 构建镜像时能直接访问 Kubernetes 集群内部服务
  • 避免企业内部代码或镜像流量暴露到外网
  • 根据项目规模灵活扩容 Runner 资源
  • 支持 GPU、ARM 等特殊编译环境
  • 可自定义缓存、网络、安全策略

所以,这一篇文章我将在上篇文章的基础上进行微调,所以,这一篇文章我将在上篇文章的基础上进行微调,实现自建 Runner 与 GitLab 项目之间的对接,并再次完成镜像构建与推送的完整 CI 流程,使 CI/CD 流程真正做到在自己掌控的基础设施上稳定运行。

CI流程

上一篇文章中的CI流程:

  • GitLab 执行 CI → 构建镜像 → 更新 gitops repo → ArgoCD 自动同步。
    本篇文章中的CI流程:
  • 自建 GitLab Runner 在本地/K8s 中执行 CI → 构建镜像(使用 Kaniko) → 更新 gitops repo → ArgoCD 自动同步。
┌────────────┐      ┌─────────────────────┐      ┌───────────────┐     
│ Developer  │ ---> │ GitLab Server       │ ---> │ GitLab Runner │
│   (push)   │      │ (trigger pipeline)  │      │ (build+update)│
└────────────┘      └─────────────────────┘      └───────────────┘│▼┌─────────────┐│ ArgoCD      ││ syncs to k8s│└─────────────┘

GitLab Runner

GitLab Runner 是用于在 GitLab 平台的 CI/CD 流水线中执行作业(job)的组件。
GitLab Runner 充当代理,将 GitLab 项目与能够运行作业的环境连接起来,这些环境可以是物理机器、虚拟机,或者 Docker 容器。
一个简短的例子:
执行job:GitLab Runner 负责执行在 job pipeline 中 定义的任务。这可以包括代码编译、自动化测试、application 交付,或软件开发周期中所需的其他任务。
想了解更详细内容,可以查看 GitLab 官方文档。

Gitlab-runner创建

  1. 进入gitops-repo项目 -> 设置 -> CI/CD -> Runner,点击“新建项目Runner”,填写信息(比如标签、描述等)

  2. GitLab 默认只会把 Job 分配给标签匹配的 Runner,这里将runner 标签(Tags)设置为k8s
    在这里插入图片描述

  3. 然后点击“创建”,就会生成一个令牌。这个令牌是专门给这个预先创建的Runner使用的。
    请记下下图中–token部分显示的"glrt-"开头的token,之后在k8s集群设置时要使用
    在这里插入图片描述

  4. 检视runner
    页面上虽然已经能看到 Runner,但它会显示为灰色,那是因为它还没真正“上线”。换句话说,GitLab 只是记录了 Runner 的配置,还没有收到来自实际执行节点的注册与心跳信号,因此暂时无法投入工作。在这里插入图片描述

Gitlab-runner 设置

gitlab-runner安装有多种方式,但推荐使用用 Helm:
首先添加Helm 仓库,并更新本地 Helm 仓库缓存

增加repo并update

helm repo add gitlab https://charts.gitlab.io
helm repo update

安装

  1. 创建namespace
kubectl create namespace gitlab-runner
  1. 安装gitlab-runner
  • glrt-xxxxx:换成你在 GitLab project(项目)中新建 Runner 得到的 认证 token
  • runners.executor=kubernetes:关键,告诉 Runner job 要跑在 K8s Pod 中
  • tags: 指定为k8s,与先前在gitlab上建立的runner tags保持一致
helm install demo-project-runner gitlab/gitlab-runner \--namespace gitlab-runner \--create-namespace \--set gitlabUrl=https://gitlab.com \--set runnerRegistrationToken="glrt-g2_Ae6iUjsZ6yUC763vZ0G86MQpwOjE4cTBlcgp0OjMKdTppN3FuMxg.01.1j08wwxur"  \--set runners.executor=kubernetes \--set rbac.create=true \--set serviceAccount.create=true \--set serviceAccount.name=gitlab-runner \--set runners.requestConcurrency=4 \--set runners.tags="k8s"

验证gitlab-runner安装

使用 Helm 安装完成 GitLab Runner 后,可以通过以下指令查看当前命名空间内的所有资源:

 kubectl get all -n gitlab-runner

你会看到 Helm 已经为 Runner 创建好一整套运行所需的组件,其中最核心的是一个 Deployment,以及由它管理的 Runner Pod。

NAME                                                    READY   STATUS    RESTAR                                                                                        TS       AGE
pod/demo-project-runner-gitlab-runner-c664b4cc5-zb6lg   1/1     Running   29 (30                                                                                        m ago)   17hNAME                                                READY   UP-TO-DATE   AVAILAB                                                                                        LE   AGE
deployment.apps/demo-project-runner-gitlab-runner   1/1     1            1                                                                                                   17hNAME                                                          DESIRED   CURRENT                                                                                           READY   AGE
replicaset.apps/demo-project-runner-gitlab-runner-c664b4cc5   1         1                                                                                                 1       17h
root@k8sm01:~# kubectl get all -n gitlab-runner
NAME                                                    READY   STATUS    RESTARTS       AGE
pod/demo-project-runner-gitlab-runner-c664b4cc5-zb6lg   1/1     Running   29 (30m ago)   17hNAME                                                READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/demo-project-runner-gitlab-runner   1/1     1            1           17hNAME                                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/demo-project-runner-gitlab-runner-c664b4cc5   1         1         1       17h

同时回到gitlab,将会看到gitlab上的runner已经被点亮在这里插入图片描述

CI过程

Clone repo

mkdir -p /root/demo-cicd-project/app-repo
cd /root/demo-cicd-project/app-repo
git clone git@gitlab.com:mygroup/app-repo.git

微调CI文件

上一章中使用的 .gitlab-ci.yml 基本可以直接沿用。这里只做少量调整:为相关 Job 增加 tags,使它们能够被我们自建的 Runner 正确接手执行。镜像构建部分依旧沿用 Kaniko 的方式,不需要额外修改。

stages:- build- update-gitopsvariables:IMAGE: "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"build-image:stage: buildtags:- k8simage: name: gcr.io/kaniko-project/executor:debugentrypoint: [""]variables:DOCKER_AUTH_CONFIG: "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}"script:- | /kaniko/executor \--dockerfile=Dockerfile  \--context=$CI_PROJECT_DIR \--destination=${IMAGE} #  because gcr.io/kaniko-project/executor is a light image  without sh shell, so it is changed to "command mode" instead of "script mode"#command:#  - /kaniko/executor #  - --dockerfile=Dockerfile #  - --context=$CI_PROJECT_DIR #  - --destination=${IMAGE}update-gitops:stage: update-gitopstags:- k8simage: alpine:3.18before_script:- apk add --no-cache git yq- git config --global user.email "ci@mydomain.com"- git config --global user.name "gitlab-ci"script:- git clone https://oauth2:${GITOPS_REPO_TOKEN}@${GITOPS_REPO_URL#https://} gitops#- git clone https://$GITOPS_REPO_USER:$GITOPS_REPO_TOKEN@${GITOPS_REPO_URL#https://} gitops- cd gitops- yq e '.spec.template.spec.containers[0].image = strenv(IMAGE)' -i ./myapp/deployment.yaml- git add .- git commit -m "Update image to $IMAGE"- git push origin HEAD:mainonly:- main

push repo

git add .
git commit -m "build image by gitlab-runner"
git push origin main

验证

当完成push后,应该会触发CI完成.gitlab-runner.yml文件中定义的build与update-gitops阶段
在这里插入图片描述
job状态显示”job succeeded

在这里插入图片描述

进入project对应的repo将会看到已经构建好的image
在这里插入图片描述

结语:CI 是起点,不是终点

通过本篇的实践,我们已经把 GitLab 自建 Runner 引入到 Kubernetes 中,并成功运行了完整的持续集成流程。现在,每一次代码提交都会触发自动构建、测试和反馈,让质量问题更早暴露,开发协作也不再依赖人工提醒。这种稳定、可重复的 CI 机制,是现代软件交付体系最重要的基石。
当然,CI 只是自动化之旅的一半。构建产物仍需要被可靠地推向各个环境,让应用真正落地到用户侧。也就是说,只有继续推进持续交付(CD),我们才能打通从代码到上线的全链路。下一篇将正式从 CI 扩展到 CD,带你使用 GitLab 与 ArgoCD,将部署能力纳入自动化体系之内,逐步实现 Kubernetes 上的 GitOps 交付流程。
下一篇敬请期待:
《Kubernetes 上的 GitLab + ArgoCD 实践(三):使用 ArgoCD 打通 CD 流程》
让我们继续把自动化的“最后一公里”走到底

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

相关文章:

  • 网站如何查看浏览量2008建设网站
  • 开学季技术指南:高效知识梳理与实战经验分享
  • 网站推广计划渠道国外做美食视频网站有哪些
  • 金蝶K3老单 工艺路线维护特殊字符(使用模块返回值的方法)
  • 信贷控制范围
  • 乐陵网站优化最简单的网站设计
  • 项目信息和生产安全管理指南(试行)
  • 【Tesla】ICCV 2025技术分享
  • 企业做网站营销企业网站 响应式
  • 深度学习C++中的数据结构:栈和队列
  • 2025-tomcat web实践
  • 免费建立微信网站如何设计的英文网站
  • liferay 做网站哪里有网站开发公司
  • Leetcode 38
  • Django 学习路线图
  • 把网站放到服务器公司做网站需要准备什么资料
  • 如何批量获取蛋白质序列的所有结构域(domain)数据-2
  • MySQL基础知识大全
  • 站群服务器都有什么作用
  • C# 初级编程
  • linux fair调度器
  • 建设工程项目在哪个网站查询零食网站页面模板
  • Python 基础详解:enumerate() 函数
  • 基于鸿蒙UniProton的车载信息娱乐系统开发指南
  • 自然语言处理前沿创新方向与技术路径
  • 微软做网页的软件烟台优化网站公司
  • 使用Jmeter进行http接口测试
  • Jenkins从节点配置全攻略:从搭建到任务调度,参数详解与实战指南
  • 【Agentic AI】提示链模式学习笔记
  • 广东省省考备考(第一百三十三天10.25)——科学推理(强化训练)