Я хотел бы записать вывод журнала выполнения команды в терминале в файл. Я хочу, чтобы вывод журнала сохранялся независимо от того, произошла ли команда с ошибкой или нет. Это должно работать для любой команды в CLI (Iam using ubuntu-latest for github actions) некоторый пример кода в app.js
for(var i=0;i<5;i++){
console.info(i);
}
Следующая команда работает хорошо
nohup node node-app/src/app.js &> logs.txt
Но когда возникает ошибка (я добавляю y, чтобы вызвать ошибку)
for(var i=0;i<5;i++){
console.info(i*y); //here is an error
}
Приведенная выше команда терминала не работает, и job заканчивается кодом выхода 1.
Вот мой рабочий процесс
name: Send Job Logs to mail
on:
push:
branches:
- main
jobs:
send_email:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- id: logsData
run: |
nohup node node-app/src/app.js &> logs.txt
cat logs.txt
echo "logdata<<EOF" >> $GITHUB_ENV
echo "$(tail -n +2 logs.txt)" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Send log output to email
uses: dawidd6/action-send-mail@v3
with:
server_address: smtp.gmail.com
server_port: 25
username: ${{secrets.EMAIL_ADD}}
password: ${{secrets.PSW_EMAIL}}
from: john Delvin
to: myOtherEmail@gmail.com
subject: job-logs
body: ${{env.logdata}}
Y несет ответственность за ошибку. Я добавил это сознательно
Так что запускайте свои команды под контролем script ...
@JohnDelvin: Пожалуйста, включите в свой вопрос минимальный воспроизводимый рабочий процесс ГСГ. Спасибо!
@JohnDelvin: опубликованный ответ не работает для вашего варианта использования? Какое поведение сейчас?
@Azeem, ответ, предоставленный @Sibtain, предотвращает сбой задания рабочего процесса на шаге с - id : logsData, когда возникает ошибка, шаг пропускается, а затем запускается следующий шаг, который завершается успешно.
@ Азим это сработало. Спасибо.
@JohnDelvin: Круто! Пожалуйста! Ответ с опубликованными подробностями. Ваше здоровье!
Вы можете использовать continue-on-error: true в своем шаге/работе, например:
- id: logsData
continue-on-error: true
run: nohup node app.js &> logs.txt
- name: output log file
run: cat logs.txt
Обновление с демо-выполнением:
Мне нужно сохранить вывод журнала в файл независимо от того, произошла ошибка или нет. Ваш ответ работает, но журнал не сохраняется. Спасибо
Файл журнала сохранен и доступен. Вы можете использовать его на следующем шаге, который не упоминался в исходном вопросе. Смотрите мое обновление
Это сработало . Это тоже намного чище
Поскольку ваш вариант использования требует, чтобы вы запускали остальные команды в случае сбоя, вам нужно использовать что-то вроде этого с оператором ИЛИ (||):
nohup node node-app/src/app.js &> logs.txt || true
Это вернет true, если команда завершится ошибкой, и остальная часть потока должна работать.
Использование continue-on-error: true делает шаг пройденным, но сразу же останавливает выполнение, а остальная часть потока пропускается.
Где у инициализируется?