title: Deploying to Google App Engine
body: <p>I am struggling with Google App Engine. All I want to do is this:</p>
  
  <ul>
  <li>Deploy the Guestbook application from <a href="https://cloud.google.com/appengine/docs/java/tools/maven" rel="noreferrer">https://cloud.google.com/appengine/docs/java/tools/maven</a> (I have chosen the guestbook app)</li>
  <li>Setting up push-to-deploy <a href="https://cloud.google.com/tools/repo/push-to-deploy" rel="noreferrer">https://cloud.google.com/tools/repo/push-to-deploy</a></li>
  </ul>
  
  <p>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.</p>
  
  <pre><code>+ 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
  </code></pre>
  
  <p>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</p>
  
  <p>From Jenkins:</p>
  
  <pre><code>Started by user User Name
  Building remotely on cloud-dev-java in workspace /var/jenkins/workspace/MyGuestbook
   &gt; git rev-parse --is-inside-work-tree # timeout=10
  Fetching changes from the remote Git repository
   &gt; 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
   &gt; git --version # timeout=10
  using .gitcredentials to set credentials
   &gt; git config --local credential.helper store --file=/tmp/git7191806817673001841.credentials # timeout=10
   &gt; git fetch --tags --progress https://source.developers.google.com/p/MyProject +refs/heads/*:refs/remotes/origin/*
   &gt; git config --local --remove-section credential # timeout=10
   &gt; git rev-parse refs/remotes/origin/master^{commit} # timeout=10
   &gt; git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
  Checking out Revision 2bf8419a93275dc87adb7be00d1fda9e6efc773b (refs/remotes/origin/master)
   &gt; git config core.sparsecheckout # timeout=10
   &gt; git checkout -f 2bf8419a93275dc87adb7be00d1fda9e6efc773b
   &gt; 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 -&gt; 1.9.17a
  [INFO]   com.google.appengine:appengine-api-stubs ........... 1.9.17 -&gt; 1.9.17a
  [INFO]   com.google.appengine:appengine-testing ............. 1.9.17 -&gt; 1.9.17a
  [INFO]   javax.servlet:servlet-api ......................... 2.5 -&gt; 3.0-alpha-1
  [INFO]   junit:junit ...................................... 4.12-beta-1 -&gt; 4.12
  [INFO]   org.mockito:mockito-all ............................. 1.9.5 -&gt; 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 -&gt; 1.9.17a
  [INFO]   maven-compiler-plugin .................................... 3.1 -&gt; 3.2
  [INFO]   maven-war-plugin ......................................... 2.4 -&gt; 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 -&gt; 1.9.17a
  [INFO]   com.google.appengine:appengine-api-stubs ........... 1.9.17 -&gt; 1.9.17a
  [INFO]   com.google.appengine:appengine-testing ............. 1.9.17 -&gt; 1.9.17a
  [INFO]   javax.servlet:servlet-api ......................... 2.5 -&gt; 3.0-alpha-1
  [INFO]   junit:junit ...................................... 4.12-beta-1 -&gt; 4.12
  [INFO]   org.mockito:mockito-all ............................. 1.9.5 -&gt; 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 -&gt; 1.9.17a
  [INFO]   maven-compiler-plugin .................................... 3.1 -&gt; 3.2
  [INFO]   maven-war-plugin ......................................... 2.4 -&gt; 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
  </code></pre>
  
  <p>appengine-web.xml:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;appengine-web-app xmlns="http://appengine.google.com/ns/1.0"&gt;
      &lt;application&gt;MyProject&lt;/application&gt;
      &lt;version&gt;${appengine.app.version}&lt;/version&gt;
      &lt;threadsafe&gt;true&lt;/threadsafe&gt;
  
      &lt;system-properties&gt;
          &lt;property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/&gt;
      &lt;/system-properties&gt;
  &lt;/appengine-web-app&gt;
  </code></pre>
  
  <p>What am I doing wrong, am I missing something? I have followed the guides exactly as they say.</p>
  
  <p>I have tried to using Google Source as repository and Github. Nothing works. </p>
  
  <p>EDIT:</p>
  
  <p>It works:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>What a wonderful sight!</p>