Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deploying to Google App Engine

I am struggling with Google App Engine. All I want to do is this:

  • Deploy the Guestbook application from https://cloud.google.com/appengine/docs/java/tools/maven (I have chosen the guestbook app)
  • Setting up push-to-deploy https://cloud.google.com/tools/repo/push-to-deploy

I am following the exact steps of the tutorials. I have tried several times now. The app builds fine in Jenkins (I manage to get it running) however the deployment fails.

+ gcloud --project=MyProject preview app deploy target/guestbook-1.0-SNAPSHOT.war
ERROR: File [/var/jenkins/workspace/MyProject/target/guestbook-1.0-SNAPSHOT.war] is not a valid deployable item.
ERROR: (gcloud.preview.app.deploy) Errors occurred while parsing the App Engine app configuration: 
Build step 'Execute shell' marked build as failure
Finished: FAILURE

It all works fine on the local development web server. The MyProject is the project id (I just changed it for the example). What am I doing wrong. I mean have I forgotten to do something? I have been doing Java for over five years now, I can't understand why it should be so hard to do something so basic. Please help me

From Jenkins:

Started by user User Name
Building remotely on cloud-dev-java in workspace /var/jenkins/workspace/MyGuestbook
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url https://source.developers.google.com/p/MyProject # timeout=10
Fetching upstream changes from https://source.developers.google.com/p/MyProject
 > git --version # timeout=10
