Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 如何在gitlab ci中缓存部署映像?_Docker_Continuous Integration_Gitlab_Gitlab Ci - Fatal编程技术网

Docker 如何在gitlab ci中缓存部署映像?

Docker 如何在gitlab ci中缓存部署映像?,docker,continuous-integration,gitlab,gitlab-ci,Docker,Continuous Integration,Gitlab,Gitlab Ci,我正在创建一个gitlab ci部署阶段,它需要比映像中现有库更多的库。在本例中,我添加了ssh(在现实世界中,我想添加更多的lib): 问题:我如何告诉gitlab runner缓存我在部署阶段构建的映像,并在将来的所有部署运行中重用它?因为如前所述,每次部署都会进行库安装,即使在运行之间没有任何更改。GitLab只能缓存文件/目录,但由于apt的工作方式,没有简单的方法告诉它缓存您这样做的安装。您也不能“缓存”图像 我看到了两种选择: 创建或使用已包含依赖项的docker映像 然后构建/推送

我正在创建一个
gitlab ci
部署阶段,它需要比映像中现有库更多的库。在本例中,我添加了
ssh
(在现实世界中,我想添加更多的lib):


问题:我如何告诉gitlab runner缓存我在部署阶段构建的映像,并在将来的所有部署运行中重用它?因为如前所述,每次部署都会进行库安装,即使在运行之间没有任何更改。

GitLab只能缓存文件/目录,但由于apt的工作方式,没有简单的方法告诉它缓存您这样做的安装。您也不能“缓存”图像

我看到了两种选择:

  • 创建或使用已包含依赖项的docker映像
  • 然后构建/推送图像到dockerhub,然后更改yaml中的
    图像:

    image:membersound/maven-openjdk11-with-deps:latest
    
    或者简单地选择一个已经具有您想要的所有依赖项的图像!有许多有用的docker图像,并安装了有用的工具。例如,安装了许多运行时和工具(java、python、AWS CLI、kubectl等)

  • 尝试缓存deb包并从deb包安装。(当心这太难看了)
  • 将bash脚本提交到类似
    install deps.sh

    #/usr/bin/env bash
    PACKAGES=“wget jq foo bar baz”
    如果[!-d./.deb_包];然后
    apt更新&&apt--仅下载安装-y${PACKAGES}
    cp/var/cache/apt/archives/*.deb./.deb_包
    fi
    apt安装-y./.deb_软件包/*.deb
    
    这将导致debian文件缓存在目录
    /.deb\u packages
    中。然后,您可以将gitlab配置为缓存它们,以便以后可以使用它们

    我的工作:
    在脚本之前:
    -安装-deps.sh
    脚本:
    -  ...
    隐藏物:
    路径:
    -./.deb_包
    
    image: adoptopenjdk/maven-openjdk11
    ...
    
    deploy:
      stage: deploy
      script:
        - which ssh || (apt-get update -y && apt-get install -y ssh)
        - chmod 600 ${SSH_PRIVATE_KEY}
        ...
    
    FROM adoptopenjdk/maven-openjdk11
    RUN apt update && apt install -y foo bar baz