背景
最近一个项目需要在Gitlab CI里面做Linting。传统的方式是需要扫描什么内容就用对应的linting工具,然后发现github上面有个小项目叫super-linter,就是把常用的工具都打包装好了,用这么一个工具就可以扫描各种语言了。这个工具本来是给github action量身定做的,但是第三方的CI/CD也是可以用的。下面看看如何在gitlab里面使用。
官网链接在这里 https://github.com/github/super-linter
如果是github action里面使用,直接checkout整个repo就是了,但是如果在第三方使用,也可以直接使用docker 镜像。他的Dockerfile里面安装了几十种工具,直接的后果呢 就是这个镜像特别大,我下载了之后这个镜像尺寸高达6G。
首先看看我的测试环境,一个gitlab的目录里面,我创建了一个python 目录,一个powershell 目录,python目录里面扔了一个dockerfile,一个python文件,一个shell文件, powershell里面扔了一个powershell文件。
配置文件
yuan@yuan-VirtualBox:~/devops/gitlab-2-azure/test_lint$ tree -a
.
├── Dockerfile
├── .gitkeep
├── .gitlab-ci.yml
├── powershell
│ ├── .gitkeep
│ └── test.ps1
└── python
├── Dockerfile
├── .gitkeep
├── test.py
└── test.sh
然后下面是我的.gitlab-ci.yml 文件。注意在gitlab里面 CI_BUILDS_DIR 指向的是 /builds 目录,是一个绝对路径,而CI_PROJECT_PATH 则是一个相对路径,在配置DEFAULT_WORKSPACE的时候 我们需要使用绝对路径。其他的环境变量 可以参照github的链接进行测试
stages:
- python-linting
- powershell-linting
lint1:
stage: python-linting
image:
name: github/super-linter:latest
entrypoint: [""]
script:
- |
pwd
echo ${CI_BUILDS_DIR}
ls ${CI_BUILDS_DIR}/ozbillwang/gitlab-2-azure/test_lint -lah
/action/lib/linter.sh
variables:
RUN_LOCAL: "true"
DEFAULT_WORKSPACE: ${CI_BUILDS_DIR}/ozbillwang/gitlab-2-azure/test_lint/python
LINTER_RULES_PATH: $CI_PROJECT_PATH/.github/linters
VALIDATE_PYTHON_PYLINT: "true"
PYTHON_PYLINT_CONFIG_FILE: .python-lint
VALIDATE_POWERSHELL: "true"
VALIDATE_BASH: "true"
VALIDATE_DOCKERFILE_HADOLINT: "true"
DOCKERFILE_HADOLINT_FILE_NAME: .hadolint.yaml
lint2:
stage: powershell-linting
image:
name: github/super-linter:latest
entrypoint: [""]
script:
- |
echo "testing powershell"
/action/lib/linter.sh
variables:
RUN_LOCAL: "true"
DEFAULT_WORKSPACE: ${CI_BUILDS_DIR}/ozbillwang/gitlab-2-azure/test_lint/powershell
LINTER_RULES_PATH: $CI_PROJECT_PATH/.github/linters
VALIDATE_POWERSHELL: "true"
测试结果
测试的效果如下 第一个job 扫描 python 目录下的三个文件都通过了,第二个job 扫描 powershell 发现问题,状态显示失败