LINUX.ORG.RU

ошибка при запуске скрипта jenkins

 , ,


0

1

запускается удаленно скрипт

+ ssh user@server.com cd /var/www/commands && php push.php
Build step 'Execute shell' marked build as failure
Finished: FAILURE

если я на сервере server.com запускаю эту команду

cat test.sh 
#!/bin/bash

DIR="/var/www/commands"

cd $DIR && php push.php 
echo $?

bash -x test.sh 
+ DIR=/var/www/commands
+ cd /var/www/commands
+ php push.php
+ echo 0
0

что не нравится jenkins ?


Вариант 0: в команде ssh user@server.com cd /var/www/commands && php push.php ты не поставил кавычки, и php push.php выполняется локально на сервере дженкинса. Команда должна быть ssh user@server.com "cd /var/www/commands && php push.php".

Вариант 1: он не может подключиться по ssh - читай про аутентификацию по ключу

Вариант 2: скрипт использует что-то, что есть только в интерактивной сессии - проверь, как работает скрипт в неинтерактивном режиме ssh user@server /path/to/test.sh

tiandrey ★★★★★
()

ssh user@server.com cd /var/www/commands && php push.php

Выполнит вторую часть команды на агенте дженкинса.

Deleted
()
Ответ на: комментарий от tiandrey

Вариант 0, кавычки есть в «Execute shell», просто jenkins их не вывел при выполнении

Вариант 1, авторизация по ключам

Вариант 2, с хоста jenkins

ssh user@server.com "~/bin/test.sh"
+ DIR=/var/www/commands
+ cd /var/www/commands
+ php push.php
+ echo 1
1

c server.com

bash -x ~/bin/test.sh 
+ DIR=/var/www/commands
+ cd /var/www/commands
+ php push.php
+ echo 0
0

Garcia
() автор топика
Ответ на: комментарий от Garcia

Ну вот, видишь, скрипт ломается при запуске в неинтерактивном режиме. Дебажь его.

Как вариант - он требует псевдотерминал. Попробуй делать ssh -t user@server.com "~/bin/test.sh".

Ну или так: echo "~/bin/test.sh" | ssh user@server.com.

tiandrey ★★★★★
()
Ответ на: комментарий от tiandrey

вроде так отрабатывает

echo "~/bin/test.sh" | ssh user@server.com
Pseudo-terminal will not be allocated because stdin is not a terminal.
+ DIR=/var/www/commands
+ cd /var/www/commands
+ php push.php
+ echo 0
0

Garcia
() автор топика
Ответ на: комментарий от Garcia

Они здесь ничего не дают. && - это разделитель команд, все что после него выполняется локально.

Deleted
()
Ответ на: комментарий от Deleted

почему тогда другой скрипт через jenkins отрабатывает нормально?

ssh user@server.com 'cd /var/www/commands && php install up'

и раньше

ssh user@server.com 'cd /var/www/commands && php push.php'
отрабатывал нормально, но потом началась ошибка

Build step 'Execute shell' marked build as failure

сейчас я его поменял на

echo "~/bin/test.sh" | ssh -T user@server.com

Garcia
() автор топика
Последнее исправление: Garcia (всего исправлений: 1)
Ответ на: комментарий от Garcia

Потому что тут ты заключил в кавычки команду целиком. Дженкинс тут ни причем, оно точно так же работает из скрипта или из терминала.

Deleted
()
Ответ на: комментарий от Garcia

В сказки «я ничего не делал, оно само сломалось» тут никто не верит. Ищи что и где поменялось.

ssh $server foo && bar выполнит bar локально. ssh $server "foo && bar" выполнит bar на сервере. В зависимости от того, как и во сколько интерпретаторов это обёрнуто, кавычки могут проглотиться в процессе передачи параметров и всё сломается.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.