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

    Обзор

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

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

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

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

    Основная информация о событии

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

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

    Имя переменнойОписаниеПример значения
    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Имя репозиторияmy-project
    user-nameПолное имя пользователяJohn Doe
    user-usernameИмя пользователяjohndoe
    user-emailEmail пользователяjohn@example.com

    1. Событие Push

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

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

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

    Имя переменнойОписаниеПример значения
    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

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

    • Автоматизированных code review
    • Развертывания 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Статус mergecan_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's official merge request event documentation

    3. События комментариев

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

    • Комментарии 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Статус mergecan_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

    Руководство по настройке

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

    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
      • События Merge request
      • Комментарии
    5. (Необязательно) Настройте Secret Token.
    6. Нажмите "Add webhook".

    Пример конфигурации Trigger для pipeline

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

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

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

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

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

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

    Далее нам нужно настроить только два trigger, указанных ниже:

    Создание 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, остальные пока игнорируйте
      - 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

    Проверка Trigger

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

    CLI:

    Вы можете получить статус выполнения pipeline с помощью kubectl -n <namespace> get pipelinerun.

    Console:

    Откройте Pipelines > PipelineRuns, чтобы просмотреть запущенные pipeline.