GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。
更多关于极狐GitLab 或者 DevOps 的最佳实践,可以关注文末的极狐GitLab 公众号。
学习极狐GitLab 的相关资料:
- 极狐GitLab 官网:https://gitlab.cn
- 极狐GitLab 官网文档:https://docs.gitlab.cn
- 极狐GitLab 论坛:https://forum.gitlab.cn/
- 极狐GitLab 安装配置:https://gitlab.cn/install
- 极狐GitLab 资源中心:https://resources.gitlab.cn
搜索【极狐GitLab】公众号,后台输入加群,备注gitlab,即可加入官方微信技术交流群。
Qodana 是 JetBrains 推出的一款代码静态扫描工具。JetBrains 自家的产品已经内置了和 Qodana 的集成,当然 Qodana 也支持和第三方工具的集成,比如和极狐GitLab。
在 JetBrains 官方文档的与 CI 系统的集成文档中,写明了与极狐GitLab CI 的集成方式,需要在极狐GitLab 的 .gitlab-ci.yml
文件中写入如下内容:
qodana:
image:
name: jetbrains/qodana-<linter>
entrypoint: [""]
cache:
- key: qodana-2023.3-$CI_DEFAULT_BRANCH-$CI_COMMIT_REF_SLUG
fallback_keys:
- qodana-2023.3-$CI_DEFAULT_BRANCH-
- qodana-2023.3-
paths:
- .qodana/cache
variables:
QODANA_TOKEN: $qodana_token
script:
- qodana --cache-dir=$CI_PROJECT_DIR/.qodana/cache
参数说明:
- image.name:qodana 的镜像名称,针对不同的语言有不同的镜像,比如本问会使用 python 做演示,则镜像名称为
jetbrains/qodana-python
。 - QODANA\_TOKEN:qodana token,主要用来将扫描分析结果发送到 qodana 服务用。
下面用极狐GitLab 上托管的 FastAPI 项目为例演示 qodana 和极狐GitLab 的集成。
创建 qodana token
Qodana 可以自己安装部署,也可以使用 qodana cloud,本文为了方便在 Qodana cloud 上创建了一个账号,并且创建了团队以及项目,在创建项目的过程中会创建一个项目token:
需要将此 token 以环境变量的形式保存到极狐GitLab CI 中。通过项目 --> 设置 --> CI/CD --> 变量进行添加:
### 编写 .gitlab-ci.yml
文件
在极狐GitLab 的 CI 文件 .gitlab-ci.yml
文件,写入如下内容:
code-style-check:
stage: test
image:
name: jetbrains/qodana-python
entrypoint: [""]
tags:
- gitlab
variables:
QODANA_TOKEN: $qodana_token
cache:
- key: qodana-2023.3-$CI_DEFAULT_BRANCH-$CI_COMMIT_REF_SLUG
fallback_keys:
- qodana-2023.3-$CI_DEFAULT_BRANCH-
- qodana-2023.3-
paths:
- .qodana/cache -
script:
- qodana --save-report --results-dir=$CI_PROJECT_DIR/.qodana/results
--cache-dir=$CI_PROJECT_DIR/.qodana/cache
artifacts:
paths:
- qodana/results/
expose_as: 'Qodana report'
本次运行使用了自建 Runner,所以使用了 tags,指定了使用自建 Runner。
创建 MR 测试
通过创建一个 MR,触发流水线:
可以查看 qodana 运行的整个日志:
可以在 qodana cloud 的页面上看到报告的详情:
点击可以查看具体的详情。
可以看到极狐GitLab 和 JetBrains qodana 的集成还是非常方便的。
搜索关注【极狐GitLab】公众号,成为 DevOps 技术专家。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。