出于简单性原因,我想知道是否有可能在本地创建Azure DevOps自托管代理,从而重现云托管代理的所有功能。我需要使用自托管代理,但不想为其上的每个应用程序创建安装和升级脚本。
我会想像有一个VM映像,其中预安装了所有工具。可能与Azure DevOps中的相同。这可能会带来100%兼容性的好处。
到目前为止我发现了什么
如何创建“完美的Azure DevOps代理”?
答案 0 :(得分:1)
如何创建“完美的Azure DevOps代理”?
我和您以前有相同的要求,我同意您的观点2和3。
但是,因为我不太了解Docker技术,并且需要经常维护我的Docker环境,所以我选择使用打包程序来构建我的映像。
您可以在下面的详细文档中查看更多详细信息:
答案 1 :(得分:0)
看起来我们在同一个兔子洞里。我从与您发布的相同问题开始,看起来您已经找到了答案 - 在本地或 Azure 上设置 VM,您就可以开始了。 “Leo Liu”回答中的链接可能是一个很好的起点。但是 - 虚拟机不是 Docker,这不能回答您更广泛的问题。
如果问题被改写为“为什么 Microsoft 不提供一种在 docker 容器中设置自托管代理的简单方法?”我相信答案在于他们的商业模式。本地 VM 需要 Windows 许可证,Azure VM 按小时计费...
但是,撇开阴谋论不谈,我认为没有一种简单的方法可以设置云托管代理的 dockerised 版本。这可能也不是一个好主意。 Docker 容器本来就应该很小,并且由于对这些代理的所有依赖,它们绝非小事。正如您所说,它也永远不会“完美”,因为 dockerized 窗口与其云托管 VM 中运行的窗口不同。
我已经开始尝试一些不完美但可能有用的东西:
COPY
和RUN
脚本docker build
像往常一样,您应该有一个功能更强大的容器和一个以与云代理类似的方式报告其功能的代理在理想的世界中,会有一个包含所有 tweeked 脚本的存储库,以及一个保持它们更新的社区。在一个更理想的世界里,那就是微软托管的存储库,但就像我说的——这可能不太可能。
这是一些帮助您入门的代码。也许我会在未来的某个地方发布更完整的版本。
init.ps1 有一些从 here 中借用的行:
Write-Host "Install chocolatey"
$chocoExePath = 'C:\ProgramData\Chocolatey\bin'
if ($($env:Path).ToLower().Contains($($chocoExePath).ToLower())) {
Write-Host "Chocolatey found in PATH, skipping install..."
Exit
}
$systemPath = [Environment]::GetEnvironmentVariable('Path', [System.EnvironmentVariableTarget]::Machine)
$systemPath += ';' + $chocoExePath
[Environment]::SetEnvironmentVariable("PATH", $systemPath, [System.EnvironmentVariableTarget]::Machine)
$userPath = [Environment]::GetEnvironmentVariable('Path', [System.EnvironmentVariableTarget]::User)
if ($userPath) {
$env:Path = $systemPath + ";" + $userPath
}
else {
$env:Path = $systemPath
}
Invoke-Expression ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
choco feature enable -n allowGlobalConfirmation
Remove-Item -Path $env:ChocolateyInstall\bin\cpack.exe -Force
Import-Module "$env:ChocolateyInstall\helpers\chocolateyInstaller.psm1" -Force
Get-ToolsLocation
从 Microsoft 文档中修改的 Dockerfile,它也在构建时运行脚本:
FROM mcr.microsoft.com/windows/servercore:ltsc2019
COPY init.ps1 /Windows/Temp/init.ps1
RUN powershell -executionpolicy bypass C:\Windows\Temp\init.ps1
WORKDIR /azp
COPY start.ps1 .
CMD powershell .\start.ps1