如何配置GitHub Action在遇到指定错误时自动重试?
你遇到的报错是GitHub公共运行器访问阿里云容器镜像服务的认证接口时网络超时导致的,属于跨网访问的偶发问题,确实无法完全根除,可通过配置工作流自动重试解决,以下是两种可行方案:
方案1:使用GitHub Actions原生重试功能
首先建议你将已经停止维护的docker/build-push-action@v1升级到最新稳定版v5,再给步骤添加重试配置,指定最多重试3次,仅在错误、超时场景下触发重试:
- name: Build image push to aliyun uses: docker/build-push-action@v5 retries: 3 retry-on: - error - timeout with: registry: ${{ secrets.ALI_DOCKER_HUB_REGISTRY }} username: ${{ secrets.ALIYUN_DOCKER_REPO_USER_NAME }} password: ${{ secrets.ALIYUN_DOCKER_REPO_USER_PASSWORD }} tags: ${{ github.sha }} repository: reddwarf-pro/dolphin-music context: '.'
注意v5版本中原有path参数已更名为context,需要同步调整配置。
方案2:使用重试Action实现带间隔的重试
如果需要在两次重试之间增加等待时间,避免短时间内重复请求仍命中网络故障,可以使用第三方重试Action包裹构建步骤:
- name: Retry build and push docker image uses: nick-fields/retry@v2 with: max_attempts: 3 retry_wait_seconds: 15 command: | echo "${{ secrets.ALIYUN_DOCKER_REPO_USER_PASSWORD }}" | docker login ${{ secrets.ALI_DOCKER_HUB_REGISTRY }} -u ${{ secrets.ALIYUN_DOCKER_REPO_USER_NAME }} --password-stdin docker build -t ${{ secrets.ALI_DOCKER_HUB_REGISTRY }}/reddwarf-pro/dolphin-music:${{ github.sha }} . docker push ${{ secrets.ALI_DOCKER_HUB_REGISTRY }}/reddwarf-pro/dolphin-music:${{ github.sha }}
这个方案同时使用了--password-stdin传递密码,消除了原有配置中的密码明文警告,安全性更高。
额外优化建议
如果重试后仍频繁出现超时,可以考虑使用国内地域的自托管GitHub Actions运行器,从根源降低跨网访问的失败概率。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

