Jenkins升级Flutter至2.2.3后执行flutter pub get提示PATH中找不到git
问题根因
- 你使用的基础镜像为
jenkins/jenkins:lts-alpine,属于Alpine Linux发行版,默认不会预装git。同时你的Dockerfile中安装系统依赖的指令被注释,还错误使用了Debian系的apt命令而非Alpine对应的apk包管理命令,导致构建出的容器内部实际不存在git可执行文件。SCM阶段能正常调用git是因为该阶段调用的是Jenkins master宿主机的git,而流水线sh步骤执行时是在容器内部环境,两者的环境变量完全隔离,宿主机配置的PATH不会同步到容器内部。 - Flutter 2.2.3版本较你之前使用的2.0.3版本,新增了执行
flutter pub get等命令前主动校验git可执行性的逻辑,旧版本不会做前置检查,因此升级前流水线可以正常运行。
解决方案
- 修正Dockerfile中的系统依赖安装逻辑,使用Alpine对应的
apk命令安装git等必要依赖,同时显式配置全局PATH避免子shell加载不到环境变量,参考修正后的Dockerfile:
FROM jenkins/jenkins:lts-alpine USER root # 替换原注释的apt相关指令,新增Alpine依赖安装 RUN apk update && apk add --no-cache xz unzip git RUN cd /opt; \ wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_2.2.3-stable.tar.xz -O flutter_linux_2.2.3-stable.tar.xz; \ tar -xf flutter_linux_2.2.3-stable.tar.xz; \ mv flutter flutter_linux_2.2.3-stable; \ chmod -R 777 flutter_linux_2.2.3-stable; \ chown -R jenkins:jenkins flutter_linux_2.2.3-stable; \ rm flutter_linux_2.2.3-stable.tar.xz; \ wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.0.2311-linux.zip -O sonar-scanner-cli-4.6.0.2311-linux.zip; \ unzip sonar-scanner-cli-4.6.0.2311-linux.zip; \ chmod -R 777 sonar-scanner-4.6.0.2311-linux; \ chown -R jenkins:jenkins sonar-scanner-4.6.0.2311-linux; \ rm sonar-scanner-cli-4.6.0.2311-linux.zip; \ wget https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.xz; \ tar -xf node-v14.16.0-linux-x64.tar.xz; \ mv node-v14.16.0-linux-x64 node14.16; \ chmod -R 777 node14.16; \ chown -R jenkins:jenkins node14.16; \ rm node-v14.16.0-linux-x64.tar.xz; \ cd .. # 新增ENV指令显式配置全局PATH ENV PATH=$PATH:/opt/flutter_linux_2.2.3-stable/bin:/opt/sonar-scanner-4.6.0.2311-linux/bin:/opt/flutter_linux_2.2.3-stable/.pub-cache/bin:/opt/node14.16/bin USER jenkins
- 重新构建镜像并替换原有运行的Jenkins容器后,进入容器切换到jenkins用户执行以下命令验证配置是否生效:
# 验证git是否正常识别 which git git --version # 验证flutter命令正常 flutter doctor
- 重新执行流水线即可正常运行
flutter pub get命令。
内容的提问来源于stack exchange,提问作者sgrumo
相关产品推荐
相关产品推荐

