Bitbucket Pipeline已安装Composer仍提示未找到问题求助
Bitbucket Pipeline 中Composer命令找不到的原因及解决办法
问题原因
Bitbucket Pipeline的每个step都是独立运行的Docker容器,容器之间的文件系统相互隔离——只有配置了缓存或**产物(artifacts)**的内容才会在步骤间共享。
你第一个step里把Composer安装到了/usr/local/bin目录,但这个路径不在Bitbucket默认的composer缓存范围内(默认composer缓存仅针对项目的vendor目录和Composer全局缓存,不包含/usr/local/bin里的可执行文件)。因此第二个step启动新容器后,/usr/local/bin中没有Composer,自然会报bash: composer: command not found。
解决办法
方案一:使用自带Composer的PHP镜像(最简便)
直接替换基础镜像为官方预安装了Composer的版本,所有step可直接调用composer命令,无需手动安装:
image: php:8.1-cli-composer pipelines: default: - step: caches: - composer script: - composer install - ./vendor/bin/phpunit - step: caches: - composer script: - composer install --no-dev - apt-get update && apt-get install -y zip - export FILE=release-$(date "%Y%m%d%H%M%S").zip - zip ${FILE} ./lib/*.php ./vendor/* composer.json composer.lock index.php config.php ./utils/*.php - curl -X POST --user "${BB_AUTH_STRING}" "https://api.bitbucket.org/2.0/repositories/${BITBUCKET_REPO_OWNER}/${BITBUCKET_REPO_SLUG}/downloads" --form files=@"${FILE}" artifacts: - release-$(date "%Y%m%d%H%M%S").zip
方案二:将Composer安装到项目目录并共享
如果必须使用原版PHP镜像,可把Composer安装到项目内的bin目录,再通过自定义缓存实现步骤间共享:
image: php:8.1 pipelines: default: - step: caches: - composer - composer-bin script: - mkdir -p ./bin - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" - php composer-setup.php --install-dir=./bin --filename=composer - php -r "unlink('composer-setup.php');" - chmod +x ./bin/composer - step: caches: - composer - composer-bin script: - export PATH=./bin:$PATH - composer install - ./vendor/bin/phpunit - step: caches: - composer - composer-bin script: - export PATH=./bin:$PATH - composer install --no-dev - apt-get update && apt-get install -y zip - export FILE=release-$(date "%Y%m%d%H%M%S").zip - zip ${FILE} ./lib/*.php ./vendor/* composer.json composer.lock index.php config.php ./utils/*.php - curl -X POST --user "${BB_AUTH_STRING}" "https://api.bitbucket.org/2.0/repositories/${BITBUCKET_REPO_OWNER}/${BITBUCKET_REPO_SLUG}/downloads" --form files=@"${FILE}" artifacts: - release-$(date "%Y%m%d%H%M%S").zip # 自定义缓存规则 definitions: caches: composer-bin: ./bin
内容的提问来源于stack exchange,提问作者Dimitrios Desyllas
相关产品推荐
相关产品推荐

