如何在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源:
然后安装时指定从backports获取:echo 'deb http://deb.debian.org/debian buster-backports main' >> /etc/apt/sources.listapt-get install -y -t buster-backports ansible - Gradle缓存默认已经配置正确,Bitbucket会自动缓存
~/.gradle目录,所以构建依赖会被正常缓存。
内容的提问来源于stack exchange,提问作者opticyclic
相关产品推荐
相关产品推荐

