Перейти до змісту

GitLab: Розширений приклад

Production-ready конфігурація з усіма best practices.


Крок 1: Створіть Personal Access Token (PAT)

User Settings → Access Tokens → Add new token

Поле Значення
Name ai-code-reviewer
Scopes api
Expiration За потреби

Free план

Personal Access Token працює на всіх планах GitLab, включаючи Free.

Project Access Token доступний лише на GitLab Premium/Ultimate.


Крок 2: Додайте змінні

Settings → CI/CD → Variables

Назва Значення Опції
AI_REVIEWER_GOOGLE_API_KEY Gemini API ключ Masked
AI_REVIEWER_GITLAB_TOKEN PAT з Кроку 1 Masked

Крок 3: Додайте job

.gitlab-ci.yml:

stages:
  - test
  - review

# ... інші jobs ...

ai-review:
  stage: review
  image: ghcr.io/konstziv/ai-code-reviewer:1

  script:
    - ai-review

  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"

  # Не блокувати MR якщо review failed
  allow_failure: true

  # Timeout захист
  timeout: 10m

  # Можна скасувати при новому коміті
  interruptible: true

  # Не чекати на інші stages
  needs: []

  variables:
    AI_REVIEWER_LANGUAGE: uk
    AI_REVIEWER_LANGUAGE_MODE: adaptive

Що включено

Функція Статус Опис
Inline discussions ✅ З PAT токеном
Non-blocking ✅ allow_failure: true
Timeout ✅ 10 хвилин
Interruptible ✅ Скасовується при новому коміті
Паралельний запуск ✅ needs: []
Українська мова ✅ LANGUAGE: uk

Варіації

Self-hosted GitLab

ai-review:
  # ...
  variables:
    AI_REVIEWER_GITLAB_URL: https://gitlab.mycompany.com

З кастомним Docker registry

ai-review:
  # Якщо ghcr.io недоступний
  image: registry.mycompany.com/devops/ai-code-reviewer:latest

З DEBUG логами

ai-review:
  # ...
  variables:
    AI_REVIEWER_LOG_LEVEL: DEBUG

Тільки для певних гілок

ai-review:
  # ...
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      when: always
    - if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"
      when: always

Токен для GitLab

CI_JOB_TOKEN не працює

Автоматичний CI_JOB_TOKEN від GitLab не може постити коментарі до Merge Requests (Notes API потребує scope api, якого CI_JOB_TOKEN не має). Ви повинні використовувати Personal Access Token або Project Access Token.

Рекомендація: Використовуйте Personal Access Token для повної функціональності. Він працює на всіх планах GitLab, включаючи Free.


Troubleshooting

Review не постить коментарі

  1. Перевірте логи job
  2. Перевірте що AI_REVIEWER_GITLAB_TOKEN має scope api
  3. Перевірте що pipeline запущено для MR

"401 Unauthorized"

Токен невалідний або expired. Створіть новий PAT.

"403 Forbidden"

Токен не має доступу до проєкту. Перевірте права.


Повний приклад .gitlab-ci.yml

stages:
  - lint
  - test
  - review
  - deploy

lint:
  stage: lint
  image: python:3.13
  script:
    - pip install ruff
    - ruff check .

test:
  stage: test
  image: python:3.13
  script:
    - pip install pytest
    - pytest

ai-review:
  stage: review
  image: ghcr.io/konstziv/ai-code-reviewer:1
  script:
    - ai-review
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
  allow_failure: true
  timeout: 10m
  interruptible: true
  needs: []
  variables:
    AI_REVIEWER_LANGUAGE: uk

deploy:
  stage: deploy
  script:
    - echo "Deploying..."
  rules:
    - if: $CI_COMMIT_BRANCH == "main"

Наступний крок

👉 Конфігурація →