Bitbucket流水线突然报Unable to locate package php7.2错误是什么原因?
问题原因说明
- PPA签名密钥过期
atlassian/default-image:2内置的ondrej PPA签名密钥已过期,执行add-apt-repository -y ppa:ondrej/php后,后续apt-get update会因密钥校验失败跳过该PPA的源列表更新,系统未加载该PPA的包索引,因此找不到php7.2相关包。该问题是近期ondrej PPA统一轮换签名密钥导致,此前旧密钥未失效时可以正常使用。 - 底层系统版本停止支持
atlassian/default-image:2底层基于Ubuntu 16.04(Xenial),该系统版本已结束官方生命周期,ondrej/php PPA早已停止对Ubuntu 16.04的包构建支持,此前能正常安装是因为PPA服务器留存了旧的构建包,近期服务器清理旧版本归档后相关包被下架。 - apt缓存异常
如果你开启了Bitbucket Pipeline的apt缓存,缓存的源列表已过时,未同步到PPA的最新包索引,也会触发找不到包的报错。
修复方案
临时修复
在添加PPA前先更新签名密钥,修改对应step的script部分如下:
script: - apt-get update - apt-get install -y software-properties-common gnupg - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4F4EA0AAE5267A6C - add-apt-repository -y ppa:ondrej/php - apt-get update - apt-get install -y php7.2 php7.2-cli php7.2-common php7.2-mbstring - apt-get install -y php7.2-curl php7.2-xml
长期修复
更换基础镜像为更高版本的Ubuntu镜像(如ubuntu:20.04),或直接使用官方PHP7.2镜像,彻底规避底层系统版本停止支持的问题。
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

