繁体   English   中英

如何在 gitlab-ci 中缓存部署镜像?

[英]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 的工作方式,没有简单的方法告诉它缓存你以这种方式完成的安装。 您也不能“缓存”图像。

我看到有两个选项:

  1. 创建或使用已包含您的依赖项的 docker 图像。
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 等等)。

  1. 尝试缓存 deb 包并从 deb 包安装。 (注意这是丑陋的)

将 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM