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

如何在CodeDeploy脚本中识别CodePipeline触发源(人工/CloudWatch调度)

判断CodePipeline触发源(人工控制台/CloudWatch调度)的两种方法

你可以通过以下两种方式在CodeDeploy脚本中识别流水线的触发源:

方法1:通过自定义参数传递触发标识(推荐,无需额外API调用)

这种方法无需调用AWS API,直接通过流水线参数传递触发源信息,更高效:

  • 步骤1:配置CloudWatch触发时添加自定义参数
    当设置CloudWatch Event触发CodePipeline时,在事件目标的「Configure input」选项中选择「Constant (JSON text)」,输入自定义JSON:

    {
      "triggerSource": "cloudwatch"
    }
    
  • 步骤2:在流水线中传递参数给CodeDeploy
    编辑CodePipeline的CodeDeploy阶段,在「Additional deployment input」中添加一个部署参数,比如triggerSource,值设为#{triggerSource}(引用CloudWatch传递的参数)。人工触发流水线时,这个参数不会被设置。

  • 步骤3:在CodeDeploy脚本中判断
    在你的部署脚本(比如appspec.yml定义的钩子脚本)中,读取该参数对应的环境变量:

    if [ "$DEPLOYMENT_PARAM_TRIGGERSOURCE" == "cloudwatch" ]; then
        echo "流水线由CloudWatch调度器触发"
        # 执行对应逻辑
    else
        echo "流水线由人工控制台触发"
        # 执行对应逻辑
    fi
    

方法2:调用CodePipeline API获取触发信息

如果无法修改CloudWatch触发配置,可以通过API查询流水线执行的触发源:

  • 步骤1:给CodeDeploy角色添加权限
    给CodeDeploy使用的IAM服务角色添加codepipeline:GetPipelineExecution权限,示例政策:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "codepipeline:GetPipelineExecution",
                "Resource": "arn:aws:codepipeline:<你的区域>:<你的账号ID>:<你的流水线名称>"
            }
        ]
    }
    
  • 步骤2:传递流水线执行ID和名称到CodeDeploy
    在CodePipeline的CodeDeploy阶段,添加两个部署参数:

    • pipelineName,值为#{codepipeline.PipelineName}
    • executionId,值为#{codepipeline.PipelineExecutionId}
  • 步骤3:在脚本中调用API并解析
    在部署脚本中使用AWS CLI查询触发信息(需确保实例已安装AWS CLI和jq工具):

    # 从部署参数中获取流水线信息
    PIPELINE_NAME="$DEPLOYMENT_PARAM_PIPELINENAME"
    EXECUTION_ID="$DEPLOYMENT_PARAM_EXECUTIONID"
    
    # 查询触发源
    TRIGGER_TYPE=$(aws codepipeline get-pipeline-execution \
        --pipeline-name "$PIPELINE_NAME" \
        --pipeline-execution-id "$EXECUTION_ID" \
        --query 'pipelineExecution.trigger.triggerType' \
        --output text)
    
    # 判断触发类型
    if [ "$TRIGGER_TYPE" == "Manual" ]; then
        echo "流水线由人工控制台触发"
    elif [ "$TRIGGER_TYPE" == "CloudWatchEvent" ]; then
        echo "流水线由CloudWatch调度器触发"
    else
        echo "未知触发源: $TRIGGER_TYPE"
    fi
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:35:21