我创建了一个 Azure DevOps 任务组来在 Azure(Azure 容器实例)上创建一个 selenium 容器,如下所示:
脚本:
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\wU\s>ipAddress="$(az 容器创建 \ “ipAddress”不被识别为内部或外部命令, 可运行的程序或批处理文件。
F:\Agent03\wU\s>-g myresourcegroup \ “-g”不被识别为内部或外部命令, 可运行的程序或批处理文件。
F:\Agent03\wU\s>--名称 temp-1807-build-385769 \ '--name' 不被识别为内部或外部命令, 可运行的程序或批处理文件。
F:\Agent03\wU\s>--image mycontainerregistry.azurecr.io/selenium/standalone-chrome \ “--image”不被识别为内部或外部命令, 可运行的程序或批处理文件。
F:\Agent03\wU\s>--CPU 2 \ “--cpu”不被识别为内部或外部命令, 可运行的程序或批处理文件。
F:\Agent03\wU\s>--内存4 \ '--memory' 不被识别为内部或外部命令, 可运行的程序或批处理文件。 “--os-type”不被识别为内部或外部命令, 可运行的程序或批处理文件。
F:\Agent03\wU\s>--操作系统类型 Linux \
F:\Agent03\wU\s>--端口 4444 \ “--ports”不被识别为内部或外部命令, 可运行的程序或批处理文件。
F:\Agent03\wU\s>--vnet ..... \ “--vnet”不被识别为内部或外部命令, 可运行的程序或批处理文件。
F:\Agent03\wU\s>--子网....\ “--subnet”不被识别为内部或外部命令, 可运行的程序或批处理文件。
F:\Agent03\wU\s>--注册表用户名 myregistryusername \ “--registry-username”不被识别为内部或外部命令, 可运行的程序或批处理文件。
F:\Agent03\wU\s>--注册表密码 *** \ “--registry-password”不被识别为内部或外部命令, 可运行的程序或批处理文件。
F:\Agent03\wU\s>--环境变量\ “--environment-variables”不被识别为内部或外部命令, 可运行的程序或批处理文件。
F:\Agent03\wU\s>NODE_MAX_SESSION=10 \ “NODE_MAX_SESSION”不被识别为内部或外部命令, 可运行的程序或批处理文件。
F:\Agent03\wU\s>浏览器=$(浏览器)\ “浏览器”不被识别为内部或外部命令, 可运行的程序或批处理文件。
F:\Agent03\wU\s>--查询 'ipAddress.ip' -o tsv)" “--query”不被识别为内部或外部命令, 可运行的程序或批处理文件。
我错过了什么?如何使其同时适用于 Windows 和 Linux?
我现在可以使用 2 个任务使其与 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
一些注意事项:
\
字符已替换为 ^
--query 'ipAddress.ip'
),但在 Windows 上我必须使用双引号 (--query "ipAddress.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)创建不同版本的任务:
要根据构建代理的操作系统运行这些任务,您可以设置自定义条件:
因此,要在 Windows 构建代理上运行任务,您可以设置此自定义条件:
and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
要在 Linux 构建代理上运行它:
and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
PS:
Agent.OS
可以在构建代理功能上找到