繁体   English   中英

Azure DevOps 自托管代理 - 如何复制云托管代理?

[英]Azure DevOps Self-Hosted Agent - How to replicate cloud-hosted agents?

我想知道,为了简单起见,是否可以在本地创建 Azure DevOps 自托管代理,重现云托管代理的所有功能。 我需要使用自托管代理,但不想为它们上的每个应用程序创建安装和升级脚本。

我想有一个像预装了所有工具的 VM 映像; 可能与 Azure DevOps 中的相同。 这可能具有 100% 兼容性的好处。

到目前为止我发现了什么:

如何创建“完美的 Azure DevOps 代理”?

如何创建“完美的 Azure DevOps 代理”?

我之前和你有同样的要求,我同意你的观点2和3。

但是因为我对docker技术不是很精通,需要经常维护我的docker环境,所以我选择使用packer来构建我的镜像。

您可以查看以下很棒的文档以获取更多详细信息:

构建您自己的托管 VSTS 代理云:第 1 部分 - 构建

构建您自己的托管 VSTS 代理云:第 2 部分 - 部署

看起来我们在同一个兔子洞里。 我从与您发布的相同问题开始,看起来您已经找到了答案 - 在本地或 Azure 上设置 VM,您就可以开始了。 “Leo Liu”回答中的链接可能是一个很好的起点。 但是 - 虚拟机不是 Docker,这不能回答您更广泛的问题。

如果问题被改写为“为什么 Microsoft 不提供一种在 docker 容器中设置自托管代理的简单方法?” 我相信答案在于他们的商业模式。 本地 VM 需要 Windows 许可证,Azure VM 按小时计费...

但是,撇开阴谋论不谈,我认为没有一种简单的方法可以设置云托管代理的 dockerised 版本。 这可能也不是一个好主意。 Docker 容器本来就应该很小,并且由于对这些代理的所有依赖,它们绝非小事。 正如您所说,它也永远不会“完美”,因为 dockerized 窗口与其云托管 VM 中运行的窗口不同。

我已经开始调整一些不完美但可能有效的东西:

  • 根据此处的文档设置 docker-agent
  • 此处添加与您需要的软件包相对应的 PS 脚本中的精华
  • 将命令添加到 Dockerfile 以COPYRUN脚本
  • docker build像往常一样,你应该有一个更强大的容器和一个以类似于云代理的方式报告其功能的代理

在理想的世界中,会有一个包含所有 tweeked 脚本的存储库,以及一个保持它们更新的社区。 在一个更理想的世界中,它将是 Microsoft 托管的存储库,但就像我说的那样 - 这可能不太可能。

这是一些帮助您入门的代码。 也许我会在未来的某个地方发布一个更完整的版本。

init.ps1 从这里借用了一些行:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM