• Русский
  • Использование триггеров событий GitLab

    Обзор

    Триггеры событий GitLab позволяют автоматически запускать конвейеры Tekton через события вебхуков GitLab. Поддерживает несколько типов событий, включая коммиты кода, запросы на слияние, комментарии и т. д., что позволяет вам создать полный рабочий процесс автоматизации CI/CD.

    Основные функции

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

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

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

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

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

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

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

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

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

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

    2. Событие запроса на слияние

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

    • Автоматизированных проверок кода
    • Развертываний в предрелизной среде
    • Автоматизированного тестирования

    Переменные события запроса на слияние

    Имя переменнойОписаниеПример значения
    mergereq-shaПоследний SHA коммита8a1b3c4d5e6f...
    mergereq-actionДействие запроса на слияниеopen, reopen, update, close, merge
    mergereq-stateСтатус запроса на слияниеopened, closed, merged
    mergereq-numberНомер запроса на слияние42
    mergereq-urlURL запроса на слияниеhttps://gitlab.com/group/project/-/merge_requests/42
    mergereq-titleЗаголовок запроса на слияниеДобавить новую функцию
    mergereq-descriptionОписание запроса на слияниеЭтот PR добавляет...
    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

    Смотрите документацию вебхуков вашего экземпляра GitLab или официальную документацию событий запроса на слияние GitLab

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

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

    • Комментарии к запросам на слияние
    • Комментарии к коммитам

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

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

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

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

    3.1 Переменные комментариев к запросу на слияние

    Имя переменнойОписаниеПример значения
    mergereq-shaПоследний SHA коммита8a1b3c4d5e6f...
    mergereq-actionДействие запроса на слияниеopen, reopen, update, close, merge
    mergereq-stateСтатус запроса на слияниеopened, closed, merged
    mergereq-numberНомер запроса на слияние42
    mergereq-urlURL запроса на слияниеhttps://gitlab.com/group/project/-/merge_requests/42
    mergereq-titleЗаголовок запроса на слияниеДобавить новую функцию
    mergereq-descriptionОписание запроса на слияниеЭтот PR добавляет...
    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-shaКоммит SHA8a1b3c4d5e6f...
    git-commit-messageСообщение коммитаОбновление README.md
    git-commit-timestampВремя коммита2025-01-26T10:30:00Z
    git-commit-urlURL коммитаhttps://gitlab.com/group/project/-/commit/8a1b3c4d

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

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

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

    Настройка вебхука через интерфейс GitLab

    1. Перейдите в настройки вашего проекта GitLab.
    2. Перейдите в Настройки > Вебхуки.
    3. Добавьте URL вебхука в зависимости от режима развертывания EventListener, например, используя режим https:
      https://<ваш-url-eventlistener>
    4. Выберите необходимые типы событий:
      • События коммита
      • События запроса на слияние
      • Комментарии
    5. (Необязательно) Настройте секретный токен.
    6. Нажмите "Добавить вебхук".

    Пример настройки триггера для конвейера

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

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

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

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

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

    ИнформацияОписание
    my-namespaceИмя пространства имен
    my-pipelineИмя конвейера
    workspacesНастройки рабочего пространства, модифицируйте в соответствии с фактическими конфигурациями рабочих пространств конвейера и требованиями

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

    Создание триггера коммита

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

    apiVersion: triggers.tekton.dev/v1alpha1
    kind: Trigger
    metadata:
        name: my-pipeline-push   # Рекомендуется изменить префикс в зависимости от имени конвейера
        namespace: my-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- # Рекомендуется изменить префикс в зависимости от имени конвейера
              spec:
                  pipelineRef:
                    name: my-pipeline  # Измените на фактическое имя конвейера
                  params:
                  - name: git-revision
                    value: $(tt.params.git-revision)
                  - name: git-repo-url
                    value: $(tt.params.git-repo-url)
                  workspaces: # Рабочие пространства нужно изменить в зависимости от требований конвейера и конфигурации окружения
                  - name: source
                    volumeClaimTemplate:
                      spec:
                        accessModes:
                        - ReadWriteMany
                        resources:
                          requests:
                            storage: 1Gi

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

    kubectl apply -f gitlab-push-trigger.yaml

    Создание триггера запроса на слияние

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

    apiVersion: triggers.tekton.dev/v1alpha1
    kind: Trigger
    metadata:
      name: my-pipeline-merge-request # Рекомендуется изменить префикс в зависимости от имени конвейера
      namespace: my-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- # Рекомендуется изменить префикс в зависимости от имени конвейера
            spec:
              pipelineRef:
                name: my-pipeline # Измените в соответствии с именем конвейера
              params:
                - name: git-revision
                  value: $(tt.params.mergereq-sha)
                - name: git-repo-url
                  value: $(tt.params.git-repo-url)
              workspaces: # Рабочие пространства нужно изменить в зависимости от требований конвейера и конфигурации окружения
                - name: source
                  volumeClaimTemplate:
                    spec:
                      accessModes:
                        - ReadWriteMany
                      resources:
                        requests:
                          storage: 1Gi
    TIP

    Пожалуйста, при необходимости скорректируйте настройки Interceptor.

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

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

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

    Проверьте, отправив код и создав запрос на слияние.

    CLI:

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

    Консоль:

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