我正在尝试使用 Windows 容器作为 ADO 管道中的代理。该镜像是自定义镜像,dockerfile 与将在容器中运行的代码位于同一存储库中。容器主机是自托管的。我的想法是在容器中运行步骤之前构建映像。但这是不可能的,因为在容器初始化之前无法添加任何步骤。构建可以在单独的作业中完成,只要只有一个容器主机,这就可以工作。如果有更多实现这一点的唯一方法是不断从私有容器注册表中推送和拉取。
我是容器新手,目前我没有看到在这种情况下使用注册表有任何优势。而且推和拉的速度也相当慢。这似乎只是 ADO 中缺失功能的解决方法。
有什么方法可以在不使用私人注册表的情况下完成这项工作吗?
如果您使用 Microsoft 提供的云托管代理,则机器会在每个作业后回收以确保构建是确定性的,因此您无法对作业之间的运行时环境做出假设。
由于容器镜像必须存在于本地才能用于容器作业,因此每次都必须下载容器。有几种不同的方法可以重用以前构建的工件:
如果镜像的大小很大,那么使用容器注册表来实现此目的是性能最佳的。通过使用容器注册表,您可以从容器映像层缓存中受益,因此您只需下载映像特有的映像层。在理想的情况下,您只需构建一次容器镜像。
如果您切换到自托管构建代理,您可以在计算机上预先捆绑映像。