• Русский
  • Use GitLab Event Triggers

    Overview

    GitLab Event Triggers позволяет автоматически запускать Tekton pipelines через события Webhook GitLab. Поддерживаются различные типы событий, включая пуши кода, merge request, комментарии и другие, что позволяет построить полноценный CI/CD автоматизированный процесс.

    Core Features

    • Поддержка нескольких типов событий: Поддерживает различные события GitLab, такие как Push, Merge Request, комментарии и др.
    • Стандартизированные Trigger Binding: Предоставляет стандартизированные ClusterTriggerBindings для обеспечения согласованности между платформами.
    • Гибкое сопоставление параметров: Автоматически извлекает ключевую информацию из событий GitLab для параметров pipeline.
    • Безопасная интеграция Webhook: Поддерживает проверку безопасности Webhook.

    Supported Event Types

    Basic Event Information

    Все выходные переменные могут использоваться для сопоставления параметров pipeline. Значения параметров доступны через $(tt.params.<param name>).

    Базовые переменные (общие для всех событий)

    Имя переменнойОписаниеПример значения
    project-idID проекта GitLab1234
    project-nameНазвание проектаmy-project
    project-pathПолный путь проектаgroup/my-project
    project-web-urlВеб-URL проектаhttps://gitlab.com/group/my-project
    git-repo-urlGit HTTP URLhttps://gitlab.com/group/my-project.git
    git-repo-ssh-urlGit SSH URLgit@gitlab.com:group/my-project.git
    git-repo-nameНазвание репозиторияmy-project
    user-nameПолное имя пользователяJohn Doe
    user-usernameИмя пользователяjohndoe
    user-emailEmail пользователяjohn@example.com

    1. Push Event

    Срабатывает при пуше кода разработчиком в репозиторий GitLab. Подходит для:

    • Сборок непрерывной интеграции
    • Автоматического деплоя
    • Проверок качества кода

    Переменные события Push

    Имя переменнойОписаниеПример значения
    git-revisionРевизия Gitrefs/heads/main
    git-commit-shaSHA коммита8a1b3c4d5e6f...
    git-commit-messageСообщение коммитаUpdate README.md
    git-commit-timestampВремя коммита2025-01-26T10:30:00Z

    2. Merge Request Event

    Срабатывает при создании, обновлении или закрытии merge request. Подходит для:

    • Автоматизированных код-ревью
    • Деплоя в pre-release окружения
    • Автоматического тестирования

    Переменные события Merge Request

    Имя переменнойОписаниеПример значения
    mergereq-shaSHA последнего коммита8a1b3c4d5e6f...
    mergereq-actionДействие с Merge Requestopen, reopen, update, close, merge
    mergereq-stateСтатус Merge Requestopened, closed, merged
    mergereq-numberНомер Merge Request42
    mergereq-urlURL Merge Requesthttps://gitlab.com/group/project/-/merge_requests/42
    mergereq-titleЗаголовок Merge RequestAdd new feature
    mergereq-descriptionОписание Merge RequestThis PR adds...
    mergereq-merge-statusСтатус слиянияcan_be_merged
    mergereq-source-branchИсходная веткаfeature/new-feature
    mergereq-target-branchЦелевая веткаmain
    mergereq-source-pathПуть исходного репозиторияgroup/my-project
    mergereq-target-pathПуть целевого репозиторияgroup/my-project
    TIP

    Обратитесь к документации webhook вашей инстанции GitLab или к официальной документации GitLab по событиям merge request

    3. Comment Events

    Поддерживаются следующие типы комментариев:

    • Комментарии к Merge Request
    • Комментарии к коммитам

    Подходит для:

    • Автоматизации ChatOps на основе комментариев

    Базовые переменные комментариев (общие для всех комментариев)

    Имя переменнойОписаниеПример значения
    commentТекст комментарияLGTM 👍
    comment-urlURL комментарияhttps://gitlab.com/group/project/-/merge_requests/42#note_123

    3.1 Переменные комментариев Merge Request

    Имя переменнойОписаниеПример значения
    mergereq-shaSHA последнего коммита8a1b3c4d5e6f...
    mergereq-actionДействие с Merge Requestopen, reopen, update, close, merge
    mergereq-stateСтатус Merge Requestopened, closed, merged
    mergereq-numberНомер Merge Request42
    mergereq-urlURL Merge Requesthttps://gitlab.com/group/project/-/merge_requests/42
    mergereq-titleЗаголовок Merge RequestAdd new feature
    mergereq-descriptionОписание Merge RequestThis PR adds...
    mergereq-merge-statusСтатус слиянияcan_be_merged
    mergereq-source-branchИсходная веткаfeature/new-feature
    mergereq-target-branchЦелевая веткаmain
    mergereq-source-pathПуть исходного репозиторияgroup/my-project
    mergereq-target-pathПуть целевого репозиторияgroup/my-project

    3.2 Переменные комментариев коммита

    Имя переменнойОписаниеПример значения
    git-commit-shaSHA коммита8a1b3c4d5e6f...
    git-commit-messageСообщение коммитаUpdate README.md
    git-commit-timestampВремя коммита2025-01-26T10:30:00Z
    git-commit-urlURL коммитаhttps://gitlab.com/group/project/-/commit/8a1b3c4d

    Configuration Guide

    Prerequisites

    1. В среде создан EventListener, способный обрабатывать Trigger в целевом namespace. Обратитесь к администратору платформы для уточнения.
    2. GitLab имеет доступ к указанному EventListener.
    3. Созданы необходимые Pipeline и соответствующие конфигурации для запуска.
    4. У вас есть права на изменение настроек Webhook в проекте GitLab.

    Configure Webhook via GitLab UI

    1. Перейдите в настройки вашего проекта GitLab.
    2. Откройте Settings > Webhooks.
    3. Добавьте URL Webhook в зависимости от режима развертывания EventListener, например, для режима https:
      https://<your-eventlistener-url>
    4. Выберите необходимые типы событий:
      • Push events
      • Merge request events
      • Comments
    5. (Опционально) Настройте Secret Token.
    6. Нажмите "Add webhook".

    Pipeline Trigger Configuration Example

    Если цель — реализовать непрерывную интеграцию через триггер с такими требованиями:

    • Автоматический запуск CI при отправке кода.
    • Автоматический запуск CI pipeline при открытии merge request.

    Для упрощения документации предполагается, что pipeline готов и принимает следующие параметры:

    Имя параметраОписаниеПример значения
    git-revisionРевизия Git для выполнения целевого pipelinerefs/heads/main
    git-repo-urlURL Git репозиторияhttps://gitlab.com/group/project.git
    TIP

    Пожалуйста, замените на актуальную информацию вашего pipeline.

    ИнформацияОписание
    my-namespaceИмя namespace
    my-pipelineИмя pipeline
    workspacesКонфигурация workspace, измените в соответствии с реальными требованиями и конфигурацией pipeline

    Далее необходимо настроить только два триггера:

    Создание триггера Push

    Сохраните следующий YAML в файл gitlab-push-trigger.yaml:

    apiVersion: triggers.tekton.dev/v1alpha1
    kind: Trigger
    metadata:
        name: my-pipeline-push   # Рекомендуется изменить префикс в соответствии с именем pipeline
        namespace: my-namespace  # Замените на актуальный namespace
    spec:
        bindings:
        - ref:
            kind: ClusterTriggerBinding
            name: gitlab-push
        template:
          spec:
            params:
            - name: git-revision
            - name: git-repo-url
            resourcetemplates:
            - apiVersion: tekton.dev/v1
              kind: PipelineRun
              metadata:
                  generateName: my-pipeline-push- # Рекомендуется изменить префикс в соответствии с именем pipeline
              spec:
                  pipelineRef:
                    name: my-pipeline  # Замените на актуальное имя pipeline
                  params:
                  - name: git-revision
                    value: $(tt.params.git-revision)
                  - name: git-repo-url
                    value: $(tt.params.git-repo-url)
                  workspaces: # Настройте workspaces в соответствии с требованиями pipeline и конфигурацией среды
                  - name: source
                    volumeClaimTemplate:
                      spec:
                        accessModes:
                        - ReadWriteMany
                        resources:
                          requests:
                            storage: 1Gi

    Создайте ресурс в среде:

    kubectl apply -f gitlab-push-trigger.yaml

    Создание триггера Merge Request

    Сохраните следующий YAML в файл gitlab-merge-request-trigger.yaml:

    apiVersion: triggers.tekton.dev/v1alpha1
    kind: Trigger
    metadata:
      name: my-pipeline-merge-request # Рекомендуется изменить префикс в соответствии с именем pipeline
      namespace: my-namespace # Замените на актуальный namespace
    spec:
      bindings:
        - ref:
            kind: ClusterTriggerBinding
            name: gitlab-merge-request
      interceptors: # Добавляем Interceptor для фильтрации событий открытия MR, игнорируем остальные
      - ref:
          kind: ClusterInterceptor
          name: cel
        params:
        - name: filter
          value: |
            body.object_attributes.state == "opened" &&  body.object_attributes.action == "open"
      template:
        spec:
          params:
            - name: mergereq-sha
            - name: git-repo-url
          resourcetemplates:
          - apiVersion: tekton.dev/v1
            kind: PipelineRun
            metadata:
              generateName: my-pipeline-mr- # Рекомендуется изменить префикс в соответствии с именем pipeline
            spec:
              pipelineRef:
                name: my-pipeline # Замените на имя pipeline
              params:
                - name: git-revision
                  value: $(tt.params.mergereq-sha)
                - name: git-repo-url
                  value: $(tt.params.git-repo-url)
              workspaces: # Настройте workspaces в соответствии с требованиями pipeline и конфигурацией среды
                - name: source
                  volumeClaimTemplate:
                    spec:
                      accessModes:
                        - ReadWriteMany
                      resources:
                        requests:
                          storage: 1Gi
    TIP

    При необходимости скорректируйте конфигурацию Interceptor.

    Создайте ресурс в среде:

    kubectl apply -f gitlab-merge-request-trigger.yaml

    Проверка триггеров

    Проверьте работу, отправив код и создав Merge Request.

    CLI:

    Получить статус выполнения pipeline можно командой kubectl -n <namespace> get pipelinerun.

    Консоль:

    Перейдите в Pipelines > PipelineRuns для просмотра запущенных pipeline.