[英]How to cache deployment image in gitlab-ci?
我正在创建一个gitlab-ci
部署阶段,它需要比我的图像中现有的库更多的库。 在此示例中,我添加了ssh
(在现实世界中,我想添加更多库):
image: adoptopenjdk/maven-openjdk11
...
deploy:
stage: deploy
script:
- which ssh || (apt-get update -y && apt-get install -y ssh)
- chmod 600 ${SSH_PRIVATE_KEY}
...
问题:我如何告诉 gitlab 运行器缓存我在部署阶段构建的图像,并在未来的所有部署运行中重用它? 因为正如所写的那样,每次部署都会进行库安装,即使运行之间没有任何变化。
GitLab 只能缓存文件/目录,但由于 apt 的工作方式,没有简单的方法告诉它缓存你以这种方式完成的安装。 您也不能“缓存”图像。
我看到有两个选项:
FROM adoptopenjdk/maven-openjdk11
RUN apt update && apt install -y foo bar baz
然后构建/推送镜像到dockerhub,然后更改image:
在yaml:
image: membersound/maven-openjdk11-with-deps:latest
或者简单地选择一个已经具有您想要的所有依赖项的图像。 那里有许多有用的 docker 图片,其中安装了有用的工具。 例如octopusdeploy/worker-tools
附带了许多运行时和安装的工具(java、python、AWS CLI、kubectl 等等)。
将 bash 脚本提交到类似install-deps.sh
的文件
#!/usr/bin/env bash
PACKAGES="wget jq foo bar baz"
if [ ! -d "./.deb_packages" ]; then
apt update && apt --download-only install -y ${PACKAGES}
cp /var/cache/apt/archives/*.deb ./.deb_packages
fi
apt install -y ./.deb_packages/*.deb
这应该会导致 debian 文件被缓存在目录./.deb_packages
中。 然后,您可以配置 gitlab 来缓存它们,以便稍后使用它们。
my_job:
before_script:
- install-deps.sh
script:
- ...
cache:
paths:
- ./.deb_packages
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.