Скрипт Minicom вызван из-за неудачного завершения работы jenkins '!killall -9 миником ' - PullRequest
1 голос
/ 06 марта 2019

Мне удалось создать скрипт, который отправляет несколько команд через minicom и сохраняет их в output.txt.Скрипт, который вызывает minicom, называется dut.sh

#!/bin/bash

echo "Setting up DUT" 
stm_armv7 -print "DUT"
stm_armv7 -dut
echo "wait 30s"
sleep 30s

stty -F /dev/ttyACM0 115200 cs8 -cstopb -parenb
rm /home/fsnk/scripts/serial-com/output.txt
export TERM=linux-c-nc
minicom -b 115200 -D /dev/ttyACM0 -C /home/fsnk/scripts/serial-com/output.txt -S /home/fsnk/scripts/serial-com/serial -o 
echo "wait another 5s"
sleep 5s
stm_armv7 -ts 

Итак, в команде minicom я даю еще один файл с именем serial, который имеет некоторый код RunScript.

# UNIX login script.
# Can be used to automatically login to almost every UNIX box.
#
# Some variables.
set a 0
set b a
print Trying to Login..
# Skip initial 'send ""', it seems to matter sometimes..
send ""
goto login

login:
if a > 3 goto failed1
expect {
    "ogin:"       send "root"  
    "assword:"    send ""
    timeout 5    goto loop1

}
goto loop1

loop1:
send "systemctl is-system-running --wait"
sleep 3
# Send command not more than three times.
inc b
if b > 3 goto failed1
expect {
    "\nrunning"    goto success1
    break
    "degrading"  goto success2        
    break
    timeout 5    goto failed2

}

success1:    
print \nSuccessfully received running!
! killall -9 minicom
exit

success2:
print \nSuccessfully received degrading!
! killall -9 minicom
exit

failed1:
print \nConnection Failed (wrong password?)
! killall -9 minicom
exit

failed2: 
print \nMessage sending failed. Didn't receive anything!
! killall -9 minicom
exit

Команда ! killall -9 minicom убивает терминал minicom, основываясь на инструкции .Как я уже упоминал ранее, когда я запускаю это локально или когда я вызываю скрипт через ssh с моей локальной машины, он работает нормально.Проблема возникает, когда я запускаю это от Дженкинса.

Файл output.txt создается, но остается пустым, пока на Jenkins, я получаю мини-сообщение вроде этого:

Setting up DUT
wait 30s

Welcome to minicom 2.7

OPTIONS: I18n 
Compiled on Apr 22 2017, 09:14:19.
Port /dev/ttyACM0, 16:30:57

Press CTRL-A Z for help on special keys

/home/fsnk/scripts/serial-com/dut.sh: line 12:  5639 Killed                  minicom -b 115200 -D /dev/ttyACM0 -C /home/fsnk/scripts/serial-com/output.txt -S /home/fsnk/scripts/serial-com/serial -o
wait another 5s

Finished: SUCCESS

После сообщения Press CTRL-A Z for help on special keys я ожидаю, что он войдет в системуна доску (без пароля, только пользователь root) и запустите systemctl is-system-running --wait.Все выходные данные должны быть в output.txt

Опять же, это работает так же, как и ожидалось, когда запускается вручную или запускается с моей машины через SSH, но при запуске из Jenkins (Добавлен шаг сборки execute shell, который пытается SSHи запустить скрипт) это не работает.

На данный момент я чувствую, что это мини-проблема, в этом случае, я приветствую любое решение с screen

...