Java8将Appcfg迁移到gcloud

问题描述

自最近的appcfg弃用以来一直存在问题。我的项目是使用ant在通往GCP的jenkins管道中构建的java8。

[exec] 95% Application deployment Failed. Message: Deployments using appcfg are no longer supported. See https://cloud.google.com/appengine/docs/deprecations

在GCP中,我有3个项目,分别是开发,测试和上线。我通过jenkins使用参数来匹配项目。例如。使用test进行构建会传递一个deploy-test参数。

来自ant build.xml的代码段:

<target name="deploy-test" depends="build,setup-for-appengine,setup-for-test,deploy"></target>

<target name="deploy-live" depends="build,setup-for-live,deploy"</target>

<target name="setup-for-test" description="Configuration for test">
  (Some config stuff e.g. replacing app id and version in the appengine-web.xml)
</target>

<target name="deploy" description="Upload to App Engine.">
  <exec executable="${FILE PATH TO appcfg.sh}" failonerror="true">
    <arg line="update '${.ENV FILE PATH}/war'" />
  </exec>
</target>

我已经从App Engine SDK升级到Cloud SDK,并迁移到gcloud CLI。我在build.xml中的可执行文件现在是:

<target name="deploy" description="Upload to App Engine.">
  <exec executable="${FILE PATH TO gcloud executable}" failonerror="true">
    <arg line="app deploy '${.ENV FILE PATH}/war'" />
  </exec>
</target>

此部署将通过jenkins成功运行,但这会导致500错误,并以dev(而非测试)为目标。唯一更改的是从App Engine SDK到Cloud SDK的文件路径,然后迁移到gcloud命令。

     [exec] descriptor:      [filepath/appengine-web.xml]
     [exec] source:          [filepath/war]
     [exec] target project:  [dev]
     [exec] target service:  [default]
     [exec] target version:  [version no.]
     [exec] target url:      [https://dev.appspot.com]

任何方向将不胜感激。预先感谢

解决方法

通过将--project和--version添加为和来解决,并且在appengine-web.xml中不再受尊重。 -q已添加以传递任何提示,例如更新。

<target name="deploy" description="Upload to App Engine.">
   <exec executable="${FILE PATH TO gcloud executable}" failonerror="true">
     <arg line="app deploy '${.ENV FILE PATH}/war/WEB-INF/appengine-web.xml' --project=${application_id} --version=${application_version} -q" />
   </exec>
 </target>

我还遇到了GCP和更改项目的gservice帐户范围权限的问题,现已解决。

,

您需要指定appengine-web.xml文件的路径。

<target name="deploy" description="Upload to App Engine.">
  <exec executable="${FILE PATH TO gcloud executable}" failonerror="true">
    <arg line="app deploy '${.ENV FILE PATH}/war/WEB-INF/appengine-web.xml'" />
  </exec>
</target>

还要设置要部署的版本,因为自版本311.0.0(2020-09-22)起,appengine-web.xml中的 application version 元素不是受到尊重。

 <target name="deploy" description="Upload to App Engine.">
   <exec executable="${FILE PATH TO gcloud executable}" failonerror="true">
     <arg line="app deploy '${.ENV FILE PATH}/war/WEB-INF/appengine-web.xml'" />
     <arg line="-v ${version.name}"/>
   </exec>
 </target>

请注意,这仅适用于Java8。对于Java 11,您需要将应用程序打包在可执行jar中。

gcloud app deploy ~/my_app/my_jar.jar

您还需要从现有应用程序中删除 appengine-web.xml 文件,并将其替换为 app.yaml 文件

请参见https://cloud.google.com/appengine/docs/standard/java11/java-differences