【问题标题】:Build trigger for Spring Boot application on Google Cloud App Engine在 Google Cloud App Engine 上为 Spring Boot 应用程序构建触发器
【发布时间】:2018-07-23 01:02:27
【问题描述】:

我正在尝试使用 Google App Engine 的构建触发器在 Google Cloud Platform 上实现自动构建和部署。当我推送到链接的 Github 存储库的主分支时,当前会触发构建。

该应用程序是一个带有 Maven 的 Spring Boot 应用程序,它提供一个简单的 API。我正在尝试在我的cloudbuild.yaml 文件中发出mvn appengine:deploy,它看起来像这样:

# 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>

我的配置中可能缺少什么想法?我很难在网上找到任何使用 Maven 在 Google App Engine 上部署 cloudbuild.yaml 的示例。

【问题讨论】:

  • 云外壳在云 SDK 可用的服务器上下文中执行。 SDK 在执行触发构建的服务器上下文中是否可用?错误消息表明它可能不是(或者它或构建可能配置不正确)。

标签: java spring maven google-app-engine maven-gae-plugin


【解决方案1】:

我最近在升级到新 MacBook 时遇到了类似的错误消息。我将google-cloud-sdk 文件夹移动到/usr/local/share/google/ 目录中,即/usr/local/share/google/google-cloud-sdk,这解决了我的问题。

【讨论】:

    【解决方案2】:

    appengine-maven-pluginrequires 要安装的 Cloud SDK。 由于gcr.io/cloud-builders/mvn docker 镜像没有安装,appengine:deploy 目标失败。

    我可以想到两种解决方法:

    1) 创建一个自定义 Cloud Build 构建步骤 (Dockerfile),其中包含 mavengcloud。然后将其部署到您的 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

    【讨论】:

    • 在没有亲自测试的情况下投了赞成票,但这两个选项都很有意义,值得一试。
    猜你喜欢
    • 2019-05-18
    • 2021-02-25
    • 2018-06-12
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2018-12-07
    • 2014-04-08
    相关资源
    最近更新 更多