Не удается получить хранилище из Google Cloud Storage - PullRequest
0 голосов
/ 28 мая 2019

У меня есть библиотека, размещенная в облачном хранилище Google. Я использую Jenkins для развертывания моего приложения в GKE.

Я использую библиотеку CloudStorageMaven (V1.0) для передачи проекта в GCS.

Я могу развернуть свой библиотечный проект, но когда я пытаюсь запустить тест для микросервиса на сервере Jenkins, maven не может загрузить мою библиотеку.

Я пытался сделать GCS Bucket общедоступным, но это не имело никакого значения.

Jenkinsfile

#!/usr/bin/env groovy
podTemplate(
    label: 'slavepod',
    containers: [
        containerTemplate (
            name: 'maven',
            image: 'maven:3.5.2-alpine',
            command: 'cat',
            ttyEnabled: true,
            resourceRequestCpu: '256m',
            resourceLimitCpu: '512m',
            resourceRequestMemory: '512Mi',
            resourceLimitMemory: '1024Mi'
        ),
        containerTemplate (
            name: 'docker',
            image: 'gcr.io/cloud-builders/docker',
            command: 'cat',
            ttyEnabled: true,
            resourceRequestCpu: '512m',
            resourceLimitCpu: '1024m',
            resourceRequestMemory: '512Mi',
            resourceLimitMemory: '1024Mi'
        ),
        containerTemplate (
            name: 'kubectl',
            image: 'gcr.io/cloud-builders/kubectl',
            command: 'cat',
            ttyEnabled: true,
            resourceRequestCpu: '512m',
            resourceLimitCpu: '1024m',
            resourceRequestMemory: '512Mi',
            resourceLimitMemory: '1024Mi'
        ),
        containerTemplate (
            name: 'gcloud',
            image: 'gcr.io/cloud-builders/gcloud',
            command: 'cat',
            ttyEnabled: true,
            resourceRequestCpu: '512m',
            resourceLimitCpu: '1024m',
            resourceRequestMemory: '512Mi',
            resourceLimitMemory: '1024Mi'
        )
    ],
    volumes: [
        hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
        persistentVolumeClaim(claimName: 'maven-repo', mountPath: '/home/jenkins/.m2')
    ]
)
{
    node('slavepod') {

        stage('Clone repository') {
            checkout scm

        }

        stage('Unit Test') {    
          container('maven') {
              echo 'Running Maven tests'
              sh("mvn -Dmaven.repo.local=/home/jenkins/.m2/ test")
          }
      }

} // end of pipeline


У меня есть расширение и хранилище, настроенные в pom.xml

<build>
....

<extensions>
    <extension>
        <groupId>com.gkatzioura.maven.cloud</groupId>
        <artifactId>google-storage-wagon</artifactId>
        <version>1.0</version>
    </extension>
</extensions>
</build>

<repositories>
    <repository>
        <id>ca.performance.common</id>
        <url>gs://performance-repository</url>
    </repository>
</repositories>

Я получаю сообщение об ошибке в консоли конвейера Jenkins, как показано ниже:

Downloading from ca.performance.common: gs://url/to/repository/jar-1.0.0.pom
[ERROR] Could not establish connection with google cloud
com.google.cloud.storage.StorageException: Insufficient Permission
    at com.google.cloud.storage.spi.v1.HttpStorageRpc.translate (HttpStorageRpc.java:219)
    at com.google.cloud.storage.spi.v1.HttpStorageRpc.list (HttpStorageRpc.java:314)
    at com.google.cloud.storage.StorageImpl$6.call (StorageImpl.java:272)
    at com.google.cloud.storage.StorageImpl$6.call (StorageImpl.java:269)
    at com.google.api.gax.retrying.DirectRetryingExecutor.submit (DirectRetryingExecutor.java:89)
    at com.google.cloud.RetryHelper.run (RetryHelper.java:74)
    at com.google.cloud.RetryHelper.runWithRetries (RetryHelper.java:51)
    at com.google.cloud.storage.StorageImpl.listBuckets (StorageImpl.java:268)
    at com.google.cloud.storage.StorageImpl.list (StorageImpl.java:257)
    at com.gkatzioura.maven.cloud.gcs.GoogleStorageRepository.connect (GoogleStorageRepository.java:55)
    at com.gkatzioura.maven.cloud.gcs.GoogleStorageWagon.connect (GoogleStorageWagon.java:135)
    at org.eclipse.aether.transport.wagon.WagonTransporter.connectWagon (WagonTransporter.java:342)
    at org.eclipse.aether.transport.wagon.WagonTransporter.pollWagon (WagonTransporter.java:382)
    at org.eclipse.aether.transport.wagon.WagonTransporter.execute (WagonTransporter.java:431)
    at org.eclipse.aether.transport.wagon.WagonTransporter.get (WagonTransporter.java:412)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$GetTaskRunner.runTask (BasicRepositoryConnector.java:453)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run (BasicRepositoryConnector.java:360)
    at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run (RunnableErrorForwarder.java:75)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector$DirectExecutor.execute (BasicRepositoryConnector.java:583)
    at org.eclipse.aether.connector.basic.BasicRepositoryConnector.get (BasicRepositoryConnector.java:259)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads (DefaultArtifactResolver.java:498)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve (DefaultArtifactResolver.java:399)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts (DefaultArtifactResolver.java:224)
    at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact (DefaultArtifactResolver.java:201)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom (DefaultArtifactDescriptorReader.java:261)
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor (DefaultArtifactDescriptorReader.java:192)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.resolveCachedArtifactDescriptor (DefaultDependencyCollector.java:539)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.getArtifactDescriptorResult (DefaultDependencyCollector.java:522)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:411)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.processDependency (DefaultDependencyCollector.java:365)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.process (DefaultDependencyCollector.java:353)
    at org.eclipse.aether.internal.impl.DefaultDependencyCollector.collectDependencies (DefaultDependencyCollector.java:256)
    at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies (DefaultRepositorySystem.java:282)
    at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve (DefaultProjectDependenciesResolver.java:169)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:223)
    at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies (LifecycleDependencyResolver.java:145)
    at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved (MojoExecutor.java:246)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:200)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:309)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:194)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:107)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:955)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:290)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:194)
    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:498)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Insufficient Permission",
    "reason" : "insufficientPermissions"
  } ],
  "message" : "Insufficient Permission"
}

