2012-10-30 12 views
8

Mam kompilację Jenkins, która uruchamia wdrożenie Capistrano jako działanie po zakończeniu kompilacji.Rozmieszczanie za pośrednictwem Capistrano przez Jenkinsa - uwierzytelnianie SSH nie powiodło się

Uruchamianie zadania Capistrano jako użytkownika Jenkinsa z konsoli działa całkowicie poprawnie i bez pytania o hasło (wcześniej skonfigurowałem klucze SSH na obu serwerach kompilacji i postoju). Jednak po uruchomieniu tego samego skryptu przez Jenkinsa, nagle pojawia się monit o podanie hasła, a kompilacja nie powiedzie się (brak obecności TTY).

[workspace] $ /bin/sh -xe /tmp/hudson7321493219694918714.sh 
Performing Post build task... 
Match found for : : True 
Logical operation result is TRUE 
Running script : cap _2.13.4_ deploy 
[workspace] $ /bin/sh -xe /tmp/hudson1545664641721322948.sh 
+ cap _2.13.4_ deploy 
    * executing `deploy' 
    * executing `deploy:update' 
** transaction: start 
    * executing `deploy:update_code' 
    triggering before callbacks for `deploy:update_code' 
[32m--> Updating code base with checkout strategy[0m 
    executing locally: "git ls-remote [email protected]:my_project.git master" 
    command finished in 1200ms 
    * executing "git clone -q [email protected]:my_project.git /var/www/staging/my_project/releases/20121029223619 && cd /var/www/staging/my_project/releases/20121029223619 && git checkout -q -b deploy 1fb11d669a6cb5a714d077162305dfcfaba82f01 && (echo 1fb11d669a6cb5a714d077162305dfcfaba82f01 > /var/www/staging/my_project/releases/20121029223619/REVISION)" 
servers: ["my.staging-server.com"] 
Password: stty: standard input: Inappropriate ioctl for device 
stty: standard input: Inappropriate ioctl for device 
stty: standard input: Inappropriate ioctl for device 

*** [deploy:update_code] rolling back 
    * executing "rm -rf /var/www/staging/my_project/releases/20121029223619; true" 
    servers: ["my.staging-server.com"] 
** [deploy:update_code] exception while rolling back: Capistrano::ConnectionError, connection failed for: my.staging-server.com (Net::SSH::AuthenticationFailed: not-specified) 
connection failed for: my.staging-server.com (Net::SSH::AuthenticationFailed: not-specified) 
POST BUILD TASK : FAILURE 

Wygląda Ruby nie odebrać mojego SSH w góre, gdy uruchomiony przez Jenkinsa może (Net::SSH::AuthenticationFailed: not-specified)?

Czy ktoś ma pojęcie, co może być nie tak?

+0

Uruchamianie tego samego skryptu powłoki, który Jenkins generuje w /tmp/hudson*.sh w obszarze roboczym projektu, ponieważ użytkownik jenkins działa doskonale. Dziwne jest również to, że SSH do serwera działa dobrze, ale potem klonowanie z git (serwer git na tym samym zdalnym komputerze co cel budowania) kończy się niepowodzeniem (tylko wtedy, gdy jest uruchamiany w wersji Jenkins). Jestem zmieszany. – Burgi

+0

Myślę, że Jenkins działa jako "root", więc umieść "env | sort" w swoim skrypcie przed poleceniem "cap", aby wydrukować informacje o środowisku, abyś mógł zobaczyć, kim jest użytkownik. Pracuję teraz nad tym samym problemem. Dam ci znać, jeśli coś wymyślę. – Harmon

+1

Który użytkownik jest twoim skryptem Capistrano łączącym się jako? Może to być "klon git" jako inny użytkownik, jeśli nie określisz, z kim łączysz się jako. Domyślnie będzie to użytkownik uruchamiający skrypt Cap z hosta wdrożenia. Na przykład, jest to nasza konfiguracja: 'server '# {deploy_user} @ # {hostname}",: app,: db,: primary => true' i 'set: deploy_user, ENV [' USER ']'. – Harmon

Odpowiedz

5

Wpadliśmy w coś podobnego do tego. Możliwe, że powłoka logowania dla programu Jennkins ma już agenta ssh działającego automatycznie, ale kontekst, w którym Jnnkins odradza się dla twojego wdrożenia, nie działa.

Spróbuj uruchomić ręcznie w ciągu jednego skryptu jenkins:

# Start the ssh agent. Evaling the output will set the relevant environment 
# variables 
eval `ssh-agent` 

# Add the default keys like id_rsa and id_dsa (or explicitly specify your key, 
# if it's not a default) 
ssh-add 

# Your normal deploy script here 

# Save the return value of your script 
RETVAL=$? 

# Clean up 
kill $SSH_AGENT_PID 

# Exit the script with the true return value instead of the return value of kill 
# which could be successful even when the capistrano portion of the build has 
# crashed 
exit $RETVAL 

Nadzieja to działa dla Ciebie! Muszle są denerwujące.

+0

Naprawiono to. Dziękuję Ci! –

0

Niestety rozwiązane tylko poprzez zastąpienie oryginalnego deploy.rb przed wykonaniem cap deploy z innego zapisanego lokalnie gdzie dodałem set :password, "sshpassword"

Powiązane problemy