如何在我的Jenkins执行程序中运行17.05+ docker?
我遵循了教程:
一切都按照教程中的描述进行。
我有一个(工作)多阶段Dockerfile我试图在Jenkins中构建,但它需要最近的Docker版本(> 17.05)。
我找不到更新此方法......
在我的管道中,如果我运行docker version
,无论我做什么,我总是得到1.13.1:
docker version
Client:
Version: 1.13.1
API version: 1.26
Go version: go1.8.1
Git commit: 092cba3
Built: Wed Aug 30 20:31:05 2017
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Go version: go1.8.1
Git commit: 092cba3
Built: Wed Aug 30 20:31:05 2017
OS/Arch: linux/amd64
Experimental: false
在我应该用作奴隶的容器中,使用docker run -it 'image-name' bash
:
docker version
Client:
Version: 17.11.0-ce
API version: 1.34
Go version: go1.8.3
Git commit: 1caf76c
Built: Mon Nov 20 18:36:37 2017
OS/Arch: linux/amd64
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
在Jenkins
> Configure Jenkins
我设置了0个执行器,只使用了我刚刚推送的图像的1个容器模板(我已经检查过它,它是最新的),选中了“始终拉图像”复选框...
当我将标签设置为Kubernetes Pod Template
(例如docker-edge
)并尝试使用标签限制执行者时:
node('docker-edge')
不会改变任何内容Pipeline Model Definition
> Docker Label
to
docker-edge`让它停滞不前,找不到任何执行者答案 0 :(得分:5)
对于任何阅读本文的人,我们在GKE之上使用多阶段构建,这是这样的:
我们使用docker:dind部署一个pod并使用以下args运行它:
- dockerd
- --storage-driver=overlay2
- -H tcp://0.0.0.0:2375
我们将此pod公开为服务(dind-service
)
base: FROM docker:18-dind
)创建新的pod DOCKER_HOST=tcp://dind-service:2375
。docker build .
在我们的工作中,它使用dind pod的守护程序。如果您在顶级k8上使用Jenkins,我真的建议您阅读(帮助您获得了更好的理解): https://akomljen.com/set-up-a-jenkins-ci-cd-pipeline-with-kubernetes
答案 1 :(得分:3)
我认为您需要等到发布具有此功能的较新Docker版本的GKE版本(我相信多阶段版本已经开始使用16.04或16.10这样的版本)。
答案 2 :(得分:2)
即使使用Kubernetes 1.9.7,我们仍然坚持使用Docker 17.03,它不支持多级构建(17.05中提供)。在我们获得适当的Docker支持之前,您可以使用GCP的Container Builder。
而不是
sh("docker build -t ${imageTagFrontEnd} .")
sh("gcloud docker -- push ${imageTagFrontEnd}")
您可以调用容器构建器并使用
进行推送sh("gcloud container builds submit --tag ${imageTagBackEnd} .")
请记住,对于Container Builder,前120分钟是免费的,然后您会收取一些费用。
不要忘记验证请求,您需要在执行任何操作之前包含服务帐户文件,例如:
sh("gcloud auth activate-service-account --key-file serviceAccountXYZ.json")