Задача CLI Azure не работает на агентах сборки Windows - PullRequest
0 голосов
/ 25 июня 2019

Я создал группу задач Azure DevOps для создания контейнера селена в Azure (экземпляр контейнера Azure) следующим образом:

Azure container task group

Сценарий:

ipAddress="$(az container create  \
-g $(resourceGroup) \
--name temp-$(ContainerName) \
--image myregistry.azurecr.io/selenium/standalone-chrome \
--cpu 2 \
--memory 4 \
--os-type Linux \
--ports 4444 \
--vnet $(VNet)
--subnet $(Subnet)
--registry-username $(registryUsername) \
--registry-password $(registryPassword) \
--environment-variables \
NODE_MAX_SESSION=10 \
Browser=$(Browser) \
--query 'ipAddress.ip' -o tsv)"

echo "##vso[task.setvariable variable=$(SeleniumHubVariable);]http://$ipAddress:4444/wd/hub/"

Эта задача успешно выполняется при запуске на агенте сборки Linux.

Когда я пытаюсь запустить его на агенте сборки Windows, задача не завершается ошибкой, но контейнер не создается. Вывод задачи следующий:

F: \ Agent03 \ w \ 125 \ s> ipAddress = "$ (создание контейнера az \ «ipAddress» не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

F: \ Agent03 \ w \ 125 \ s> -g myresourcegroup \ «-g» не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

F: \ Agent03 \ w \ 125 \ s> - имя temp-1807-build-385769 \ '--name' не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

F: \ Agent03 \ w \ 125 \ s> - изображение mycontainerregistry.azurecr.io/selenium/standalone-chrome \ «--image» не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

F: \ Agent03 \ w \ 125 \ s> - процессор 2 \ «--cpu» не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

F: \ Agent03 \ w \ 125 \ s> - память 4 \ «--memory» не распознается как внутренняя или внешняя команда, работоспособная программа или командный файл. «--os-type» не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

F: \ Agent03 \ w \ 125 \ s> - Linux типа os \

F: \ Agent03 \ w \ 125 \ s> - порты 4444 \ «--ports» не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

F: \ Agent03 \ w \ 125 \ s> - vnet ..... \ «--vnet» не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

F: \ Agent03 \ w \ 125 \ s> - подсеть .... \ «--subnet» не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

F: \ Agent03 \ w \ 125 \ s> - имя пользователя реестра myregistryusername \ «--registry-username» не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

F: \ Agent03 \ w \ 125 \ s> - пароль реестра *** \ «--registry-пароль» не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

F: \ Agent03 \ w \ 125 \ s> - переменные среды \ «--environment-variable» не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

F: \ Agent03 \ w \ 125 \ s> NODE_MAX_SESSION = 10 \ NODE_MAX_SESSION не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

F: \ Agent03 \ w \ 125 \ s> Browser = $ (Browser) \ «Браузер» не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

F: \ Agent03 \ w \ 125 \ s> - запрос 'ipAddress.ip' -o tsv) " «--query» не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

Что мне не хватает? Как я могу заставить его работать как для Windows, так и для Linux?

1 Ответ

2 голосов
/ 26 июня 2019

Теперь я могу заставить его работать с агентами Windows, используя 2 задачи.

Задача 1 (Azure CLI) - создайте экземпляр контейнера и выведите команду (IP-адрес) в файл

Create container instance (Windows)

Сценарий:

az container create ^
-g $(resourceGroup) ^
--name temp-$(ContainerName) ^
--image myregistry.azurecr.io/selenium/standalone-chrome ^
--cpu 2 ^
--memory 4 ^
--os-type Linux ^
--ports 4444 ^
--vnet $(VNet)
--subnet $(Subnet)
--registry-username $(registryUsername) ^
--registry-password $(registryPassword) ^
--environment-variables ^
NODE_MAX_SESSION=10 ^
Browser=$(Browser) ^
--query "ipAddress.ip" -o tsv>tmpFile-$(ContainerName).txt

Некоторые заметки:

  • \ символов были заменены на ^
  • Одинарные кавычки прекрасно работают в Linux (--query 'ipAddress.ip'), но в Windows мне пришлось использовать двойные кавычки (--query "ipAddress.ip")

Задача 2 (Powershell) - считывание IP-адреса из файла и установка переменной среды

$ipAddress = [IO.File]::ReadAllText("tmpFile-$(ContainerName).txt")

Write-Host "Selenium hub URL is http://$($ipAddress.Trim()):4444/wd/hub/"
Write-Host "##vso[task.setvariable variable=$(SeleniumHubVariable);]http://$($ipAddress.Trim()):4444/wd/hub/"

Установка пользовательских условий для задач

К сожалению, мне пришлось создавать разные версии задач для каждой ОС (Windows или Linux):

Task list

Для запуска этих задач в зависимости от ОС агента сборки вы можете установить пользовательские условия:

Custom conditions

Итак, чтобы запустить задачу в агенте сборки Windows, вы можете установить это пользовательское условие:

and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))

Чтобы запустить его на агенте сборки Linux:

and(succeeded(), eq(variables['Agent.OS'], 'Linux'))

PS: Agent.OS можно найти в возможностях агента сборки

...