You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署至GCS的网站应在何时、如何捕获gsutil相关报错?

问题根因

你当前的流水线误判成功是三个环节的配置错误共同导致的:

  • GitHub Actions 未实际执行部署命令,仅打印了命令日志
  • Makefile 语法错误,无法正确传递部署脚本的错误状态
  • 部署脚本未配置错误终止规则,单条命令失败不会中断执行也不会抛出错误码

修复方案

1. 修正GitHub Actions配置,真实执行部署命令

你当前的 workflow 配置中仅用 echo 打印了 make deploy,并未实际运行该命令,所以无论部署逻辑是否出错,流水线都会标记为成功。修改 .github/workflows/main.yml 的对应步骤:

- name: Deployment to production server 
  run: |
    echo deploying new version on pierre-alexandre.io ...
    make deploy

GitHub Actions 默认会将返回非0退出码的命令标记为步骤失败,只要 make deploy 执行出错,流水线就会自动报错。

2. 修正Makefile的deploy目标写法

你当前把部署脚本放在了 $(shell) 函数中,这会让 make 在预处理阶段就执行脚本,且只会返回脚本的标准输出,不会传递脚本的错误状态。修改 Makefile 如下:

deploy:
	./bin/deploy.sh

注意:目标下的命令行必须用Tab缩进,不能用空格,否则会触发make语法错误。如果脚本没有执行权限,先运行 chmod +x bin/deploy.sh 配置权限。

3. 给部署脚本增加严格错误检查

在 bin/deploy.sh 开头增加shell严格模式配置,只要任意命令执行失败、使用未定义变量、管道命令任意环节出错,脚本就会直接终止并返回错误码:

#!/bin/bash
set -euo pipefail

# 原有脚本内容保持不变
# set website config
gsutil web set -m index.html -e 404.html gs://pierre-alexandre.io

# add user permissions
gsutil iam ch allUsers:legacyObjectReader gs://pierre-alexandre.io

# copy the website files!
gsutil -m rsync -d -r public_html gs://pierre-alexandre.io

修改完成后,只要gsutil相关命令报错,错误状态会依次从deploy.sh传递给make,再传递给GitHub Actions,流水线就会正确标记为失败。

内容的提问来源于stack exchange,提问作者Pierre-Alexandre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:15:01