使用下面的 Dockerfile 创建了 Jenkins 代理构建套件的映像。
FROM jenkins/inbound-agent:alpine as jnlp
FROM moby/buildkit as buildkit
USER root
RUN apk update \
&& apk upgrade \
&& apk add --update openjdk11 tzdata curl unzip bash \
&& rm -rf /var/cache/apk/*
COPY --from=jnlp /usr/local/bin/jenkins-agent /usr/local/bin/jenkins-agent
COPY --from=jnlp /usr/share/jenkins/agent.jar /usr/share/jenkins/agent.jar
ENTRYPOINT ["/usr/local/bin/jenkins-agent"]
该镜像作为 Kubernetes Pod 正常运行。 但是,当我尝试在 pod 中使用 buildkit 构建映像时,会发生错误。 我不知道问题是什么。
+ buildctl build --frontend dockerfile.v0 --local 'context=.' --local 'dockerfile=.' --output 'type=image,name=docker.io/username/image'
error: listing workers for Build: failed to list workers: Unavailable: connection error: desc = "transport: error while dialing: dial unix /run/buildkit/buildkitd.sock: connect: no such file or directory"
执行上述命令时,出现以下错误。
buildkit 已在 Jenkins helm 图表中注册,如下所示。
builkit:
podName: buildkit
customJenkinsLabels: buildkit
image: "agent-buildkit"
tag: "1.0"
alwaysPullImage: true
ENTRYPOINT
在你的 dockerfile 中运行 jenkins-agent
但对 buildkit 不执行任何操作。您需要检查原始 ENTRYPOINT
图像中的 moby/buildkit
是什么,并创建一个可以执行这两项操作的自定义脚本:
buildkit
守护进程jenkins-agent
当你的 docker 镜像中有多个进程时,这并不理想,因此最好在脚本中添加子管理(使用 trap 捕获信号并正常关闭 jenkins 和 buildkit)。