• Русский
  • Использование Maven Connector в качестве зеркала Maven Registry

    Использование Maven Connector в качестве зеркала Maven Registry позволяет использовать Maven maven registry как зеркало при выполнении операций mvn.

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

    • Kubernetes кластер с установленной системой Connectors (компоненты Operator, ConnectorsCore и ConnectorsMaven). Подробности об установке этих компонентов см. в Installation Guide.
    • Адрес и учетные данные maven registry, maven registry должен поддерживать использование в качестве зеркала, например maven central, proxy-тип maven репозитория, размещенного в nexus и т.д.
    • Базовые знания Kubernetes и Maven

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

    Необходимо создать maven connector, установив адрес коннектора в адрес maven registry и параметр useAsMirror в значение true. Затем создать job, который выполняет mvn package через этот коннектор.

    Примечание:

    • maven registry должен поддерживать использование в качестве зеркала, например maven central, proxy-тип maven репозитория, размещенного в nexus и т.д.
    ШагОперацияОписание
    1Создать NamespaceСоздать выделенный namespace для демонстрации
    2Настроить Maven ConnectorСоздать ресурс maven connector
    3Создать Maven Job для выполнения mvn packageСоздать job, выполняющий mvn package через коннектор
    4Проверить результатыПроверить успешное выполнение операций mvn package

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

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

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

    kubectl create ns connectors-maven-demo

    Шаг 2: Создать Maven Connector

    Создайте ресурс maven connector, установите spec.address в адрес maven registry и параметр useAsMirror в значение true. Для более подробной информации о создании и настройке коннекторов обратитесь к Connectors Quick Start Guide.

    cat <<EOF | kubectl apply -n connectors-maven-demo -f -
    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: maven-mirror-connector
    spec:
      connectorClassName: maven
      address: https://nexus.example.com/repository/maven-public # Замените на адрес вашего Maven proxy репозитория, из которого будет скачиваться jar.
      params:
      - name: useAsMirror
        value: "true" # Установите "true" для использования maven registry в качестве зеркала
      auth:
        name: basicAuth
    EOF

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

    kubectl get connector maven-mirror-connector -n connectors-maven-demo

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

    NAME              CLASS   ADDRESS                                                    READY   REASON   AGE
    maven-connector   maven   https://nexus.example.com/repository/maven-snapshots   True             10s

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

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

    cat <<'EOF' | kubectl apply -n connectors-maven-demo -f -
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: mvn-package
    spec:
      backoffLimit: 0
      template:
        spec:
          restartPolicy: Never
          containers:
          - name: mvn
            image: docker.io/library/maven:3.9.11-eclipse-temurin-24-alpine # Замените на ваш образ с maven
            imagePullPolicy: IfNotPresent
            env:
            - name: MAVEN_OPTS
              value: -Dmaven.resolver.transport=wagon
            command:
            - "sh"
            - "-c"
            - |
              set -ex
    
              mkdir -p ~/.m2
              cp /opt/maven/settings.xml ~/.m2/settings.xml
    
              keytool -importcert -noprompt \
                -trustcacerts \
                -keystore $JAVA_HOME/lib/security/cacerts \
                -storepass changeit \
                -alias corp-ca \
                -file /opt/maven/ca.cert
    
              echo "Генерация проекта с помощью maven archetype"
              cd /tmp
              mvn archetype:generate -DgroupId=com.example -DartifactId=HelloWorldApp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    
              cd HelloWorldApp/
              echo "Упаковка проекта"
              mvn package
    
            volumeMounts:
            - name: settings
              mountPath: /opt/maven
          volumes:
          - name: settings
            csi:
              readOnly: true
              driver: connectors-csi
              volumeAttributes:
                connector.name: "maven-mirror-connector"
                configuration.names: "settings"
    EOF

    Шаг 4: Проверить выполнение

    Проверьте логи job, чтобы убедиться, что операции mvn package выполнены успешно, и jar скачивается с зеркала maven registry при выполнении mvn package.

    kubectl logs -f job/mvn-package -n connectors-maven-demo

    Подождите несколько минут, вы должны увидеть успешное завершение операции mvn package и скачивание jar из maven registry, указанного в адресе коннектора.

    Пример вывода:

    Downloaded from connectors-mirror: https://nexus.example.com/repository/maven-public/org/apache/commons/commons-compress/1.26.1/commons-compress-1.26.1.jar (1.1 MB at 386 kB/s)
    Downloaded from connectors-mirror: https://nexus.example.com/repository/maven-public/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar (365 kB at 126 kB/s)
    Downloaded from connectors-mirror: https://nexus.example.com/repository/maven-public/com/github/luben/zstd-jni/1.5.5-11/zstd-jni-1.5.5-11.jar (6.8 MB at 1.7 MB/s)
    [INFO] Building jar: /tmp/HelloWorldApp/target/HelloWorldApp-1.0-SNAPSHOT.jar
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  42.678 s
    [INFO] Finished at: 2025-09-02T23:14:46Z
    [INFO] ------------------------------------------------------------------------