Сбой команды Diff при выполнении из сценария оболочки jenkins

#bash #shell #jenkins #scripting #diff

#bash #оболочка #дженкинс #сценарии #diff

Вопрос:

Выполняемая мной команда diff проста, но не выполняется при выполнении из execute shell script Дженкинса.

 echo 'diff Delta_changes_current.txt Delta_changes_previous.txt >> PR.DELTA.FILES'
chmod 777 delta.sh
. ./delta.sh
diff Delta_changes_current.txt Delta_changes_previous.txt
  

Шаг сборки «Выполнить оболочку» помечен как сбой сборки

нет даже ошибки, чтобы выяснить, в чем проблема.

Когда я запускаю то же самое непосредственно с сервера, команда выдает результат.

может кто-нибудь, пожалуйста, помочь мне найти, что нужно сделать

..

Приведенный выше фрагмент взят из журналов. Позвольте мне вставить журналы, выполнив только команду ..

 
  diff Delta_changes_current.txt Delta_changes_previous.txt
1,4c1
< ################################# Delta_Changes_currect file for Junit##########
< 
< /OptionlessVDDSController.java
< /OptionlessVDDSControllerTest_.java
 No newline at end of file
---
> /OracleBroker.java
Build step 'Execute shell' marked build as failure
  

Его вывод на печать и немедленный сбой

Комментарии:

1. Я полагаю, что с дополнительной информацией @user1934428 определил реальную первопричину — статус завершения diff cmd. Когда код выхода из оболочки не указан, он возвращает последний результат cmd. Вы можете добавить строку, как указано, для переопределения.

Ответ №1:

Согласно справочной странице diff:

_ Статус выхода равен 0, если входные данные одинаковые, 1, если разные, 2, если проблема._

Если файлы отличаются, diff устанавливается статус выхода 1. Дженкинс рассматривает шаг выполнения как неудачный, если он возвращается со статусом выхода, отличным от 0.

Вы могли бы добавить еще одну команду, чтобы перехватить этот случай:

 (( $? < 2 )) amp;amp; true # Convert status 1 to 0
  

Комментарии:

1. Это действительно сэкономило мне много времени. Потребовалось так много времени, чтобы понять, что команда diff возвращает код выхода, который вызывает сбой. Большое спасибо

2. @sravanisrinija Будьте осторожны — есть несколько команд, которые могут возвращать ненулевой код выхода, даже если они не завершаются сбоем в интуитивном смысле. grep является еще одним распространенным.

3. да .. верно. Я должен использовать команду grep @ количество мест в скрипте. Мой скрипт продолжает сбоить всякий раз, когда он сталкивается с grep, .. это тоже только при запуске из Jenkins. С прямого сервера все в порядке. 🙁

4. @sravanisrinija : Когда я использовал сценарии оболочки (в моем случае zsh) в Jenkins, я не определял каждую команду как отдельный шаг jenkins, а писал целые сценарии, в которых я контролирую общий код выхода. Мне не нужно, чтобы Дженкинс «смотрел» на каждую выполняемую команду.