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

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

基于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: true
  name: 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
  - build


variables:
  IMG_SVC_NAME: electron-signature
  AMD64: amd64
  ARM64: arm64
  CI_REGISTRY_AMD64_IMAGE: $CI_REGISTRY/$AMD64-yf/$IMG_SVC_NAME
  CI_REGISTRY_ARM64_IMAGE: $CI_REGISTRY/$ARM64-yf/$IMG_SVC_NAME
  AMD64_BASE_IMAGE: $CI_REGISTRY/$AMD64/openjdk:8-jre
  ARM64_BASE_IMAGE: $CI_REGISTRY/$ARM64/openjdk:8-jre-arm64
  LOCAL_KUBE_CONFIG: /tmp/config
  PACK_ENVIRONMENT: deliver
  MIRROR_IMAGE_VERSION: 1.0.0


cache:
  paths:
    - cache

compile-package: # This job runs in the build stage, which runs first.
  stage: compile
  image: $CI_REGISTRY/$AMD64/openjdk-17-maven:3.8.8
  only:
    - /^feat/
    - /^hotfix/
    - /^release/
    - tag
    - push
    - dev
  script:
    - 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: false
    when: on_success
    access: all
    expire_in: 1 week
    paths:
      - electron-signature-web/target/*.jar
    reports:
      dotenv: build.env

build:
  stage: build
  image: $CI_REGISTRY/$AMD64/kaniko-project/executor:debug
  # run on branch develop, and merged
  rules:
    - 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.json
  script:
    - 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

在这里插入图片描述


网站公告

今日签到

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