我计划在 Kubernetes pod 中运行的动态 Jenkins 代理中构建 Docker EE 映像,因此需要
- 提供 Jenkins 代理功能和 Docker 的 Docker 映像。目前我正在使用
jenkins/jnlp-agent:latest-windows
作为映像在 Windows LTSC 节点池上运行,该节点池似乎充分提供了 Jenkins 代理功能或 一种扩展方式,
jenkins/jnlp-agent:latest-windows
以便它也允许运行 Docker。我幼稚的做法FROM jenkins/jnlp-agent:latest-windows SHELL ["powershell", "-Command", "$ErrorActionPreference = 'SilentlyContinue'; $ProgressPreference = 'SilentlyContinue';"] USER ContainerAdministrator COPY install-docker.ps1 . RUN ./install-docker.ps1 RUN Remove-Item install-docker.ps1
含
install-docker.ps1
_Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -ErrorAction Continue Install-Module -Name DockerMsftProvider -Repository PSGallery -Force -ErrorAction Continue Install-Package -Force -ErrorAction Continue -Name docker -ProviderName DockerMsftProvider
> Start-Service Docker Start-Service : Failed to start service 'Docker Engine (Docker)'. At line:1 char:1 + Start-Service Docker + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service], ServiceCommandException + FullyQualifiedErrorId : StartServiceFailed,Microsoft.PowerShell.Commands.StartServiceCommand
或者
Windows 上用于 Docker EE 的 Docker-in-Docker 容器,它公开 Docker TCP 套接字并允许 Jenkins 代理容器连接到它。
该设置应在 Google Kubernetes Engine 提供的 Windows Server 2019 节点池上运行。我知道 Windows 池目前是测试版。
如果有人知道如何让第二种方法工作,仍然需要以用户 jenkins 而不是容器管理员的身份运行设置以提高安全性。