Я работаю над разработкой рабочего процесса развертывания с помощью действий 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-адреса, но в виде одной строки
'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"]
Спасибо, Азим и Венкатесан! Я использовал очень похожий подход, который решил мои проблемы. Я просто еще не успел это опубликовать. Это полностью работает. Спасибо за конструктивный вклад!
Другой вопрос: является ли это лучшим способом захвата IP-адресов вновь созданных виртуальных машин, используя группу ресурсов, как указано выше? (Get-AzNetworkInterface -ResourceGroupName rg).IpConfigurations.PrivateIpAddress
Поднимите его с кратким объяснением нового вопроса.
Я создал еще один пост здесь: [stackoverflow.com/questions/78350201/…
$ip.Split(' ') | ConvertTo-Json -Compress
должно работать.