Захват IP-адресов: действия github ищут массив, а не строку

Я работаю над разработкой рабочего процесса развертывания с помощью действий GH. Первое задание создает виртуальные машины, и я использую второе задание для захвата IP-адресов, а затем для передачи этих IP-адресов третьему заданию для исправления.

Второе задание работает хорошо и фиксирует IP-адреса, но в виде одной строки '1.1.1.1 2.2.2.2'. Мне нужны IP-адреса в массиве ['1.1.1.1', '2.2.2.2'], чтобы матричная стратегия в третьем задании работала.

Шаг второй работы следующий:

outputs:
    ip-addresses: ${{ steps.get-ips.outputs.ips }}

- name: Capture Virtual Machine IPs
  id: get-ips
  shell: pwsh
  run: |
      foreach ($i in ${{ github.event.inputs.vmcount }}) {
         $ip=(Get-AzNetworkInterface -ResourceGroupName rg).IpConfigurations.PrivateIpAddress
      }
      Write-Output $ip
      echo "ips=$ip" >> $env:GITHUB_OUTPUT

- name: Output values
  run: |
      echo "Output ${{ steps.get-ips.outputs.ips }}" 

Есть идеи?

$ip.Split(' ') | ConvertTo-Json -Compress должно работать.
Azeem 12.04.2024 06:44
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Второе задание работает хорошо и фиксирует IP-адреса, но в виде одной строки '1.1.1.1 2.2.2.2'. Мне нужны IP-адреса в массиве ['1.1.1.1', '2.2.2.2'], чтобы матричная стратегия в третьем задании работала.

Я согласен с комментарием Азима; вы можете использовать $ip.Split(' ') | ConvertTo-Json -Compress в своем скрипте, чтобы получить IP-адреса в массиве.

Альтернативно вы можете использовать приведенный ниже сценарий, чтобы получить необходимые результаты.

Скрипт:

outputs:
  ip-addresses: ${{ steps.get-ips.outputs.ips }}

- name: Capture Virtual Machine IPs
  id: get-ips
  shell: pwsh
  run: |
    $ips = @()
    foreach ($i in ${{ github.event.inputs.vmcount }}) {
      $ip = (Get-AzNetworkInterface -ResourceGroupName rg).IpConfigurations.PrivateIpAddress
      $ips += $ip
    }
    $json = $ips | ConvertTo-Json -Compress
    Write-Output $json
    echo "ips=$json" >> $env:GITHUB_OUTPUT

- name: Output values
  run: |
    echo "Output ${{ steps.get-ips.outputs.ips }}"

Здесь мы можем создать пустой массив с именем $ips перед запуском цикла. На каждой итерации цикла мы добавляем IP-адрес, полученный из Get-AzNetworkInterface, в массив $ips с помощью оператора +=. После завершения цикла мы выводим массив IP-адресов и сохраняем его в выходной переменной ips.

Выход:

["10.5.0.7","10.5.0.8","10.5.0.9","10.5.0.12","10.5.0.10","10.5.0.6","10.5.0.4","10.5.0.5","10.5.0.15","10.5.0.11","10.5.0.4","10.5.0.16","10.5.0.17","10.5.0.14","10.5.0.13","10.1.0.4"]

Спасибо, Азим и Венкатесан! Я использовал очень похожий подход, который решил мои проблемы. Я просто еще не успел это опубликовать. Это полностью работает. Спасибо за конструктивный вклад!

HBach 15.04.2024 23:28

Другой вопрос: является ли это лучшим способом захвата IP-адресов вновь созданных виртуальных машин, используя группу ресурсов, как указано выше? (Get-AzNetworkInterface -ResourceGroupName rg).IpConfigurations.PrivateIpAddress

HBach 15.04.2024 23:28

Поднимите его с кратким объяснением нового вопроса.

Venkatesan 16.04.2024 05:37

Я создал еще один пост здесь: [stackoverflow.com/questions/78350201/…

HBach 19.04.2024 16:34

Другие вопросы по теме

Похожие вопросы

Почему запуск git fetch в GitHub Actions занимает много времени?
Нужно ли мне выполнять полную инициализацию, включая серверную часть, перед запуском terraform apply для сгенерированного плана?
Запуск неправильного файла в Azure через многофайловый проект ASP .Net рабочего процесса действий Github
Почему на этапе загрузки Codecov в GitHub Actions не находит токен?
Развертывание GCP App Engine с помощью действий GitHub с использованием (предпочтительно) прямой федерации идентификации рабочей нагрузки
Некоторые проблемы с рабочими процессами Github Action и защитой веток
Значение в env prod не работает, проект vite
Как настроить динамически генерируемые URL-адреса перенаправления в AAD для сред предварительной версии?
Как я могу зафиксировать и отправить изменения в репозиторий в одновременных запусках рабочего процесса действий Github?
Подключение к базе данных postgres из функции Azure — сбой при локальной сборке/действиях GH, успешный результат при удаленной сборке cli