如何在GitHub Actions中缓存PHP及Composer依赖安装步骤?
当然可以!这两个步骤都能通过优化实现缓存,帮你把工作流耗时从5分钟压缩到1分钟以内。
下面分两部分说明优化方案,再给出完整的重构后工作流:
1. 替换手动PHP安装为官方Action(自带缓存优化)
你现在手动用apt安装PHP和一堆扩展的步骤太繁琐,而且没法直接缓存整个环境。换成官方的shivammathur/setup-php Action就解决了——它会自动处理PHP版本、扩展安装,并且内部已经做了缓存,重复运行时会跳过已安装的内容,速度快很多。
你只需要指定PHP版本和需要的扩展列表,Action会帮你搞定所有依赖,包括pecl扩展(比如mcrypt)。
2. 缓存Composer依赖
对于Composer的依赖安装步骤,我们可以用actions/cache Action缓存两个关键内容:
- 项目的
vendor目录:存放安装好的依赖包 - Composer的全局缓存目录:存放下载的包归档,避免重复下载
缓存的key基于composer.lock文件的哈希值——只有当依赖版本变化时,才会重新安装,否则直接使用缓存的内容。
重构后的完整工作流
name: Build on: workflow_call: jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 with: path: ./src - name: Setup PHP (with extensions) uses: shivammathur/setup-php@v2 with: php-version: '8.1' extensions: gd, curl, soap, bcmath, intl, mbstring, xmlrpc, mysql, zip, gmp, xml, mcrypt, dev tools: composer:v2 # 指定Composer 2版本,省去手动更新步骤 coverage: none # 如果不需要代码覆盖率工具,可以加上这个参数 - name: Cache Composer dependencies uses: actions/cache@v3 with: path: | ./src/vendor ~/.composer/cache/files key: ${{ runner.os }}-composer-${{ hashFiles('./src/composer.lock') }} restore-keys: | ${{ runner.os }}-composer- - name: Install Composer Dependencies run: | cd ./src/ || exit 99 cp auth.json.pipeline auth.json composer install --no-dev --verbose --prefer-dist --no-ansi --no-interaction
关键优化点说明:
- PHP安装部分:用
setup-php替代手动apt命令,不仅代码简洁,而且Action会自动缓存PHP环境,重复运行时无需重新安装,这一步耗时能从几分钟降到十几秒。 - Composer缓存部分:通过
actions/cache,只有当composer.lock文件变化时才会重新下载依赖,否则直接读取缓存的vendor目录,这一步耗时能从几分钟降到几秒。 - 省去了手动安装Composer和更新的步骤:
setup-php的tools参数可以直接指定Composer版本,自动安装好,不需要你再用curl下载和手动更新。
这样调整后,整个工作流的耗时应该能控制在1分钟以内,完美解决你的问题!
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

