如何在Bitbucket Pipelines中缓存APT包?

opt*_*lic 7 apt docker bitbucket-pipelines

我正在尝试使用 gradle、jdk 8 构建一个项目并使用 ansible 进行部署。

我找不到包含所有这些的最新 docker 映像,因此我正在即时安装 ansible。

据称 Bitbucket 管道能够创建自定义缓存,但它似乎没有缓存 apt 目录

image: java:8

pipelines:
  default:
    - step:
        caches:
          - gradle
          - apt
        script:
          - echo 'deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main' >> /etc/apt/sources.list
          - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
          - apt-get update && apt-get install -y ansible
          - bash ./gradlew clean bootJar
definitions:
  caches:
    apt: /var/cache/apt/archives
Run Code Online (Sandbox Code Playgroud)

结果是

Dependency caches
gradle: ~/.gradle/caches        158.37 MB   06 Apr 2018 
apt:    /var/cache/apt/archives 151 Bytes   06 Apr 2018 
Run Code Online (Sandbox Code Playgroud)

编辑:我添加了一个步骤来列出目录,不仅那里什么都没有,我在整个系统上找不到任何 deb 文件

find /var/cache/
<1s
+ find /var/cache/
/var/cache/
/var/cache/apt
/var/cache/apt/archives
/var/cache/apt/archives/partial
/var/cache/apt/archives/lock
/var/cache/ldconfig
/var/cache/ldconfig/aux-cache
/var/cache/debconf
/var/cache/debconf/templates.dat
/var/cache/debconf/config.dat-old
/var/cache/debconf/config.dat
/var/cache/debconf/templates.dat-old
/var/cache/debconf/passwords.dat
/var/cache/fontconfig
/var/cache/fontconfig/d589a48862398ed80a3d6066f4f56f4c-le64.cache-4
/var/cache/fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-le64.cache-4
/var/cache/fontconfig/3830d5c3ddfd5cd38a049b759396e72e-le64.cache-4
/var/cache/fontconfig/CACHEDIR.TAG
/var/cache/fontconfig/4c599c202bc5c08e2d34565a40eac3b2-le64.cache-4
find / -name "*.deb"
<1s
+ find / -name "*.deb"
Run Code Online (Sandbox Code Playgroud)

Eli*_*tto 5

在基于 Ubuntu 的 docker 镜像中,通常有一个 apt hook 可在安装后删除软件包。它位于/etc/apt/apt.conf.d/

在 中ubuntu:19.04,包含该钩子的文件被称为docker-clean. 如果删除它,您将能够找到在/var/cache/apt/archives.

因此,只需在管道的开头添加以下内容就可以让您的apt缓存按预期工作:

rm /etc/apt/apt.conf.d/docker-clean
Run Code Online (Sandbox Code Playgroud)