• GitlabRunner


    Git-Runner

    前期说明

    对于gitlab Runner是什么这里不做过多介绍,这里仅对runner部署方式,以及如何使用展开说明。

    实现功能:

    配置文件存储位置为gitlab,当代码提交,自动触发apply操作

    背景说明:

    当前gitlab版本: 13.9.3-ee

    使用runner版本:v13.9.0

    k8s集群版本:v1.20.11

    kubectl版本:v1.20

    gitlab-runner部署方式:

    gitlab-runner可支持部署方式有多种,如docker,本地,或者运行在pod中,这里的部署使用k8s方式。

    runner运行方式:

    runner可以理解为agent,可以指定.gitlab.yaml文件中定义的指定运行环境,可以为docker,kubernetes,或者shell,这里围绕kubernetes。

    gitlab-runner部署

    因为gitlab账号并不是管理员权限,仅对group具备Maintainer权限,所以gitlab-runner使用group作为绑定方式。

    绑定关系:

    gitlab --> gitlab-runner --> 创建pod运行gitlab-runner中的stages

    • 1.RBAC授权
    # 1. 授权,让后续gitlab-runner具有创建pod权限
    [root@pi-cloud-cpu-test-jyl01 gitlab-runner]# cat RBAC.yaml 
    apiVersion: v1
    kind: Namespace
    metadata:
      name: base
    
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: executor
      namespace: base
    imagePullSecrets:
    - name: dockersecret
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      namespace: base
      name: executor-role
    rules:
    - apiGroups: [""]
      resources: ["pods", "pods/exec"]
      verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      namespace: base
      name: executor-rolebinding
    subjects:
    - kind: ServiceAccount
      name: executor
      namespace: cicd
    roleRef:
      kind: Role
      name: executor
      apiGroup: rbac.authorization.k8s.io
    
    • 2.gitlab-runner配置文件使用configmap方式挂载
    [root@pi-cloud-cpu-test-jyl01 gitlab-runner]# cat runner-configmap.yaml 
    apiVersion: v1
    kind: ConfigMap
    metadata:
      namespace: monitoring
      labels:
        app: gitlab-deployer
      name: gitlab-runner-cm
    data:
      REGISTRATION_TOKEN: "gitlab-CICD-Runner中获取到的token"
      REGISTER_NON_INTERACTIVE: "true"
      REGISTER_LOCKED: "false"
      CI_SERVER_URL: "gitlab-CICD-Runner中获取到的Url"	 
      METRICS_SERVER: "0.0.0.0:9100"
      RUNNER_CONCURRENT_BUILDS: "4"
      RUNNER_REQUEST_CONCURRENCY: "4"
      RUNNER_TAG_LIST: "prometheus-runner"
      RUNNER_EXECUTOR: "kubernetes"		# 指定后续runner使用什么方式运行指令
      KUBERNETES_NAMESPACE: "base"      
      KUBERNETES_SERVICE_ACCOUNT: "executor"
      KUBERNETES_PULL_POLICY: "if-not-present"
    
    • 3.gitlab-runner in kubernetes 部署
    [root@pi-cloud-cpu-test-jyl01 gitlab-runner]# cat runner-deployment.yaml 
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: runner
      namespace: monitoring
      labels:
        app: runner
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: runner
      template:
        metadata:
          labels:
            app: runner
        spec:
          containers:
          - name: ci-builder
            image: registry.cn-hangzhou.aliyuncs.com/lindytom/gitlab-runner:latest
            command:
            - /bin/bash
            - -c
            - "/usr/bin/gitlab-runner unregister -n $RUNNER_NAME || true; /usr/bin/gitlab-runner register; exec /usr/bin/gitlab-runner run"
            imagePullPolicy: IfNotPresent
            envFrom:
            - configMapRef:
                name: gitlab-runner-cm
            ports:
            - containerPort: 9100
              name: http-metrics
              protocol: TCP
            lifecycle:
              preStop:
                exec:
                  command:
                  - /bin/bash
                  - -c
                  - "/usr/bin/gitlab-runner unregister -n $RUNNER_NAME"
          restartPolicy: Always
    

    出现如下界面,则表示gitlab-runner和gitlab已经是绑定关系,.gitlab.yaml可以使用tag名称,对gialb-runner实现控制。

    gitlab-runner使用

    在代码项目目录中书写.gitlab.yaml文件,在代码提交时,对文件扫描,执行yaml文件中的流程。

    既然上面说到是触发对k8s的apply操作,必然少不了的就是kubectl的控制方式,将kubectl文件挂载到runner中不太现实,而且可能需要对多个集群生效,这里使用gitlab中的变量方式,将kube-config文件写入到gitlab中

    # .gitlab.yaml文件内容
    image: docker:stable
    stages:							        # 主要流程为两步
      - code_check					 	        # 第一步代码检测
      - deploy_prometheus			  	                # 第二步部署应用
    variables:
      GIT_SUBMODULE_STRATEGY: recursive	                        # 自动代码拉取
    code_check_job:					
      stage: code_check					        # stage: 和主流程中指定的一致,这里为第一个流程
      image: registry.cn-hangzhou.aliyuncs.com/lindytom/promtool:latest	# 使用镜像具备语法检测功能
      only:
        - huya-master					       # 仅代码提交到huya-master分支生效
      tags:
        - prometheus-runner				               # runner的tag,需要和runner tag保持一致
      script:						       # prometheus operator的yaml规则检测方式
        - cat manifests/configuration-files/prometheus-rule/*.yaml|yq --yaml-output .spec|promtool check rules /dev/stdin
        
    deploy_prometheus_job:				
      stage: deploy_prometheus			               # stage: 和主流程中指定的一致,这里为第二个流程
      image: bitnami/kubectl:1.20.15	                       # 通过kubectl镜像,生成kubectl环境
      only:
        - huya-master		
      tags:
        - prometheus-runner
      script:							# 这里为执行指令,对yaml检测,并apply
        - mkdir $HOME/.kube/ && cat $huya_kube_config > $HOME/.kube/config
        - kubectl apply -f manifests/configuration-files --dry-run
        - kubectl apply -f manifests/configuration-files
    

  • 相关阅读:
    面试题:安全点与安全区域
    面试题:手写LRU
    面试题:Spring循环依赖问题
    面试题:Spring4和Spring5的AOP顺序
    面试题:假如Redis里面有1亿个 key,其中有10 w个 key是以某个固定的 已知的前缀开头的,如果将它们全部找出来?
    VisionPro 标定与创建坐标系(Calibration and Fixturing)(二)
    VisionPro 标定与创建坐标系(Calibration and Fixturing)(一)
    VisionPro棋盘格标定测量实例
    VisionPro工业视觉的标定方法
    VisionPro (对相机进行标定)
  • 原文地址:https://www.cnblogs.com/tcy1/p/16320660.html
Copyright © 2020-2023  润新知