Триггер сборки приложения Spring Boot на Google Cloud App Engine

Я пытаюсь добиться автоматической сборки и развертывания на облачной платформе Google с помощью триггеров сборки с помощью Google App Engine. Сборка в настоящий момент запускается, когда я отправляю в основную ветку моего связанного репозитория Github.

Приложение представляет собой приложение Spring Boot с Maven, которое обслуживает простой API. Я пытаюсь оформить mvn appengine:deploy в моем cloudbuild.yaml файл, который выглядит так:

# cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/mvn'
  args: ['appengine:deploy']

mvn appengine:deploy работает должным образом, когда я запускаю его в Google Cloud Shell, но не работает, когда он выполняется триггером сборки.

Запущенная сборка выполняется в течение примерно 20 секунд, а затем завершается ошибкой со следующим сообщением об ошибке:

Execution default-cli of goal com.google.cloud.tools:appengine-maven-plugin:1.3.1:deploy failed: The Google Cloud SDK could not be found in the customary locations and no path was provided.

Это мое pom.xml конфигурация

<project>
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example.api</groupId>
  <artifactId>api</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>api</name>
  <description>API</description>

  <properties>
    <java.version>1.8</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <appengine.maven.plugin>1.3.2</appengine.maven.plugin>
    <jetty-maven-plugin>9.3.7.v20160115</jetty-maven-plugin>
    <gcloud-maven-plugin>2.0.9.121.v20160815</gcloud-maven-plugin>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>1.5.9.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <version>1.5.9.RELEASE</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>1.5.7.RELEASE</version>
        <executions>
          <execution>
            <goals>
              <goal>repackage</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
         <groupId>com.google.cloud.tools</groupId>
         <artifactId>appengine-maven-plugin</artifactId>
         <version>${appengine.maven.plugin.version}</version>
      </plugin>

      <plugin>
       <groupId>org.eclipse.jetty</groupId>
       <artifactId>jetty-maven-plugin</artifactId>
       <version>${jetty-maven-plugin}</version>
      </plugin>

    </plugins>
  </build>
</project>

Любые идеи, которые я мог бы упустить в моей конфигурации? Мне было трудно найти какие-либо примеры онлайн cloudbuild.yaml развертывание в Google App Engine с использованием Maven.

2 ответа

appengine-maven-plugin требует, чтобы Cloud SDK был установлен. Так как gcr.io/cloud-builders/mvn в образе докера он не установлен, appengine:deploy цель не удается

Я могу придумать два способа обойти это:

1) Создайте пользовательский шаг сборки Cloud Build (Dockerfile), в котором есть и maven, и gcloud. Затем разверните его в своем GCR и используйте в своем cloudbuild.yaml вместо gcr.io/cloud-builders/mvn,

2) Не используйте appengine-maven-plugin, но разбить сборку и развернуть в несколько этапов.

# cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/mvn'
  args: ['package']
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['app', 'deploy', '/workspace/.../target/path-to-app.yaml']

Обратите внимание, что после построения WAR вам может понадобиться gcloud несколько раз поставить приложение перед вызовом gcloud app deploy,

Недавно я столкнулся с похожим сообщением об ошибке при обновлении до моего нового MacBook. Я переместил google-cloud-sdk папка в /usr/local/share/google/ каталог т.е. /usr/local/share/google/google-cloud-sdk и это решило мою проблему.

Другие вопросы по тегам