Действия GitHub: захват нескольких строк консоли из команды Gradle

#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. Хорошо, я вижу, что может возникнуть проблема с настройкой, возможно, она слишком длинная. Я не знаю реального результата. Но я отредактировал свой ответ, чтобы использовать временный файл, который должен работать нормально, если вы не настаиваете на переменной.