• Русский
  • Использование GitLab CLI (glab) с GitLab Connector

    В этом руководстве показано, как использовать GitLab CLI (glab) вместе с GitLab Connector для выполнения расширенных операций с GitLab без ручной настройки учетных данных.

    Overview

    GitLab CLI (glab) — это официальный инструмент командной строки для GitLab, который позволяет взаимодействовать с GitLab API для управления merge request, issue, pipeline и другими функциями. GitLab Connector обеспечивает автоматическую настройку для glab, что упрощает использование в контейнеризованных средах без необходимости вручную управлять учетными данными.

    Requirements for GitLab Servers and GitLab CLI (glab)

    Подробности см. в разделе Requirements for GitLab Servers and GitLab CLI (glab).

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

    • GitLab Connector, настроенный с Private Access Token, имеющим область действия api
    • Базовое понимание команд GitLab CLI
    • Доступ kubectl к вашему Kubernetes кластеру

    Чему вы научитесь

    • Как монтировать конфигурацию GitLab CLI с помощью коннектора
    • Как использовать команды glab для распространенных операций с GitLab
    • Как комбинировать операции Git и glab в одном Pod

    Шаг 1: Создайте GitLab Connector

    Сначала убедитесь, что у вас есть GitLab Connector с соответствующими правами:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: gitlab-secret
      namespace: gitlab-connector-demo
    type: connectors.cpaas.io/gitlab-pat-auth
    stringData:
      token: glpat-xxxxxxxxxxxxxxxxxxxx  # Токен должен иметь область действия 'api'
    ---
    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: gitlab-connector
      namespace: gitlab-connector-demo
    spec:
      connectorClassName: gitlab
      address: https://gitlab.com
      auth:
        name: patAuth
        secretRef:
          name: gitlab-secret
    EOF

    Замените:

    • glpat-xxxxxxxxxxxxxxxxxxxx: Замените на ваш фактический Private Access Token GitLab (должен иметь область действия api)
    • https://gitlab.com: Замените на адрес вашего GitLab сервера (используйте https://gitlab.com для GitLab.com или URL вашего self-hosted GitLab)

    Проверьте, что коннектор находится в статусе "Ready":

    kubectl get connector gitlab-connector -n gitlab-connector-demo

    Шаг 2: Использование glab для операций с API

    Создайте Pod, который использует glab для взаимодействия с GitLab API:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: glab-api-demo
      namespace: gitlab-connector-demo
    spec:
      restartPolicy: Never
      containers:
      - name: gitlab-cli
        image: gitlab/glab:v1.74.0
        command:
        - "sh"
        - "-c"
        - |
          set -ex
          
          # Настройка конфигурации glab
          mkdir -p ~/.config/glab-cli
          cp /opt/gitlab/config.yml ~/.config/glab-cli/
          chmod 600 ~/.config/glab-cli/config.yml
          
          # Список проектов
          echo "Listing projects..."
          glab api projects
          
          # Получение информации о текущем пользователе
          echo "Getting user info..."
          glab api user
          
          echo "glab api operations completed"
        volumeMounts:
        - name: gitlab-config
          mountPath: /opt/gitlab
      volumes:
      - name: gitlab-config
        csi:
          driver: connectors-csi
          readOnly: true
          volumeAttributes:
            connector.name: "gitlab-connector"
            configuration.names: "gitlabconfig"
    EOF

    Проверьте логи:

    kubectl logs -f glab-api-demo -n gitlab-connector-demo

    Вы увидите вывод со списком проектов и информацией о пользователе.

    Шаг 3: Клонирование репозиториев с помощью glab

    Используйте glab для клонирования репозиториев:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: glab-clone-demo
      namespace: gitlab-connector-demo
    spec:
      restartPolicy: Never
      containers:
      - name: gitlab-cli
        image: gitlab/glab:v1.74.0
        command:
        - "sh"
        - "-c"
        - |
          set -ex
          
          # Настройка конфигурации glab и git
          mkdir -p ~/.config/glab-cli
          cp /opt/gitlab/config.yml ~/.config/glab-cli/
          chmod 600 ~/.config/glab-cli/config.yml
          
          cp /opt/gitlab/.gitconfig ~/
          chmod 644 ~/.gitconfig
          
          # Клонирование репозитория с помощью glab
          glab repo clone <your-group>/<your-repo> /tmp/repo
          echo "Repository cloned successfully"
          
          # Список содержимого репозитория
          ls -la /tmp/repo
        volumeMounts:
        - name: gitlab-config
          mountPath: /opt/gitlab
      volumes:
      - name: gitlab-config
        csi:
          driver: connectors-csi
          readOnly: true
          volumeAttributes:
            connector.name: "gitlab-connector"
            configuration.names: "gitlabconfig,gitconfig"
    EOF

    Замените:

    • <your-group>/<your-repo>: Замените на путь к вашему GitLab репозиторию (например, gitlab-org/gitlab)

    Важно: При клонировании репозиториев с помощью glab необходимо монтировать обе конфигурации: gitlabconfig и gitconfig.

    Проверьте логи:

    kubectl logs -f glab-clone-demo -n gitlab-connector-demo

    Вы увидите вывод успешного клонирования репозитория:

    + glab repo clone <your-group>/<your-repo> /tmp/repo
    Cloning into '/tmp/repo'...
    remote: Enumerating objects: 123, done.
    remote: Counting objects: 100% (123/123), done.
    remote: Compressing objects: 100% (89/89), done.
    remote: Total 123 (delta 34), reused 123 (delta 34), pack-reused 0
    Receiving objects: 100% (123/123), 45.67 KiB | 1.23 MiB/s, done.
    Resolving deltas: 100% (34/34), done.
    + echo 'Repository cloned successfully'
    Repository cloned successfully

    Шаг 4: Управление Merge Requests

    Используйте glab для работы с merge request:

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: glab-mr-demo
      namespace: gitlab-connector-demo
    spec:
      restartPolicy: Never
      containers:
      - name: gitlab-cli
        image: gitlab/glab:v1.74.0
        command:
        - "sh"
        - "-c"
        - |
          set -ex
          
          # Настройка конфигураций
          mkdir -p ~/.config/glab-cli
          cp /opt/gitlab/config.yml ~/.config/glab-cli/
          chmod 600 ~/.config/glab-cli/config.yml
          
          cp /opt/gitlab/.gitconfig ~/
          chmod 644 ~/.gitconfig
          
          # Клонирование репозитория
          glab repo clone <your-group>/<your-repo> /tmp/repo
          cd /tmp/repo
          
          # Список merge request
          echo "Listing merge requests..."
          glab mr list
          
          # Просмотр конкретного merge request
          echo "Viewing merge request #1..."
          glab mr view <mr-number>
        volumeMounts:
        - name: gitlab-config
          mountPath: /opt/gitlab
      volumes:
      - name: gitlab-config
        csi:
          driver: connectors-csi
          readOnly: true
          volumeAttributes:
            connector.name: "gitlab-connector"
            configuration.names: "gitlabconfig,gitconfig"
    EOF

    Замените:

    • <your-group>/<your-repo>: Замените на путь к вашему GitLab репозиторию (например, gitlab-org/gitlab)
    • <mr-number>: Замените на номер merge request, который хотите просмотреть или закрыть (например, 1, 42)

    Важно: При использовании команд glab, взаимодействующих с репозиторием (например, glab mr list в каталоге репозитория), необходимо монтировать обе конфигурации: gitlabconfig и gitconfig.

    Проверьте логи:

    kubectl logs -f glab-mr-demo -n gitlab-connector-demo

    Вы увидите вывод списка merge request и деталей merge request:

    + glab mr list
    Listing merge requests...
    Showing 8 open merge requests on <your-group>/<your-repo>. (Page 1)
    
    !8     <your-group>/<your-repo>!14    change at: 1764221453   (master) ← (dev-1764221453)
    ...
    
    Viewing merge request #1...
    + echo 'Viewing merge request #1...'
    + glab mr view 8
    title:  Feat/support build xiaokk
    state:  open
    author: kkxiao
    labels:
    assignees:
    reviewers:
    comments:       0
    number: 8
    url:    https://<your-gitlab-server>/<your-group>/<your-repo>/-/merge_requests/8
    --

    Следующие шаги

    • Узнайте, как использовать кастомные CLI-инструменты, такие как reviewdog, для взаимодействия с GitLab: Using Reviewdog
    • Узнайте, как использовать GitLab Connector в CI/CD пайплайнах: Using GitLab Connector in CI/CD Pipelines
    • Ознакомьтесь с концепциями GitLab ConnectorClass: GitLab ConnectorClass Concepts