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

基于gitlab 构建CICD发布到K8S 平台

基于GitLab 构建CICD 发布到k8s 平台

1.前置准备

  • 必须安装Docker环境

  • 必须有一套k8s环境 安装地址 https://blog.csdn.net/qq_36838700/article/details/141165373?spm=1011.2415.3001.5331

  • 安装Helm

2. 安装GitLab

# 创建所需的文件夹
mkdir -p /data/gitlab/{config,logs,data}
# docker 启动 方便
docker run --detach \--hostname 192.168.31.85 \--env GITLAB_OMNIBUS_CONFIG="external_url 'http://192.168.31.85'" \--publish 443:443 --publish 80:80 --publish 10022:22 \--name gitlab \--restart always \--volume /data/gitlab/config:/etc/gitlab \--volume /data/gitlab/logs:/var/log/gitlab \--volume /data/gitlab/data:/var/opt/gitlab \--shm-size 256m \192.168.31.85/amd64/gitlab:17.1.4-ce.0# 获取密码 用户名 root
docker exec -it 容器名字或容器ID grep 'Password:' /etc/gitlab/initial_root_password

3. 安装Helm

# 再k8s 集群安装
# 下载helm 二进制包
wget https://get.helm.sh/helm-v3.18.4-linux-amd64.tar.gz# 解压
tar xf helm-v3.18.4-linux-amd64.tar.gz# 移动二进制文件到你的path环境变量中
mv linux-amd64/helm /usr/local/bin# 验证helm 安装
helm version
# 输出结果
version.BuildInfo{Version:"v3.18.4", GitCommit:"980d8ac1939e39138101364400756af2bdee1da5", GitTreeState:"clean", GoVersion:"go1.23.6"

4. 拉取gitlab-runner 包

gitlab runner是用于执行 gitlab cicd任务的工具

我的gitlab 版本是 17.1.4 对应的 gitlab-runner 0.66.1 当然高版本应该也可以 但是我没测试过

# 添加软件包仓库
helm repo add gitlab https://charts.gitlab.io# 更新包
helm repo update# 拉取并解压
helm pull gitlab/gitlab-runner --untar --version 0.66.1# 新建一个 values-gitlab-runner.yaml
gitlabUrl: "http://192.168.31.18"  # 你的gitlab地址
rbac:create: true
replicas: 1
##
serviceAccount:create: truename: gitlab-runner-sa
runnerToken: "glrt-XoKhHCypx1BPLVxUQx7z"  # 这个token怎么获得 下图有解释
runners:config: |[[runners]][runners.kubernetes]namespace = "{{.Release.Namespace}}"image = "alpine"# 可能没gitlab-runner 这个名称空间 需要手动创建下
kubectl create ns gitlab-runner # 注册gitlab-runner 到k8s中
helm upgrade --install gitlab-runner -f values-gitlab-runner.yaml . --namespace gitlab-runner 

4.1.1 Token 如何获得

登陆你的帐号 用管理员帐号登陆 点击管理中心

在这里插入图片描述

点击 CICD > Runner

在这里插入图片描述

点击新建实例

在这里插入图片描述

标签名称可以自定义

在这里插入图片描述

复制token 到上处的配置文件中即可

在这里插入图片描述

运行安装gitlab-runner 命令后

在这里插入图片描述

如果出现 You 什么的表示你runner 已经成功运行在k8s中了 点击View Runners

在这里插入图片描述

在这里插入图片描述

5 新建项目

如果要想使用流水线 就必须要在项目中声明流水线的配置文件 文件名称 为.gitlab-ci.yml

我这里就不演示创建项目了

在这里插入图片描述

6 最后附上流水线配置文件 构建项目 + 打包镜像

具体流水线语法 请看官网 https://archives.docs.gitlab.com/17.11/ci/yaml/

stages:- compile- buildvariables:IMG_SVC_NAME: electron-signatureAMD64: amd64ARM64: arm64CI_REGISTRY_AMD64_IMAGE: $CI_REGISTRY/$AMD64-yf/$IMG_SVC_NAMECI_REGISTRY_ARM64_IMAGE: $CI_REGISTRY/$ARM64-yf/$IMG_SVC_NAMEAMD64_BASE_IMAGE: $CI_REGISTRY/$AMD64/openjdk:8-jreARM64_BASE_IMAGE: $CI_REGISTRY/$ARM64/openjdk:8-jre-arm64LOCAL_KUBE_CONFIG: /tmp/configPACK_ENVIRONMENT: deliverMIRROR_IMAGE_VERSION: 1.0.0cache:paths:- cachecompile-package: # This job runs in the build stage, which runs first.stage: compileimage: $CI_REGISTRY/$AMD64/openjdk-17-maven:3.8.8only:- /^feat/- /^hotfix/- /^release/- tag- push- devscript:- echo "Fetch current version of package"- PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)- echo "Gotcha version:$PROJECT_VERSION"- echo "CUR_BUILD_VERSION=$PROJECT_VERSION" >> build.env- echo "Compiling the code..."- mvn clean package -P$PACK_ENVIRONMENT -Dmaven.test.skip=true -Dmaven.repo.local=cache- echo "Compile complete."artifacts:untracked: falsewhen: on_successaccess: allexpire_in: 1 weekpaths:- electron-signature-web/target/*.jarreports:dotenv: build.envbuild:stage: buildimage: $CI_REGISTRY/$AMD64/kaniko-project/executor:debug# run on branch develop, and mergedrules:- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "dev"'before_script:- echo "Build multi-architecture images (amd64 & arm64)"- cp $CI_PROJECT_DIR/Dockerfile $CI_PROJECT_DIR/Dockerfile.bak- mkdir -pv /kaniko/.docker- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$REGISTRY_USER\",\"password\":\"$REGISTRY_PASS\"}}}" > /kaniko/.docker/config.json- cat /kaniko/.docker/config.jsonscript:- sed "s|^FROM.*|FROM $AMD64_BASE_IMAGE|g" $CI_PROJECT_DIR/Dockerfile.bak > $CI_PROJECT_DIR/Dockerfile- PROJECT_VERSION=$CI_REGISTRY_AMD64_IMAGE:$MIRROR_IMAGE_VERSION- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $PROJECT_VERSION --custom-platform "linux/amd64"- sed "s|^FROM.*|FROM $ARM64_BASE_IMAGE|g" $CI_PROJECT_DIR/Dockerfile.bak > $CI_PROJECT_DIR/Dockerfile- PROJECT_VERSION=$CI_REGISTRY_ARM64_IMAGE:$MIRROR_IMAGE_VERSION- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $PROJECT_VERSION --custom-platform "linux/arm64"- echo "build complete"artifacts:reports:dotenv: build.env

7. 全局变量定义

可能有小伙伴到看 .gitlab-ci.yml 文件中 存在 $CI_REGISTRY $CI_PROJECT_DIR 等这些为在文件中定义的变量 那是在哪里定义的呢

点击设置> CICD

在这里插入图片描述

可以选择添加变量

在这里插入图片描述

8. 项目组变量

变量的作用访问是在当前项目组以及子组中可以访问

点击项目组里面的设置> CICD

在这里插入图片描述

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

相关文章:

  • Java大厂面试实录:谢飞机的电商场景技术问答(Spring Cloud、MyBatis、Redis、Kafka、AI等)
  • 飞算Java AI:专为 Java 开发者打造的智能开发引擎
  • 后台管理系统-权限管理
  • 云、实时、时序数据库混合应用:医疗数据管理的革新与展望(下)
  • 从Markdown到PPT:用Python打造专业演示文稿转换器
  • 2025前端面试真题以及答案-不断整理中,问题来源于牛客真题
  • 面具贴纸美颜SDK如何集成进直播APP?技术细节与性能优化实战
  • 百度2026届校招开启,大规模发力AI的百度未来何在?
  • PPT处理控件Aspose.Slides教程:使用 C# 将 PPTX 转换为 EMF
  • 【Linux仓库】命令行参数与环境变量【进程·伍】
  • 语音对话秒译 + 视频悬浮字 + 相机即拍即译:ViiTor 如何破局跨语言场景?
  • Django快速入门搭建网站
  • Monorepo 与包管理工具:从幽灵依赖看 npm 与 pnpm 的架构差异
  • Django母婴商城项目实践(二)
  • 行测之地理常识
  • Linux进程间通信--命名管道
  • 用TensorFlow进行逻辑回归(一)
  • AI 产品经理必看:神秘技术架构图如何打通跨团队沟通壁垒?
  • wpf Canvas 导出图片
  • 利用Claude code,只用文字版系统设计大纲,就能轻松实现系统~
  • AIC8800M40低功耗wifi在ARM-LINUX开发板上做OTA的调试经验
  • 【计算机网络】王道考研笔记整理(2)物理层
  • Flask 入门到实战(2):使用 SQLAlchemy 打造可持久化的数据层
  • Java-70 深入浅出 RPC Dubbo 详细介绍 上手指南
  • QT控件 使用QtServer系统服务实现搭建Aria2下载后台服务,并使用Http请求访问Json-RPC接口调用下载退出
  • 和鲸社区深度学习基础训练营2025年关卡4
  • Kubernetes 高级调度 01
  • 飞算科技正在撬动各行业数字化转型的深层变革
  • 【理念●体系】Windows AI 开发环境搭建实录:六层架构的逐步实现与路径治理指南
  • Flask 入门到实战(3):用 SQLAlchemy 优雅操作数据库