You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bitbucket Pipelines中缓存APT软件包?Gradle+Ansible场景缓存失效

解决Bitbucket Pipelines中APT缓存失效的问题

我之前碰到过好几个类似的场景——用JDK8镜像搭配Gradle+Ansible做CI/CD,Bitbucket默认的APT缓存确实不太靠谱,主要是因为它默认缓存的路径和APT实际存储包的目录不匹配。下面给你调整后的配置,以及详细的解释:

优化后的Pipelines配置

image: java:8
pipelines:
  default:
    - step:
        caches:
          - gradle
          - apt-cache  # 自定义APT缓存,指向实际的包存储目录
        script:
          # 1. 添加Ansible PPA源和密钥(这一步每次都需要,但包会被缓存)
          - 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
          # 2. 更新APT索引(如果缓存存在,这一步会快很多)
          - apt-get update
          # 3. 安装Ansible,优先使用本地缓存的包
          - apt-get install -y --no-install-recommends ansible
          # 4. 执行你的Gradle构建和Ansible部署步骤
          - ./gradlew build
          - ansible-playbook your-deploy-playbook.yml
# 定义自定义APT缓存的路径
definitions:
  caches:
    apt-cache: /var/cache/apt/archives

关键调整说明

  • 自定义APT缓存路径:Bitbucket默认的apt缓存并没有指向APT真正存储下载包的/var/cache/apt/archives目录,所以我们需要手动定义一个apt-cache缓存,指向这个路径,这样下载过的Ansible包就会被缓存下来,下次运行时无需重新下载。
  • 精简安装命令:添加--no-install-recommends可以避免安装Ansible的非必需依赖,减少下载量和安装时间。
  • 密钥补全:你之前的key...需要补全为Ansible PPA的官方密钥(93C4A3FD7BB9C367),否则会出现密钥验证失败的问题。

额外注意事项

  • 因为java:8镜像是基于Debian的,Ubuntu的PPA源可能存在兼容性问题,如果后续出现依赖报错,可以换成Debian官方的Ansible源:
    echo 'deb http://deb.debian.org/debian buster-backports main' >> /etc/apt/sources.list
    
    然后安装时指定从backports获取:apt-get install -y -t buster-backports ansible
  • Gradle缓存默认已经配置正确,Bitbucket会自动缓存~/.gradle目录,所以构建依赖会被正常缓存。

内容的提问来源于stack exchange,提问作者opticyclic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:20:18