• Русский
  • Быстрый старт

    Этот документ поможет вам быстро понять, как создать коннектор SonarQube для подключения к экземпляру SonarQube и выполнения анализа качества кода безопасно, без прямого обращения с токенами аутентификации.

    Мы создадим коннектор SonarQube и используем его для запуска sonar-scanner для анализа кода без прямой работы с учетными данными на стороне клиента.

    Оценочное время чтения

    15 минут

    Требования

    • Kubernetes-кластер с установленной системой Connectors (компоненты Operator, ConnectorsCore и ConnectorsSonarQube). Подробности об установке этих компонентов см. в Installation Guide.
    • Адрес экземпляра SonarQube (сервер SonarQube) и токен аутентификации
    • Базовые знания Kubernetes и SonarQube
    • Проект для анализа (исходный код)

    Обзор процесса

    ШагОперацияОписание
    1Создать NamespaceСоздать выделенный namespace для демонстрации
    2Настроить токен SonarQube и коннекторСоздать секрет аутентификации и ресурс коннектора SonarQube
    3Создать Job для запуска Sonar ScannerСоздать job, выполняющий анализ кода через коннектор

    Пошаговые действия

    Шаг 1: Создать Namespace

    Создайте выделенный namespace для этой демонстрации:

    kubectl create ns connectors-sonarqube-demo

    Шаг 2: Создать токен SonarQube и коннектор

    Создайте одновременно Secret с токеном аутентификации SonarQube и ресурс коннектора SonarQube.

    Подробную информацию о создании и настройке коннекторов смотрите в Connectors Quick Start Guide.

    cat <<EOF | kubectl apply -n connectors-sonarqube-demo -f -
    kind: Secret
    apiVersion: v1
    metadata:
      name: sonarqube-token-secret
    type: connectors.cpaas.io/bearer-token
    stringData:
      token: your-sonarqube-token # Замените на ваш токен пользователя SonarQube или токен анализа проекта
    ---
    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: sonarqube-connector
    spec:
      connectorClassName: sonarqube
      address: https://sonarqube.example.com # Замените на адрес вашего сервера SonarQube (например, https://sonarqube.example.com)
      auth:
        name: tokenAuth
        secretRef:
          name: sonarqube-token-secret
    EOF

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

    kubectl get connector sonarqube-connector -n connectors-sonarqube-demo

    Вывод должен быть следующим:

    NAME                   CLASS       ADDRESS                    READY   REASON   AGE
    sonarqube-connector    sonarqube   https://sonarqube.example.com      True             10s

    Шаг 3: Создать Job для выполнения анализа кода

    Создайте Kubernetes job, который использует коннектор для выполнения сканирования SonarQube:

    cat <<'EOF' | kubectl apply -n connectors-sonarqube-demo -f -
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: sonar-scanner-job
    spec:
      backoffLimit: 0
      template:
        spec:
          restartPolicy: Never
          containers:
            - name: sonar-scanner
              image: sonarsource/sonar-scanner-cli:latest
              command:
                - sh
                - -c
                - |
                  # Клонируйте репозиторий вашего проекта (замените на ваш репозиторий)
                  # Для этой демонстрации создадим простую структуру проекта
                  mkdir -p /src/myproject
                  cd /src/myproject
                  
                  # Создаем простой исходный файл для анализа
                  cat > hello.js <<'EOJS'
                  function hello(name) {
                      console.log("Hello, " + name);
                  }
                  hello("World");
                  EOJS
                  
                  # Создаем sonar-project.properties
                  cat > sonar-project.properties <<'EOPROPS'
                  sonar.projectKey=my-project-key
                  sonar.sources=.
                  EOPROPS
                  
                  # Если ваш сервер SonarQube или прокси использует приватный CA, импортируйте его сертификат;
                  # для публично доверенных сертификатов этот шаг не требуется и файл может отсутствовать.
                  if [ -f /scanner-config/context.proxy.caCert ]; then
                      keytool -importcert -noprompt \
                          -trustcacerts \
                          -keystore "$JAVA_HOME/lib/security/cacerts" \
                          -storepass changeit \
                          -alias corp-ca \
                          -file /scanner-config/context.proxy.caCert
                  fi
    
                  # Объединяем конфигурацию коннектора
                  cat /scanner-config/sonar-project.properties >> sonar-project.properties
    
                  # Запускаем sonar-scanner с конфигурацией коннектора
                  sonar-scanner
              volumeMounts:
                - name: scanner-config
                  mountPath: /scanner-config/
          volumes:
            - name: scanner-config
              csi:
                driver: connectors.cpaas.io
                volumeAttributes:
                  connectorName: sonarqube-connector
                  connectorNamespace: connectors-sonarqube-demo
                  configuration.names: "sonar-scanner"
    EOF
    TIP

    Коннектор монтирует файл конфигурации sonar-project.properties через CSI, который содержит настройки сканера с конфигурацией прокси. Конфигурация включает:

    • sonar.host.url: адрес сервера SonarQube
    • sonar.scanner.proxyHost: имя хоста прокси для безопасного доступа
    • sonar.scanner.proxyPort: порт прокси
    • sonar.scanner.proxyUser: имя пользователя для аутентификации прокси
    • sonar.scanner.proxyPassword: пароль (токен) для аутентификации прокси

    Если в вашем файле sonar-project.properties уже есть свойства sonar.scanner.proxy* или sonar.host.url, удалите их, чтобы избежать конфликтов с конфигурацией, предоставляемой коннектором.

    Проверьте выполнение job:

    kubectl get job sonar-scanner-job -n connectors-sonarqube-demo
    kubectl logs job/sonar-scanner-job -n connectors-sonarqube-demo

    В выводе должны быть успешные результаты анализа:

    INFO: Scanner configuration file: /scanner-config/sonar-project.properties
    INFO: Project root configuration file: /src/myproject/sonar-project.properties
    INFO: Analyzing on SonarQube...
    INFO: ANALYSIS SUCCESSFUL

    Очистка

    После завершения демонстрации удалите созданные ресурсы:

    kubectl delete ns connectors-sonarqube-demo

    Что дальше

    • Изучите SonarQube ConnectorClass, чтобы подробно понять конфигурацию коннектора
    • Обратитесь к разделу Troubleshooting, если возникнут проблемы