如何在AWS CodeBuild v5镜像中通过buildspec.yml安装dig工具?
故障原因
AWS CodeBuild v5标准Ubuntu镜像默认不带dig命令,该命令由dnsutils包提供。直接执行安装命令返回exit status 100是apt的常见报错,本质是镜像内置的apt软件包索引是镜像构建时生成的旧版本,没有同步当前软件源的包信息,直接安装时会出现找不到包、依赖版本不匹配的问题,最终触发执行失败。
另外注意:CodeBuild构建环境默认以root身份执行所有命令,不需要加sudo前缀,部分v5精简镜像甚至没有预装sudo,加了反而会触发命令不存在的报错。
可用的buildspec.yml配置
把包索引更新步骤放到install阶段,再执行安装即可,参考配置如下:
version: 0.2 phases: install: # 按需配置你项目需要的运行时版本,不需要可删除runtime-versions块 runtime-versions: nodejs: 18 commands: # 非交互模式下执行apt更新,避免弹窗卡住构建 - DEBIAN_FRONTEND=noninteractive apt update -y # 安装dnsutils包,不需要加sudo - DEBIAN_FRONTEND=noninteractive apt install -y dnsutils build: commands: # 安装完成后可通过该命令验证是否安装成功 - dig -v # 后续追加你项目本身的构建命令即可
避坑说明
- 所有apt相关命令必须加
-y参数:非交互环境下apt默认会等待用户输入确认操作,不加参数会直接卡住直到构建超时 - 不要执行
apt upgrade全量升级系统包:该操作会大幅增加构建耗时,还可能破坏镜像预装的编程语言运行时、系统工具的依赖关系,只需要执行apt update刷新包索引就足够支撑安装操作 - 如果更新索引后还是提示找不到包,可以追加
apt-cache policy dnsutils检查源内是否存在该包,标准Ubuntu源默认都包含dnsutils,只要索引刷新正常都能安装成功。
内容的提问来源于stack exchange,提问作者Jimmy Chen
相关产品推荐
相关产品推荐

