[Фон] У меня есть проект Python с конфигурацией CI на Gitlab. У него есть этап Lint, который проверит качество кода всего исходного кода, когда запускается событие Push или событие запроса слияния. Потребуется время, чтобы проверить весь исходный код с помощью запроса слияния. И это не будет сосредоточено на качеством кода запроса о слиянии. Он должен проверить качество кода в файлах изменения коммита.
pylint: stage: lint before_script: - mkdir -p public/badges public/lint - echo undefined > public/badges/$CI_JOB_NAME.score - pip install pylint-gitlab script: - pip install -r requirements.txt - pylint --rcfile=.pylintrc --exit-zero --output-format=text $(find -type f -name "*.py" ! -path "**/.venv/**") | tee /tmp/pylint.txt - sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' /tmp/pylint.txt > public/badges/$CI_JOB_NAME.score - pylint --exit-zero --output-format=pylint_gitlab.GitlabCodeClimateReporter $(find -type f -name "*.py" ! -path "**/.venv/**") > codeclimate.json - pylint --exit-zero --output-format=pylint_gitlab.GitlabPagesHtmlReporter $(find -type f -name "*.py" ! -path "**/.venv/**") > public/lint/index.html after_script: - anybadge --overwrite --label $CI_JOB_NAME --value=$(cat public/badges/$CI_JOB_NAME.score) --file=public/badges/$CI_JOB_NAME.svg 4=red 6=orange 8=yellow 10=green - | echo "Your score is: $(cat public/badges/$CI_JOB_NAME.score)" artifacts: paths: - public reports: codequality: codeclimate.json when: always only: - develop - merge_requests tags: - docker
[Решение] Вот решение для решения моих проблем. Я создам еще одно событие Config Pylint для запроса Merge. Он просто проверяет качество кода в измененных файлах, сравниваемых с целевым филиалом запроса Merge.
pylint_merge_request: stage: lint before_script: - pip install pylint-gitlab script: - echo CI_COMMIT_SHA=${CI_COMMIT_SHA} - echo CI_MERGE_REQUEST_TARGET_BRANCH_NAME=${CI_MERGE_REQUEST_TARGET_BRANCH_NAME} - git fetch origin ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME} - FILES=$(git diff --name-only ${CI_COMMIT_SHA} origin/${CI_MERGE_REQUEST_TARGET_BRANCH_NAME} | grep '\.py'$) - echo "Changed files are $FILES" - pip install -r requirements.txt - pylint --rcfile=.pylintrc --output-format=text $FILES | tee /tmp/pylint.txt only: - merge_requests tags: - docker
Я надеюсь, что это полезно для всех. Вы можете использовать его для других языков программирования на Gitlab.
Оригинал: “https://dev.to/khanhcd92/how-to-config-gitlab-ci-just-checks-commit-changed-files-1kab”