#bash #gradle #github-actions
#bash #gradle #github-действия
Вопрос:
У меня есть задание, подобное приведенному ниже, которое выполняется на ubuntu-latest
:
- name: Run Gradle
id: run_gradle
run: |
echo "::set-output name=JOB::$(gradle run)n"
- name: Test output
run: echo "${{ steps.run_gradle.outputs.JOB }}"
Это запускает задачу Gradle, которая выводит тысячи отдельных строк на консоль. Как я могу захватить все выходные данные из step run_gradle
? Моей следующей целью было бы передать эти строки в другой рабочий процесс для анализа и выбора соответствующих строк для последующего анализа.
В качестве теста я попытался просто захватить и повторно распечатать выходные данные run_gradle
на следующем шаге Test output
. Однако этот шаг run: echo "${{ steps.run_match.outputs.JOB }}"
просто возвращается echo ""
.
Кроме того, при попытке выполнить этот шаг ниже:
- name: Test output
run: |
while read -r LINE; do
$LINE
echo "$LINE"
# do_something_with_it
done < <(${{ steps.run_gradle.outputs.JOB }})
Я получаю следующую ошибку от действий GitHub:
Run while read -r LINE; do
while read -r LINE; do
$LINE
echo "$LINE"
# do_something_with_it
done < <()
shell: /bin/bash -e {0}
env:
JAVA_HOME_8.0.275_x64: /opt/hostedtoolcache/jdk/8.0.275/x64
JAVA_HOME: /opt/hostedtoolcache/jdk/8.0.275/x64
JAVA_HOME_8_0_275_X64: /opt/hostedtoolcache/jdk/8.0.275/x64
/home/runner/work/_temp/214ad176-0c5e-4903-a0b3-58969be12e44.sh: line 5: <(): ambiguous redirect
Для меня это означает, что set-output:JOB
не работает для преобразования выходных данных в переменную.
Ответ №1:
Он просто печатает строки, потому что вы вызываете echo
, а не саму команду.
Вы можете вызвать его с помощью:
run: ${{ steps.run_gradle.outputs.JOB }}
Но все они выполняются одновременно, как один большой cmd. Таким образом, более предпочтительным способом было бы. Поместите выходные данные в файл, а затем выполните построчно.
- name: Gradle
run: |
gradle run >/tmp/gradle.out
- name: Test
run: |
while read -r LINE; do
$LINE
# do_something_with_it
done < /tmp/gradle.out
кстати, у вас опечатка steps.run_match
вместо steps.run_gradle
in summary, это может объяснить пустой вывод, если это так.
Комментарии:
1. Спасибо за вашу помощь — к сожалению, я попробовал ваше решение безрезультатно. Я отредактировал свой вопрос, чтобы продемонстрировать. Также спасибо, что указали на опечатку — я исправил это на SO.
2. Хорошо, я вижу, что может возникнуть проблема с настройкой, возможно, она слишком длинная. Я не знаю реального результата. Но я отредактировал свой ответ, чтобы использовать временный файл, который должен работать нормально, если вы не настаиваете на переменной.