using .gitcredentials to set credentials
 > git config --local credential.helper store --file=/tmp/git7191806817673001841.credentials # timeout=10
 > git fetch --tags --progress https://source.developers.google.com/p/MyProject +refs/heads/*:refs/remotes/origin/*
 > git config --local --remove-section credential # timeout=10
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision 2bf8419a93275dc87adb7be00d1fda9e6efc773b (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 2bf8419a93275dc87adb7be00d1fda9e6efc773b
 > git rev-list 9d2cd477ad8fcb6f210bd2418e8f708e5c5167f9 # timeout=10
[MyGuestbook] $ mvn clean test package
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building myapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ myapp ---
[INFO] Deleting /var/jenkins/workspace/MyGuestbook/target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ myapp ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /var/jenkins/workspace/MyGuestbook/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ myapp ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /var/jenkins/workspace/MyGuestbook/target/myapp-1.0-SNAPSHOT/WEB-INF/classes
[INFO] 
[INFO] --- versions-maven-plugin:2.1:display-dependency-updates (default) @ myapp ---
[INFO] The following dependencies in Dependencies have newer versions:
[INFO]   com.google.appengine:appengine-api-1.0-sdk ......... 1.9.17 -> 1.9.17a
[INFO]   com.google.appengine:appengine-api-stubs ........... 1.9.17 -> 1.9.17a
[INFO]   com.google.appengine:appengine-testing ............. 1.9.17 -> 1.9.17a
[INFO]   javax.servlet:servlet-api ......................... 2.5 -> 3.0-alpha-1
[INFO]   junit:junit ...................................... 4.12-beta-1 -> 4.12
[INFO]   org.mockito:mockito-all ............................. 1.9.5 -> 1.10.17
[INFO] 
[INFO] 
[INFO] --- versions-maven-plugin:2.1:display-plugin-updates (default) @ myapp ---
[INFO] 
[INFO] The following plugin updates are available:
[INFO]   com.google.appengine:appengine-maven-plugin ....... 1.9.17 -> 1.9.17a
[INFO]   maven-compiler-plugin .................................... 3.1 -> 3.2
[INFO]   maven-war-plugin ......................................... 2.4 -> 2.5
[INFO] 
[WARNING] The following plugins do not have their version specified:
[WARNING]   maven-clean-plugin ........................ (from super-pom) 2.6.1
[WARNING]   maven-deploy-plugin ....................... (from super-pom) 2.8.2
[WARNING]   maven-install-plugin ...................... (from super-pom) 2.5.2
[WARNING]   maven-resources-plugin ...................... (from super-pom) 2.7
[WARNING]   maven-site-plugin ........................... (from super-pom) 3.4
[WARNING]   maven-surefire-plugin ...................... (from super-pom) 2.18
[INFO] 
[INFO] Project defines minimum Maven version as: 3.1.0
[INFO] Plugins require minimum Maven version of: 3.1.0
[INFO] Note: the super-pom from Maven 3.1.0 defines some of the plugin
[INFO]       versions and may be influencing the plugins required minimum Maven
[INFO]       version.
[INFO] 
[INFO] No plugins require a newer version of Maven than specified by the pom.
[INFO] 
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ myapp ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /var/jenkins/workspace/MyGuestbook/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ myapp ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /var/jenkins/workspace/MyGuestbook/target/test-classes
[WARNING] /var/jenkins/workspace/MyGuestbook/src/test/java/com/mycompany/myapp/GuestbookServletTest.java: Some input files use or override a deprecated API.
[WARNING] /var/jenkins/workspace/MyGuestbook/src/test/java/com/mycompany/myapp/GuestbookServletTest.java: Recompile with -Xlint:deprecation for details.
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ myapp ---
[INFO] Surefire report directory: /var/jenkins/workspace/MyGuestbook/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.mycompany.myapp.GuestbookServletTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.702 sec
Running com.mycompany.myapp.SignGuestbookServletTest
Dec 22, 2014 5:32:44 PM com.google.appengine.api.datastore.dev.LocalDatastoreService init
INFO: Local Datastore initialized: 
    Type: Master/Slave
    Storage: In-memory
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.456 sec

Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ myapp ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /var/jenkins/workspace/MyGuestbook/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ myapp ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- versions-maven-plugin:2.1:display-dependency-updates (default) @ myapp ---
[INFO] The following dependencies in Dependencies have newer versions:
[INFO]   com.google.appengine:appengine-api-1.0-sdk ......... 1.9.17 -> 1.9.17a
[INFO]   com.google.appengine:appengine-api-stubs ........... 1.9.17 -> 1.9.17a
[INFO]   com.google.appengine:appengine-testing ............. 1.9.17 -> 1.9.17a
[INFO]   javax.servlet:servlet-api ......................... 2.5 -> 3.0-alpha-1
[INFO]   junit:junit ...................................... 4.12-beta-1 -> 4.12
[INFO]   org.mockito:mockito-all ............................. 1.9.5 -> 1.10.17
[INFO] 
[INFO] 
[INFO] --- versions-maven-plugin:2.1:display-plugin-updates (default) @ myapp ---
[INFO] 
[INFO] The following plugin updates are available:
[INFO]   com.google.appengine:appengine-maven-plugin ....... 1.9.17 -> 1.9.17a
[INFO]   maven-compiler-plugin .................................... 3.1 -> 3.2
[INFO]   maven-war-plugin ......................................... 2.4 -> 2.5
[INFO] 
[WARNING] The following plugins do not have their version specified:
[WARNING]   maven-clean-plugin ........................ (from super-pom) 2.6.1
[WARNING]   maven-deploy-plugin ....................... (from super-pom) 2.8.2
[WARNING]   maven-install-plugin ...................... (from super-pom) 2.5.2
[WARNING]   maven-resources-plugin ...................... (from super-pom) 2.7
[WARNING]   maven-site-plugin ........................... (from super-pom) 3.4
[WARNING]   maven-surefire-plugin ...................... (from super-pom) 2.18
[INFO] 
[INFO] Project defines minimum Maven version as: 3.1.0
[INFO] Plugins require minimum Maven version of: 3.1.0
[INFO] Note: the super-pom from Maven 3.1.0 defines some of the plugin
[INFO]       versions and may be influencing the plugins required minimum Maven
[INFO]       version.
[INFO] 
[INFO] No plugins require a newer version of Maven than specified by the pom.
[INFO] 
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ myapp ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /var/jenkins/workspace/MyGuestbook/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ myapp ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ myapp ---
[INFO] Skipping execution of surefire because it has already been run for this configuration
[INFO] 
[INFO] --- maven-war-plugin:2.4:war (default-war) @ myapp ---
[INFO] Packaging webapp
[INFO] Assembling webapp [myapp] in [/var/jenkins/workspace/MyGuestbook/target/myapp-1.0-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp webResources [/var/jenkins/workspace/MyGuestbook/src/main/webapp/WEB-INF] to [/var/jenkins/workspace/MyGuestbook/target/myapp-1.0-SNAPSHOT]
[INFO] Copying webapp resources [/var/jenkins/workspace/MyGuestbook/src/main/webapp]
[INFO] Webapp assembled in [154 msecs]
[INFO] Building war: /var/jenkins/workspace/MyGuestbook/target/myapp-1.0-SNAPSHOT.war
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12.355s
[INFO] Finished at: Mon Dec 22 17:32:47 UTC 2014
[INFO] Final Memory: 20M/56M
[INFO] ------------------------------------------------------------------------
[MyGuestbook] $ /bin/sh -xe /tmp/hudson5523568617447680772.sh
+ gcloud --project=MyProject preview app deploy target/myapp-1.0-SNAPSHOT.war
ERROR: File [/var/jenkins/workspace/MyGuestbook/target/myapp-1.0-SNAPSHOT.war] is not a valid deployable item.
ERROR: (gcloud.preview.app.deploy) Errors occurred while parsing the App Engine app configuration: 
Build step 'Execute shell' marked build as failure
Finished: FAILURE

appengine-web.xml:

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application>MyProject</application>
    <version>${appengine.app.version}</version>
    <threadsafe>true</threadsafe>

    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    </system-properties>
</appengine-web-app>

What am I doing wrong, am I missing something? I have followed the guides exactly as they say.

I have tried to using Google Source as repository and Github. Nothing works.

EDIT:

It works:

Updating module [default] from file [/tmp/appcfgpyASfUun/app.yaml]
09:15 PM Host: appengine.google.com
09:15 PM Application: esoteric-cab-803; version: 1
09:15 PM 
Starting update of app: esoteric-cab-803, version: 1
09:15 PM Getting current resource limits.
09:15 PM Scanning files on local disk.
09:15 PM Cloning 6 application files.
09:15 PM Uploading 3 files and blobs.
09:15 PM Uploaded 3 files and blobs.
09:15 PM Compilation starting.
09:15 PM Compilation completed.
09:15 PM Starting deployment.
09:15 PM Checking if deployment succeeded.
09:15 PM Deployment successful.
09:15 PM Checking if updated app version is serving.
09:15 PM Completed update of app: esoteric-cab-803, version: 1
Finished: SUCCESS

What a wonderful sight!

like image 693
LuckyLuke Avatar asked Dec 20 '14 23:12

LuckyLuke


1 Answers

It's failing to deploy because your jenkins build script is failing:

Build step 'Execute shell' marked build as failure

During the step "Execute shell", you have to make sure that the script returns with status 0. Anything else is considered failure. See this SO answer to a similar issue.

It appears that your "Execute shell" section is this one:

[MyGuestbook] $ /bin/sh -xe /tmp/hudson5523568617447680772.sh
+ gcloud --project=MyProject preview app deploy target/myapp-1.0-SNAPSHOT.war
ERROR: File [/var/jenkins/workspace/MyGuestbook/target/myapp-1.0-SNAPSHOT.war] is not a valid deployable item.
ERROR: (gcloud.preview.app.deploy) Errors occurred while parsing the App Engine app configuration: 
Build step 'Execute shell' marked build as failure
Finished: FAILURE

This "Execute shell" sections of the build is failing because the status code returned from the script seems to be the status code returned from gcloud command. If you check the docs here, you can see that it doesn't accept .war archives, but only unpacked war folders. You can simply change the line from

gcloud --project=MyProject preview app deploy target/myapp-1.0-SNAPSHOT.war

to

gcloud --project=MyProject preview app deploy target/myapp-1.0-SNAPSHOT

and at this point, the "Execute shell" section of the build will run properly, and so the jenkins build as a whole should complete correctly.

Gradle

If you're using gradle for the build, it is likely already producing an exploded app directory:

build/exploded-app
like image 132
Nick Avatar answered Oct 20 '22 04:10

Nick