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

如何实现私有Git仓库推送代码时触发SageMaker Pipeline?

私有Git仓库推送触发SageMaker Pipeline的解决方案

一、先解决post-receive钩子无效的核心问题

你当前的脚本无法运行,核心原因是post-receive(服务器端钩子)的参数逻辑和pre-commit(客户端钩子)完全不同,加上配置细节缺失,导致钩子未正确执行:

1. 修正钩子的参数逻辑

post-receive不通过命令行参数接收状态,而是从标准输入读取推送的提交信息(格式为旧提交ID 新提交ID 分支名)。你原来的脚本用$1判断是错误的,以下是修正后的post-receive脚本:

#!/bin/bash
# 日志函数,输出到固定文件方便调试
log_message() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> /var/log/git-sagemaker-hook.log
}

# 读取推送的分支信息(仅处理main分支,可按需修改目标分支)
while read oldrev newrev refname; do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)
    if [ "$branch" = "main" ]; then
        log_message "检测到推送到main分支,触发SageMaker Pipeline..."
        
        # 确保AWS CLI能读取到配置,若服务器是EC2可绑定IAM角色,否则指定凭证路径
        export AWS_CONFIG_FILE="/home/git/.aws/config"
        export AWS_SHARED_CREDENTIALS_FILE="/home/git/.aws/credentials"
        
        # 触发Pipeline
        pipeline_execution_output=$(aws sagemaker start-pipeline-execution \
            --pipeline-name "你的Pipeline名称" \
            2>&1)
        
        if [ $? -eq 0 ]; then
            log_message "Pipeline触发成功"
        else
            log_message "Pipeline触发失败:$pipeline_execution_output"
        fi
    fi
done

2. 确保钩子的正确配置

  • 将脚本放到服务器端Git仓库的.git/hooks目录下,命名为post-receive(不能加后缀)
  • 给脚本添加可执行权限:chmod +x .git/hooks/post-receive
  • 验证服务器端权限:确保运行Git的用户(如git用户)有权限调用SageMaker API,可手动执行aws sagemaker start-pipeline-execution --pipeline-name "你的Pipeline名称"测试

二、替代实现方案

如果服务器端钩子无法修复,可选择以下替代方案:

1. 私有Git服务器Webhook转发(推荐)

若你的私有Git服务器支持Webhook(如Gitea、GitLab CE、自建Gogs等),配置Webhook触发AWS Lambda函数:

  • 在Lambda中编写代码调用StartPipelineExecution API
  • 给Lambda配置具备SagePipeline执行权限的IAM角色
  • 在Git服务器中设置推送事件触发该Lambda的API Gateway地址

2. 客户端post-push钩子触发

适合小团队,要求每个开发者在本地仓库的.git/hooks目录下添加post-push脚本,推送完成后触发Pipeline:

#!/bin/bash
aws sagemaker start-pipeline-execution --pipeline-name "你的Pipeline名称"

注意:需确保每个开发者本地已配置AWS凭证,且仅在成功推送后触发

3. 定时轮询Git仓库

用CloudWatch Events定时触发Lambda,Lambda拉取Git仓库的最新提交ID,与上次存储在S3/Parameter Store的ID对比,若有更新则触发Pipeline:

  • Lambda逻辑:拉取仓库最新提交 → 对比历史提交ID → 若不同则调用SageMaker API
  • 优势:无需修改Git服务器配置,适合无法访问服务器的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:34:52