Then I configured a Jenkins job which contains a "execute shell" step invoking this script.
Jenkins "execute shell" step
expect $WORKSPACE/appcfg.exp "$APPENGINE_HOME" "myuser@gmail.com" "mypassword" "update" "$WORKSPACE/war"
appcfg.exp expect script
#!/usr/bin/expect -f # Expect script to supply GAE's account password for appcfg.sh # # This script needs four arguments: # username = GAE's google account email # password = GAE's google account password # warDir = war directory to deploy to GAE # gaeHome = GAE's SDK home dir # # For example: # expect appcfg.exp myemail@gmail.com mypassword ./war /usr/share/appengine-sdk-1.5.3 if {[llength $argv] == 0} { puts "usage: appcfg.exp {-index|#}" exit 1 } set gaeHome [lrange $argv 0 0] set username [lrange $argv 1 1] set password [lrange $argv 2 2] set cmd [lrange $argv 3 3] set warDir [lrange $argv 4 4] set timeout -1 # spawns appcfg.sh spawn $gaeHome/bin/appcfg.sh --enable_jar_splitting --passin --email=$username $cmd $warDir match_max 100000 expect { default {exit 0} # Look for passwod prompt "*?assword*" } # Send password aka $password send -- "$password\r" # send blank line (\r) to make sure we get back to gui send -- "\r" expect eof