我在Kubernetes集群上使用GitLab Runner来运行CI作业。我想让构建工作运行得更快。
为了使它们更快,我重用了以前构建的Docker映像(标记为latest
)。构建时间已经减少,但是现在的瓶颈是pull
命令,它占用了大约60-70%的时间。
这里是.gitlab-ci.yml
的片段
build:sheets:
stage: build
image: docker:stable
services:
- docker:dind
before_script:
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" "$CI_REGISTRY" --password-stdin
script:
- docker pull $SHEETS_LATEST || true
- docker build --cache-from $SHEETS_LATEST --tag $SHEETS_TAG --tag $SHEETS_LATEST .
- docker push $SHEETS_TAG
- docker push $SHEETS_LATEST
我使用Gitlab,因此pull
命令需要集群和注册表之间的大量通信。
我有几个问题要问:
发布于 2019-05-24 03:04:43
在管道中快速生成码头图像有几种方法。
在这里,您必须在构建容器中挂载主机的/var/lib/docker.sock。它是脆弱的。但还是太快了。
在这里,您可以使用dind映像,它具有docker和守护进程。它不与主机的停靠守护进程通信。整个构建过程将发生在吊舱内。不是100%安全,而是更快。
这些都是无守护进程的下一代映像构建工具,它不依赖于Docker守护进程。比DOOD和DIND更安全,也更快,并且支持缓存。
发布于 2019-05-24 02:40:27
您可以通过将持久卷挂载到/var/lib/docker内运行带有Docker守护进程的专用pod。之后,您将使用命名为"docker“的服务来公开这个吊舱。之后,在CI作业中定义环境变量"DOCKER_HOST=tcp://docker“。
这样,所有的构建和映像都存储在运行在专用荚中的Docker守护进程中。您不会浪费时间拉图像,而且您的构建运行更快,因为Docker构建缓存。
只需记住,监测磁盘空间的使用在持久卷和触发“对接系统修剪”定期。
发布于 2019-06-04 06:50:33
Gitlab共享运行程序没有您以前的映像(正如您注意到的)。所以你的选择要么像你正在做的那样拉着它,要么和你自己的跑步者一起去。上一次我查看的时候,您可以在gitlab kubernetes集成页面上安装kubernetes运行程序,所以我不得不部署自己的运行程序。
下面是一个部署,它创建4个运行程序(todo:找出自动标度)并将它们注册为postStart事件。您需要从您的项目或组(cd)的设置/cicd页面获取注册令牌。您将不得不从同一页面禁用共享运行程序。
kind: Deployment
metadata:
name: gitlabrunner
labels:
app: gitlabrunner
spec:
replicas: 4
selector:
matchLabels:
app: gitlabrunner
template:
metadata:
labels:
app: gitlabrunner
name: gitlabrunner
spec:
containers:
- name: gitlabrunner
image: gitlab/gitlab-runner
volumeMounts:
- name: dockersock
mountPath: "/var/run/docker.sock"
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "gitlab-runner register -n --url https://gitlab.com/ --registration-token [YOUR_REGISTRATION_TOKEN] --executor docker --description 'My Docker Runner' --docker-image 'docker:stable' --docker-volumes /var/run/docker.sock:/var/run/docker.sock"]
volumes:
- name: dockersock
hostPath:
path: /var/run/docker.sock
https://stackoverflow.com/questions/56285802
复制相似问题