【K8s】GitLab 实现 Golang 代码质量检查

GitLab实现Golang代码质量检查

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发、订阅专栏!


专栏订阅入口

| 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 |


往期精彩文章

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法(续)

【K8s】Kubernetes 虚拟机管理工具之 KubeVirt


目录

一、背景介绍

二、过程介绍

1、gitlab-runner 部分

2、golangci-lint 部分

3、最终效果验证


一、背景介绍

近期公司研发侧提出,需要在 Golang 代码项目发起合并请求时,自动对代码语法等内容进行质量检查,用于替代人工检查、提升工作效率。经过调研和验证,笔者最终通过 gitlab-runner + golangci-lint 的方式实现了该需求。

本文将详细介绍 GitLab 实现 Golang 代码质量检查的相关过程,GitLab 服务相关信息如下:

  • 版本信息:GitLab CE 17.4.2

  • 部署组件:GitLab、PostgreSQL、Redis

  • 部署方式:Kubernetes 环境下,部署为 StatefulSet 对象(后续找时间出部署教程)

  • 镜像名称:sameersbn/gitlab:17.4.2


二、过程介绍
1、gitlab-runner 部分

1)新建实例 runner

  • 使用管理员账号登录 GitLab 服务控制台,进入 Admin area 界面后依次点击:「CI/CD」->「Runner」->「创建实例 runner」

图片

  • 填写好相关信息后,点击「创建 runner」

图片

  • 记录下身份验证令牌后,直接返回即可

图片

图片

2)部署 gitlab-runner 并注册

由于当前部署的 GitLab 服务的版本高于 15.6,gitlab-runner 只能采用 Helm Chart 方式部署。

https://docs.gitlab.com/runner/install/kubernetes.html
  • 下载 Helm Chart 文件(以 17.4.2 版本为例),命令如

helm repo add gitlab https://charts.gitlab.io --force-update
helm search repo -l gitlab/gitlab-runner | grep 17.4.2
helm pull gitlab/gitlab-runner --version 0.69.2 --untar
  • 创建部署配置(在此配置注册信息),命令如下:

cat > values-config.yaml <<EOF
image:
  registry: docker.io
  image: gitlab/gitlab-runner
  tag: alpine-v17.4.2
livenessProbe:
   initialDelaySeconds: 60
   periodSeconds: 10
   successThreshold: 1
   failureThreshold: 3
   terminationGracePeriodSeconds: 30
readinessProbe:
   initialDelaySeconds: 60
   periodSeconds: 10
   successThreshold: 1
   failureThreshold: 3
gitlabUrl: https://gitlab.demo.com/      # GitLab 服务地址
runnerRegistrationToken: "glrt-xxxx"     # 之前记录的身份验证令牌
runnerToken: "glrt-xxxx"                 # 之前记录的身份验证令牌
rbac:
  create: true
  generatedServiceAccountName: "gitlab-ci-runner"
serviceAccount:
  create: true
  name: "gitlab-ci-runner"
metrics:
  enabled: true
securityContext:
  allowPrivilegeEscalation: true
  privileged: true

EOF
  • 执行部署命令如下,等待部署完成后,实例 runner 状态将从「未连接过」变为「在线」

helm upgrade -i -f values-config.yaml gitlab-ci-runner ./gitlab-runner
# ⚠️ 若修改后再次执行,可能导致 gitlab-runner 实例被删除!

2、golangci-lint 部分

1)配置 GitLab 流水线

# 在 GitLab 项目目录下执行
cat > .gitlab-ci.yml <<EOF
lint:
  image: golangci/golangci-lint:v1.62.2     # 直接使用官方镜像
  script:
    - export GOPROXY=https://goproxy.cn,direct
    - golangci-lint run -v
  only:
    - merge_requests                        # 仅在代码合并时触发流水线

EOF

2)配置质量检查规范(非必需,以下为推荐规范)

# 在 GitLab 项目目录下执行
cat > .golangci.yml <<EOF
run:
  timeout: "10m"

linters:                   # 配置开启或关闭的检查类型
  disable-all: true          # 禁用全部,通过 enable 精准控制开启的类型
  enable:
    # basic
    - errcheck
    - gosimple
    - govet
    - ineffassign
    - staticcheck
    - unused
    # style
    - dupl
    - goconst
    - gofmt
    - goimports
    - misspell
    - stylecheck
    - wsl
    # complexity
    - funlen
    - gocyclo
    - lll
    # security
    - gosec

linters-settings:          # 针对linters中的具体检查类型配置该类型的参数
  funlen:
    lines: 80                # Checks the number of lines in a function
    statements: 40           # Checks the number of statements in a function
    ignore-comments: true    # Ignore comments when counting lines
    lines-in-file: 800
  gocyclo:
    min-complexity: 15       # # Minimal code complexity to report,default 30 recommend 10-20
  lll:
    line-length: 120         # # Max line length, lines longer will be reported,default 120
  dupl:
    threshold: 100           # # Tokens count to trigger issue,default 150

output:
  format: colored-line-number
  print-issued-lines: true
  print-config: true

EOF
----------------------------------------------------------
🔔 若未单独配置检查规范,默认开启的检查类型如下:
deadcode errcheck gosimple govet ineffassign staticcheck structcheck typecheck unused varcheck

3、最终效果验证
  • 为某个 Golang 代码项目提交 cr-test 分支到 cr-master 分支的合并请求,GitLab 服务将自动触发代码质量检查的流水线,合并请求详情如下图:

图片

  • 点击流水线 #826 可以跳转查看代码质量检查过程详情,如下图:

图片

  • 最终可以看到合并请求流水线的状态变为「已失败」,审批人可以根据代码质量检查结果决策是否继续执行合并操作

图片

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行者Sun1989

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值