
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


