Рубрики
Без рубрики

Как настроить Gitlab CI просто проверяет измененные файлы

[Фон] У меня есть проект Python с конфигурацией CI на Gitlab. У него есть сцена ворса, которая проверит … Tagged with Gitlab, Python, DevOps.

[Фон] У меня есть проект 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”