1 Ответ

1 голос
/ 29 мая 2019

Убедитесь, что вы следуете инструкциям в полном руководстве по ссылке CloudStorageMaven, которую вы разместили?

Как указано в официальных документах , вам необходимо предоставить достаточные разрешения конкретным пользователям или разрешить общедоступную (allUsers) читаемость на уровне сегмента, чтобы сделать все объекты в данном блоке доступными для указанных пользователей или allUsers. .

Код ошибки вашей попытки указывает на проблемы с правами доступа:

{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Insufficient Permission",
    "reason" : "insufficientPermissions"
  } ],
  "message" : "Insufficient Permission"
}

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

$ gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]

Однако, следуя рекомендациям, я бы рекомендовал предоставлять детальный доступ на уровне сегмента только для учетных записей пользователей или учетных записей служб, для которых вы хотите иметь доступ на чтение / запись к объектам в данном сегменте. Вы можете прочитать больше о том, как это сделать здесь .

Если проблема сохраняется, проблема «Недостаточно прав доступа» связана с кластером GKE. Проверьте, какие разрешения для хранилища имеет ваш кластер, так:

  • В облачной консоли -> Нажмите на Kubernets Engine

  • Нажмите «Имя кластера» ---> Найти «Хранилище» в разделе «Разрешения».

Если у вас есть только «Только чтение», вам нужно будет воссоздать кластер следующим образом:

  1. Нажмите Создать новый кластер (как вы определили ранее)
  2. Найдите «Пулы узлов» и нажмите «Расширенное редактирование»
  3. Выберите «чтение и запись» из выпадающего списка в хранилище
  4. Создайте новый кластер для вашего проекта
  5. Разверните ваш проект в новом кластере и попробуйте снова.
...