• Русский
  • Использование GitLab Event Triggers

    Обзор

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

    Основные возможности

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

    Поддерживаемые типы событий

    Базовая информация о событиях

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

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

    Variable NameDescriptionExample Value
    project-idID проекта GitLab1234
    project-nameИмя проектаmy-project
    project-pathПолный путь проектаgroup/my-project
    project-web-urlWeb 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Имя repositorymy-project
    user-nameПолное имя пользователяJohn Doe
    user-usernameИмя пользователяjohndoe
    user-emailEmail пользователяjohn@example.com

    1. Push Event

    Срабатывает, когда разработчик отправляет код в repository GitLab. Подходит для:

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

    Переменные Push Event

    Variable NameDescriptionExample Value
    git-revisionGit revisionrefs/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. Подходит для:

    • Автоматизированных code review
    • Развертывания в pre-release среде
    • Автоматизированного тестирования

    Переменные Merge Request Event

    Variable NameDescriptionExample Value
    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Путь исходного repositorygroup/my-project
    mergereq-target-pathПуть целевого repositorygroup/my-project
    TIP

    Обратитесь к документации webhook вашего экземпляра GitLab или к официальной документации GitLab по событиям Merge Request

    3. Comment Events

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

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

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

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

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

    Variable NameDescriptionExample Value
    commentСодержимое комментарияLGTM 👍
    comment-urlURL комментарияhttps://gitlab.com/group/project/-/merge_requests/42#note_123

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

    Variable NameDescriptionExample Value
    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Путь исходного repositorygroup/my-project
    mergereq-target-pathПуть целевого repositorygroup/my-project

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

    Variable NameDescriptionExample Value
    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

    Руководство по конфигурации

    Предварительные требования

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

    Настройка Webhook через GitLab UI

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

    Пример конфигурации pipeline trigger

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

    • Автоматически запускать функции CI при отправке кода.
    • Автоматически запускать CI pipeline при открытии Merge Request.

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

    Parameter NameDescriptionExample Value
    git-revisionGit revision для выполнения целевого pipelinerefs/heads/main
    git-repo-urlURL Git repositoryhttps://gitlab.com/group/project.git
    TIP

    Замените значения на информацию из вашего реального pipeline.

    InformationDescription
    my-namespaceИмя namespace
    my-pipelineИмя pipeline
    workspacesКонфигурация Workspace; измените ее в соответствии с фактической конфигурацией Workspace и требованиями pipeline

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

    Создание Push Trigger

    Сохраните следующий 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: # Workspace необходимо изменить в соответствии с требованиями pipeline и конфигурацией окружения
                  - name: source
                    volumeClaimTemplate:
                      spec:
                        accessModes:
                        - ReadWriteMany
                        resources:
                          requests:
                            storage: 1Gi

    Создайте ресурс в окружении:

    kubectl apply -f gitlab-push-trigger.yaml

    Создание Merge Request Trigger

    Сохраните следующий 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 events, остальные пока игнорируйте
      - 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: # Workspace необходимо изменить в соответствии с требованиями 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.

    Console:

    Перейдите в Pipelines > PipelineRuns, чтобы просмотреть запущенные pipeline.