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

相关文章:

  • Tomcat问题:启动脚本startup.bat中文乱码问题解决
  • 信号肽预测工具PrediSi本地化
  • 【flutter】flutter网易云信令 + im + 声网rtm从0实现通话视频文字聊天的踩坑
  • CentOS 安装 JDK+ NGINX+ Tomcat + Redis + MySQL搭建项目环境
  • 『 C++ 入门到放弃 』- 多态
  • MyBatis-Plus通用中等、大量数据分批查询和处理
  • c语言中的数组IV
  • 卸载软件总留一堆“垃圾”?这款免费神器,一键扫清注册表和文件残留!
  • Python shutil模块详解
  • GPT3/chatGPT/T5/PaLM/LLaMA/GLM主流大语言模型的原理和差异
  • 从零实现一个GPT 【React + Express】--- 【3】解析markdown,处理模型记忆
  • 【LeetCode 热题 100】146. LRU 缓存——哈希表+双向链表
  • 0102基础补充_交易演示-区块链-web3
  • Django母婴商城项目实践(二)
  • 机器学习数据集划分全指南:train_test_split详解与实践
  • 基于相似性引导的多视角功能性脑网络融合|文献速递-最新论文分享
  • 【科研绘图系列】R语言绘制系统发育树和柱状图
  • 思维链革命:让大模型突破“机器思考”的边界
  • UniHttp中HttpApiProcessor生命周期钩子介绍以及公共参数填充-以百度天气接口为例
  • Grid网格布局完整功能介绍和示例演示
  • hive/spark sql中unix_timestamp 函数的坑以及时间戳相关的转换
  • php中调用对象的方法可以使用array($object, ‘methodName‘)?
  • 【JMeter】接口加密
  • 【JMeter】数据驱动测试
  • 预防DNS 解析器安全威胁
  • flutter redux状态管理
  • 【unitrix】 4.21 类型级二进制数基本结构体(types.rs)
  • JavaScript加强篇——第五章 DOM节点(加强)与BOM
  • 【驱动】移植CH340驱动,设置 udev 规则,解决和 BRLTTY 的冲突
  • 容器管理: 单机用Docker Compose,多机用Kubernetes