helm部署gitlab-runner并集成maven、gradle以及harbor全自动部署服务

helm部署gitlab-runner并集成maven、gradle以及harbor全自动部署服务



获取gitlab的·地址及注册token runner类型: 共享Runner(Shared Runner),所有项目可以使用 群组Runner(Group Runner),特定群组里的所有项目和子群组可以使用 特定Runner(Specific Runner),用于独立的项目。 在全局配置中获取的token就是全局runner 在群组中获取的toke就是群组runner 项目中的token就是特定runner helm安装gitlab-runner 配置helm并下载chart #添加仓库 helm repo add gitlab https://charts.gitlab.io/ #更新仓库 helm repo update #下载chart helm pull gitlab/gitlab-runner 根据环境修改配置 编辑values.yaml,已修改好的配置文件

values.yaml 相关参数如下: #gitlab地址 gitlabUrl: http://218.29.223.194:43223/gitlab/ #gitlab的token runnerRegistrationToken: “H8u_rwN5NkRmxkt9Gv7S” #用于向GitLab服务器添加新Runner的注册令牌 unregisterRunners: true #最大并发 concurrent: 10 #rabc权限部分配置 rbac: create: true rules:

  • resources: [“configmaps”, “pods”, “pods/attach”, “secrets”, “services”] verbs: [“get”, “list”, “watch”, “create”, “patch”, “update”, “delete”]
  • apiGroups: [""] resources: [“pods/exec”] verbs: [“create”, “patch”, “delete”] runners: #配置文件 config: | [[runners]] [runners.kubernetes] namespace = “{{.Release.Namespace}}” image = “ubuntu:16.04” #挂在外部的nfs作为缓存,挂载到 /opt/cache 结合volumeMounts 使用可以写多个 maven缓存使 用 [[runners.kubernetes.volumes.pvc]] name = “gitlab-runner-cache-pvc” mount_path = “/opt/cache” #挂在外部的nfs作为缓存,挂载到 /opt/cache 结合volumeMounts 使用 gradle缓存使用 [[runners.kubernetes.volumes.pvc]] name = “gitlab-runner-cache” mount_path = “/home/gradle” #关于内部调用docker的配置 [[runners.kubernetes.volumes.host_path]] name = “docker”

mount_path = “/var/run/docker.sock” read_only = true host_path = “/var/run/docker.sock” #runner的tag tags: “k8s-runner-sy” #runner的name name: “k8s-runner-sy” #runner的namespace namespace: basic-components #gitlab的仓库clone的地址,gitlab内外网地址不一样的时候使用 cloneUrl: http://218.29.223.194:43223/gitlab/ #runner内部域名映射,修改内部的hosts hostAliases:

  • ip: “218.29.223.194” hostnames:
  • “gitlab.lzxlinux.com” #nfs的外部磁盘挂载 volumeMounts:
  • name: my-volume mountPath: /opt/cache volumes:
  • name: my-volume persistentVolumeClaim: claimName: gitlab-runner-cache-pvc 这是修改完打好包的chrat gitlab-runner-0.50.1.tgz 集成maven打包 安装好后runner,下步就是使用runner,以springboot项目为例,集成maven打包,maven的打包使用的是gitlab-runner 调度的,在.gitlab-ci.yml文件中定义

完整的配置文件如下: .gitlab-ci.yml 配置的详解: image: docker:stable #定义了为三个stage 打包创建镜像部署 stages:

  • package
  • docker_build
  • deploy_k8s #全局配置 variables: KUBECONFIG: /etc/deploy/config #k8s配置文件 MAVEN_OPTS: “-Dmaven.repo.local=/opt/cache/.m2/repository” maven仓库地址 NETWORK: “deploy” #触发stage的对比参数 cache: key: ${CI_COMMIT_REF_NAME} paths:
  • node_modules/ #maven打包stage mvn_build_job: image: maven:3.6.1-jdk-8 #runner调用的 docker镜像版本 stage: package #stage名称 tags:
  • k8s-runner-sy #调用k8s的tag

only:

- master # 仅在master分支变更时才触发执行

rules: #stage执行的触发规则

  • if: ‘$CI_COMMIT_TITLE == $NETWORK’ when: on_success

  • when: manual script: #stage执行的脚本

  • echo $CI_COMMIT_MESSAGE #指定maven配置文件 setting.xml的打包脚本

  • mvn -s settings.xml org.apache.maven.plugins:maven-dependency-plugin:3.3.0:purge- local-repository -DmanualInclude=“com.ruoyi,com.gilight”

  • mvn clean package -s settings.xml -B -DskipTests

  • mkdir -p /opt/cache/.m2/repository/skeleton/

  • cp skeleton-test/target/skeleton-test-0.0.1-SNAPSHOT.jar /opt/cache/.m2/repository/skeleton/ #构建docker docker_build_job_ruoyi-system: image: docker:18.06.1-ce

only:

- master

rules:

  • if: ‘$CI_COMMIT_TITLE == $NETWORK’ when: on_success
  • when: manual tags:
  • k8s-runner-sy script:
  • docker login https://218.29.223.194:31003/harbor -uadmin -p 5201314lk.L #登录 docker镜像仓库harbor
  • mkdir target
  • cp /opt/cache/.m2/repository/skeleton/skeleton-test-0.0.1-SNAPSHOT.jar target #copy上步打好的jar到缓存中
  • docker build -f dockerfiles-gilight/skeleton-test/Dockerfile -t 218.29.223.194:31003/skeleton/skeleton-test:$CI_PIPELINE_ID . #根据dockerfile构建镜像
  • docker push 218.29.223.194:31003/skeleton/skeleton-test:$CI_PIPELINE_ID #将镜像推送 到harbor deploy_k8s_job: image: 218.29.223.194:31003/zhongtai/kubectlg:1.16.6 #公司自己打的镜像需要配合下面的配 置文件 #image: bitnami/kubectl:1.23.5-debian-10-r31 #官方的镜像,不用配置文件 stage: deploy_k8s rules:
  • if: ‘$CI_COMMIT_TITLE == $NETWORK’ when: always
  • when: manual tags:
  • k8s-runner-sy

script:

  • mkdir -p /etc/deploy
  • echo $kube_config_sy |base64 -d > $KUBECONFIG #将k8s的主节点的配置文件 (~/.kube/config)装成bsase64后存在gitlab的变量中如下图,使用的时候在转换回来
  • echo $kube_config_sy |base64 -d

测试项目

  • sed -i “s/IMAGE_TAG/$CI_PIPELINE_ID/g” deployment.yaml #将docker的镜像的版本替换为新 打的奖项版本
  • cat deployment.yaml
  • kubectl apply -f deployment.yaml #执行部署文件 k8s配置文件的存放地址: Dockerfile deployment.yaml settings.xml

page1

page4

page6