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

AWS CodeDeploy部署Validate Service阶段validate_service.sh退出码1排查

AWS CodeDeploy ValidateService阶段脚本退出码1修复方案

scripts/validate_service.sh返回退出码1的直接原因是脚本中grep Welcome命令未匹配到对应内容——grep未找到匹配行时默认退出码就是1,CodeDeploy对生命周期钩子脚本的判定规则是任何非0退出码都直接标记该阶段失败,进而触发整体部署中断、回滚。

按以下步骤排查修复即可:

1. 修正校验脚本的逻辑缺陷

你当前写的脚本没有做重试容错、没有处理服务启动延迟、没有输出有效错误日志,很容易出现服务还没完全启动就执行校验导致的误判,替换为以下版本:

#!/bin/bash
set -euo pipefail
# 服务校验配置:最多重试10次,每次间隔3秒,适配服务启动耗时
MAX_RETRY=10
SLEEP_SEC=3
CHECK_ADDR="localhost:80"

for ((count=1; count<=MAX_RETRY; count++)); do
    echo "=== 第${count}次校验服务状态 ==="
    # 单独获取HTTP状态码,不把grep结果作为唯一判断依据
    http_code=$(curl -s -o /tmp/svc_check_resp -w "%{http_code}" --connect-timeout 2 "http://${CHECK_ADDR}" || echo "000")
    
    if [ "$http_code" -eq 200 ]; then
        # 校验页面是否包含预期的Welcome字段
        if grep -q "Welcome" /tmp/svc_check_resp; then
            echo "服务校验通过"
            exit 0
        fi
        echo "服务返回200,但页面未匹配到Welcome字段,当前页面内容:"
        cat /tmp/svc_check_resp
    else
        echo "服务访问异常,HTTP状态码:${http_code}"
    fi

    sleep $SLEEP_SEC
done

echo "重试耗尽,服务校验未通过"
exit 1

脚本提交前记得加可执行权限:chmod +x scripts/validate_service.sh

2. 检查CodeDeploy配置与实例环境

  • 确认appspec.yml中ValidateService钩子配置正确:脚本路径和仓库内实际路径一致,超时时间留足(建议至少设为60秒),执行用户有足够权限,参考配置:
hooks:
  ValidateService:
    - location: scripts/validate_service.sh
      timeout: 60
      runas: root
  • 确认80端口的服务正常启动:登录实例手动执行ss -tulpn | grep :80确认端口处于监听状态,如果是StartService阶段启动的服务,先排查该阶段脚本是否执行成功,有没有端口冲突、配置文件错误、权限不足导致服务启动失败的问题。
  • 确认实例本地防火墙、安全组规则没有拦截localhost的80端口访问,curl、grep等基础命令在执行用户的PATH路径下可正常调用。

3. 调整部署组阈值避免整体部署被误判中断

如果是多实例部署,先临时调整部署组的健康实例阈值、单实例失败容忍阈值,避免单台实例校验失败就直接判定整个部署失败,等脚本逻辑调通、服务启动正常后再恢复原有阈值配置。


内容的提问来源于stack exchange,提问作者Branko Mandil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:27:21