为阶段配置条件 - Amazon CodePipeline
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

为阶段配置条件

您可以为某个阶段指定一个条件,例如检查管道运行中的某个特定变量,然后为该条件指定一个结果,例如跳过该阶段或该阶段失败。可以设置管道在运行过程中检查阶段条件,即指定对某一阶段进行检查,然后指定在满足某些条件时该阶段应如何继续。条件包含 CodePipeline 规则列表中的一条或多条规则。如果一个条件中的所有规则都成功,则满足该条件。您可以配置条件,以便在不满足标准时,会产生指定的结果。

每个条件都有一个规则集,规则集是一组有序的规则,这些规则会一起进行评估。因此,如果条件中有一条规则失败,那么条件也会失败。您可以在管道运行时覆盖规则条件。

条件用于特定类型的表达式,每种表达式都有特定的结果选项,具体如下:

  • 入口 - 进行检查的条件,如果满足这些条件,就可以进入某个阶段。规则的结果选项如下:失败跳过

  • 失败时 - 阶段失败时进行检查的条件。规则的结果选项如下:回滚

  • 成功时 - 阶段成功时进行检查的条件。规则的结果选项如下:回滚失败

每种类型的条件都有一套规则支持。

对于每种类型的条件,都有由条件设置的特定操作。该操作是条件检查成功或失败的结果。例如,“入口”条件遇到警报(规则),则检查成功,结果(操作)是进入阶段受阻。

您还可以使用 Amazon CodePipeline 控制台或 Amazon CLI 手动回滚或重试阶段或阶段中的操作。请参阅为阶段配置条件。

阶段条件的使用案例

阶段条件有多种使用案例,可用于在管道中设置发布和变更安全。以下是阶段条件的示例使用案例。

  • 使用“入口”条件定义一个将检查 CloudWatch 报警状态的条件,如果生产环境未处于正常状态,该条件将阻止更改。

  • 使用等待时间为 60 的“入口”条件定义一个条件,当阶段中的所有操作都成功完成后对该条件进行评估,如果 CloudWatch 警报在 60 分钟内进入 ALARM 状态,则回滚更改。

  • 使用“成功时”条件定义一个条件,以便当阶段成功完成时,规则将检查当前时间是否在部署窗口内,如果规则成功,则进行部署。

为阶段条件配置结果的考虑因素

阶段条件的考虑因素如下:

  • 不能在 onFailure 条件下使用自动阶段重试。

  • 在配置使用回滚结果的条件时,只有在当前管道结构版本中可用的情况下,阶段才能回滚到之前的执行。

  • 在配置使用回滚结果的条件时,不能回滚到属于回滚执行类型的目标执行 ID。

  • 对于在条件失败时使用跳过结果跳过阶段的“入口”条件,只支持 LambdaInvokeVariableCheck 规则。

  • 无法对处于已跳过状态的阶段执行手动阶段重试。

  • 无法对处于已跳过状态的阶段执行手动回滚。

  • 如果条件配置为使用跳过结果,则无法覆盖该条件。

  • 跳过结果外,您可以在开始执行管道时覆盖阶段条件。对于启动了覆盖功能的阶段条件,执行情况如下表所示。

  • 类型 条件失败时的配置结果 阶段状态 覆盖行为
    条目 Fail 进行中 阶段继续进行。
    条目 跳过 Skipped 不适用。

    OnFailure

    回滚 失败 阶段失败。
    OnSuccess 回滚 成功 阶段继续进行。

    OnSuccess

    Fail 失败 阶段继续进行。

为阶段条件配置规则的考虑因素

阶段条件可用规则的考虑因素如下:

  • 对于 LambdaInvoke 规则,您必须首先配置要在规则中使用的 Lambda 函数。准备好 Lambda 函数 ARN,以便在配置规则时提供。

  • 对于 CloudWatchAlarm 规则,您必须首先配置要在规则中使用的 CloudWatch Events 事件。准备好事件 ARN,以便在配置规则时提供。

创建“入口”条件

您可以使用控制台或 CLI 配置阶段的“入口”条件。您将为每个条件配置相应的规则和结果。对于回滚结果,只有当前一次执行是在当前管道结构版本中启动时,管道才能回滚到前一次执行。

这些步骤提供了一个使用监控规则的“入口”条件示例。

有关更多信息,请参阅《CodePipeline API 指南》中的条件RuleTypeIdRuleExecution

创建“入口”条件 - CloudWatchAlarm 规则示例(控制台)

您可以为阶段配置“入口”条件,以及您希望在满足条件时,阶段执行的规则和结果。

配置“入口”条件(控制台)
  1. 完成所有前提条件,例如为提供资源的规则(如 Amazon CloudWatchAlarm)创建资源和 ARN。

  2. 通过以下网址登录Amazon Web Services 管理控制台并打开 CodePipeline 控制台:http://console.aws.amazon.com/codesuite/codepipeline/home

    显示所有与您的 Amazon Web Services 账户关联的管道的名称和状态。

  3. Name 中,选择您要编辑的管道的名称。

  4. 在管道详细信息页中,选择编辑

  5. 编辑页面上,对于要编辑的操作,选择编辑阶段

  6. 选择添加入口条件。此时将显示阶段前入口条件卡,其中包含适用于该条件的失败选项。

  7. 选择添加规则,然后完成以下操作。

    1. 规则名称中,输入规则的名称。在此示例中,请输入 MyAlarmRule

    2. 规则提供程序中,选择要添加到条件中的预配置规则提供程序。在此示例中,选择 Amazon CloudWatchAlarm,然后完成以下步骤。

    3. 区域中,选择适合您条件的区域或保留默认值。

    4. 警报名称中,选择要用于规则的 CloudWatch 资源。您必须已在账户中创建了资源。

    5. (可选)在等待时间中,输入首次评估警报时,如果警报处于 ALARM 状态,CodePipeline 将等待的时间。如果首次检查规则时警报处于 OK 状态,则规则会立即成功执行。

    6. (可选)输入要监控的任何特定警报状态,并酌情输入角色 ARN。

    7. 完成阶段编辑后,选择完成。在管道编辑页面上,选择保存

  8. 运行后,查看结果。

创建使用“跳过”结果和 VariableCheck 规则的“入口”条件(控制台)

您可以为阶段配置“入口”条件,这样如果不满足“入口”条件,则跳过该阶段。如果条件失败,则生成相应结果,并跳过该阶段。跳过阶段时,阶段状态为已跳过,操作状态为未运行。有关使用“跳过”结果的阶段条件的考虑因素,请参阅为阶段条件配置结果的考虑因素

在下面的示例中,变量检查规则发现值不匹配,因此跳过了构建阶段。

配置使用跳过结果的“入口”条件(控制台)
  1. 完成所有前提条件,例如为提供资源的规则(如 Amazon CloudWatchAlarm)创建资源和 ARN。

  2. 通过以下网址登录Amazon Web Services 管理控制台并打开 CodePipeline 控制台:http://console.aws.amazon.com/codesuite/codepipeline/home

    显示所有与您的 Amazon Web Services 账户关联的管道的名称和状态。

  3. Name 中,选择您要编辑的管道的名称。

  4. 在管道详细信息页中,选择编辑

  5. 编辑页面上,对于要编辑的操作,选择编辑阶段

  6. 选择添加入口条件,然后选择跳过作为结果。

  7. 选择添加规则,然后完成以下操作。

    1. 规则名称中,输入规则的名称。在此示例中,请输入 MyAlarmRule

    2. 规则提供程序中,选择要添加到条件中的预配置规则提供程序。在此示例中,选择 VariableCheck,然后完成以下步骤。

      使用 CodePipeline 的示例发布过程。
    3. 区域中,选择适合您条件的区域或保留默认值。

    4. 变量中,选择要与之比较的变量,如 #{SourceVariables.FullRepositoryName} 用于具有 GitHub(通过 GitHub 应用程序)源操作的管道。输入存储库名称并选择运算符,如等于

    5. 完成阶段编辑后,选择完成。在管道编辑页面上,选择保存

  8. 运行后,查看结果。

    使用 CodePipeline 的示例发布过程。
  9. 要查看详细信息,请选择查看。以下示例中的详细信息显示,条件的配置结果为跳过,不能覆盖。由于不满足条件,规则状态为失败

    显示 CodePipeline 中“跳过”结果条件的条件详细信息页面示例。

创建“入口”条件(CLI)

要使用 Amazon CLI 配置“入口”条件,请使用创建或更新管道的命令,详见创建管道、阶段和操作在 CodePipeline 中编辑管道

配置条件和一条或多条规则(CLI)
  • 打开终端(Linux、macOS 或 Unix)或命令提示符(Windows),并使用 Amazon CLI 运行 update-pipeline 命令,指定管道结构中的失败条件。下面的示例为名为 Deploy 的阶段配置“入口”条件:

    { "name": "Deploy", "actions": [ { "name": "Deploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "provider": "S3", "version": "1" }, "runOrder": 1, "configuration": { "BucketName": "MyBucket", "Extract": "false", "ObjectKey": "object.xml" }, "outputArtifacts": [], "inputArtifacts": [ { "name": "SourceArtifact" } ], "region": "us-east-1", "namespace": "DeployVariables" } ], "beforeEntry": { "conditions": [ { "result": "FAIL", "rules": [ { "name": "MyAlarmRule", "ruleTypeId": { "category": "Rule", "owner": "AWS", "provider": "CloudWatchAlarm", "version": "1" }, "configuration": { "AlarmName": "CWAlarm", "WaitTime": "1" }, "inputArtifacts": [], "region": "us-east-1" } ] } ] } }

    有关配置阶段回滚成功条件的更多信息,请参阅《CodePipeline API 参考》中的 SuccessConditions

创建“入口”条件(CFN)

要使用 Amazon CloudFormation 配置“入口”条件,请使用 beforeEntry 参数。进入后,阶段将运行规则并执行结果。

beforeEntry: Result: FAIL
  • 更新模板,如以下代码段所示。下面的示例使用名为 MyMonitorRule 的规则配置“入口”条件:

    Name: Deploy Actions: - Name: Deploy ActionTypeId: Category: Deploy Owner: AWS Provider: S3 Version: '1' RunOrder: 1 Configuration: BucketName: MyBucket Extract: 'false' ObjectKey: object.xml OutputArtifacts: [] InputArtifacts: - Name: SourceArtifact Region: us-east-1 Namespace: DeployVariables BeforeEntry: Conditions: - Result: FAIL Rules: - Name: MyMonitorRule RuleTypeId: Category: Rule Owner: AWS Provider: CloudWatchAlarm Version: '1' Configuration: AlarmName: CWAlarm WaitTime: '1' InputArtifacts: [] Region: us-east-1

    有关配置 beforeEntry 条件的更多信息,请参阅《Amazon CloudFormation 用户指南》中的 StageDeclaration 下的 AWS::CodePipeline::Pipeline BeforeEntryConditions

创建“失败时”条件

您可以使用控制台或 CLI 配置阶段的“失败时”条件。您将为每个条件配置相应的规则和结果。对于回滚结果,只有当前一次执行是在当前管道结构版本中启动时,管道才能回滚到前一次执行。

创建“失败时”条件(控制台)

您可以为阶段配置“失败时”条件,以及您希望阶段在满足条件时执行的规则和结果。

配置“失败时”条件(控制台)
  1. 完成所有前提条件,例如为提供资源的规则(如 LambdaInvoke 规则)创建资源和 ARN。

  2. 通过以下网址登录Amazon Web Services 管理控制台并打开 CodePipeline 控制台:http://console.aws.amazon.com/codesuite/codepipeline/home

    显示所有与您的 Amazon Web Services 账户关联的管道的名称和状态。

  3. Name 中,选择您要编辑的管道的名称。

  4. 在管道详细信息页中,选择编辑

  5. 编辑页面上,对于要编辑的操作,选择编辑阶段

  6. 选择添加失败条件。此时将显示失败条件卡,其中包含适用于该条件的回滚选项。

  7. 选择添加规则,然后完成以下操作。

    1. 规则名称中,输入规则的名称。在此示例中,请输入 MyLambdaRule

    2. 规则提供程序中,选择要添加到条件中的预配置规则提供程序。在此示例中,选择 Amazon LambdaInvoke,然后完成以下步骤。

    3. 区域中,选择适合您条件的区域或保留默认值。

    4. 输入构件中,选择源构件。

    5. 函数名称中,选择要用于规则的 Lambda 资源。您必须已在账户中创建了资源。

    6. (可选)在用户参数中,输入任何代表附加配置参数的配对。

    7. (可选)在角色 ARN 中,输入角色 ARN(如果已配置)。

    8. (可选)在超时(以分钟为单位)中,输入规则在超时之前应等待的时间(以分钟为单位)。

    9. 完成阶段编辑后,选择完成。在管道编辑页面上,选择保存

创建使用“重试”结果的 onFailure 条件示例(控制台)

您可以为阶段配置 onFailure 条件,这样如果不满足“入口”条件,就会重试该阶段。作为此结果的一部分,您可以配置重试模式,指定是重试失败的操作还是重试失败的阶段。

配置使用“重试”结果的 onFailure 条件(控制台)
  1. 完成所有前提条件,例如为提供资源的规则(如 Amazon CloudWatchAlarm)创建资源和 ARN。

  2. 通过以下网址登录Amazon Web Services 管理控制台并打开 CodePipeline 控制台:http://console.aws.amazon.com/codesuite/codepipeline/home

    显示所有与您的 Amazon Web Services 账户关联的管道的名称和状态。

  3. Name 中,选择您要编辑的管道的名称。

  4. 在管道详细信息页中,选择编辑

  5. 编辑页面上,对于要编辑的操作,选择编辑阶段

  6. 在阶段底部的自动阶段配置:下,选择启用阶段失败时的自动重试。在重试模式中,选择重试失败的阶段重试失败的操作

    在 CodePipeline 中为阶段配置重试模式。
  7. 选择添加 onFailure 条件,然后选择添加规则并输入条件规则。

    1. 规则名称中,输入规则的名称。在此示例中,请输入 MyAlarmRule

    2. 规则提供程序中,选择要添加到条件中的预配置规则提供程序。在此示例中,选择 CloudWatchAlarm,然后完成以下步骤。

    3. 区域中,选择适合您条件的区域或保留默认值。

    4. 警报名称中,为警报选择已配置的资源。

    5. 完成阶段编辑后,选择完成。在管道编辑页面上,选择保存

  8. 运行后,查看结果。

创建“失败时”条件(CLI)

要使用 Amazon CLI 配置“失败时”条件,请使用创建或更新管道的命令,详见创建管道、阶段和操作在 CodePipeline 中编辑管道

配置条件和一条或多条规则(CLI)
  • 打开终端(Linux、macOS 或 Unix)或命令提示符(Windows),并使用 Amazon CLI 运行 update-pipeline 命令,指定管道结构中的失败条件。下面的示例为名为 Deploy 的阶段配置了“失败时”条件:

    { "name": "Deploy", "actions": [ { "name": "Deploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "provider": "S3", "version": "1" }, "runOrder": 1, "configuration": { "BucketName": "MyBucket", "Extract": "false", "ObjectKey": "object.xml" }, "outputArtifacts": [], "inputArtifacts": [ { "name": "SourceArtifact" } ], "region": "us-east-1", "namespace": "DeployVariables" } ], "onFailure": { "conditions": [ { "result": "ROLLBACK", "rules": [ { "name": "MyLambdaRule", "ruleTypeId": { "category": "Rule", "owner": "AWS", "provider": "LambdaInvoke", "version": "1" }, "configuration": { "FunctionName": "my-function" }, "inputArtifacts": [ { "name": "SourceArtifact" } ], "region": "us-east-1" } ] } ] } }

    有关配置失败条件的更多信息,请参阅《CodePipeline API 参考》中的 FailureConditions

创建“失败时”条件(CFN)

要使用 Amazon CloudFormation 配置“失败时”条件,请使用 OnFailure 参数。成功时,阶段将运行规则并执行结果。

OnFailure: Result: ROLLBACK
  • 更新模板,如以下代码段所示。下面的示例使用名为 MyMonitorRule 的规则配置了 OnFailure 条件:

    name: Deploy actions: - name: Deploy actionTypeId: category: Deploy owner: AWS provider: S3 version: '1' runOrder: 1 configuration: BucketName: MyBucket Extract: 'false' ObjectKey: object.xml outputArtifacts: [] inputArtifacts: - name: SourceArtifact region: us-east-1 namespace: DeployVariables OnFailure: conditions: - result: ROLLBACK rules: - name: MyMonitorRule ruleTypeId: category: Rule owner: AWS provider: CloudWatchAlarm version: '1' configuration: AlarmName: AlarmOnHelloWorldInvocation AlarmStates: ALARM WaitTime: '1' inputArtifacts: [] region: us-east-1

    有关配置失败条件的更多信息,请参阅《Amazon CloudFormation 用户指南》中的 StageDeclaration 下的 OnFailure

创建“成功时”条件

您可以使用控制台或 CLI 配置阶段的“成功时”条件。您将为每个条件配置相应的规则和结果。对于回滚结果,只有当前一次执行是在当前管道结构版本中启动时,管道才能回滚到前一次执行。

这些步骤提供了使用部署窗口规则的“成功时”条件示例。

有关更多信息,请参阅《CodePipeline API 指南》中的条件RuleTypeIdRuleExecution

创建“成功时”条件(控制台)

您可以为阶段配置“成功时”条件,以及您希望阶段在满足条件时执行的规则和结果。

配置“成功时”条件(控制台)
  1. 完成所有前提条件,例如为提供资源的规则(如 Amazon LambdaRule)创建资源和 ARN。

  2. 通过以下网址登录Amazon Web Services 管理控制台并打开 CodePipeline 控制台:http://console.aws.amazon.com/codesuite/codepipeline/home

    显示所有与您的 Amazon Web Services 账户关联的管道的名称和状态。

  3. Name 中,选择您要编辑的管道的名称。

  4. 在管道详细信息页中,选择编辑

  5. 编辑页面上,对于要编辑的操作,选择编辑阶段

  6. 选择添加成功条件。此时将显示阶段成功条件卡。选择显示为该条件类型的可用结果的回滚失败选项。

  7. 选择添加规则,然后完成以下操作。

    1. 规则名称中,输入条件的名称。在此示例中,请输入 MyDeploymentRule

    2. 规则提供程序中,选择要添加到条件中的预配置规则。在此示例中,选择 Amazon DeploymentWindow,然后完成以下步骤。

    3. 区域中,选择适合您条件的区域或保留默认值。

    4. Cron 中,输入部署窗口的 cron 表达式。cron 表达式定义了允许部署的天数和时间。有关 cron 表达式的参考信息,请参阅使用 cron 和 rate 表达式计划规则

    5. (可选)在时区中,输入部署窗口的时区。

  8. 运行后,查看结果。

    CodePipeline 中的条件示例。

创建“成功时”条件(CLI)

要使用 Amazon CLI 配置“成功时”条件,请使用创建或更新管道的命令,详见创建管道、阶段和操作在 CodePipeline 中编辑管道

配置条件和一条或多条规则(CLI)
  • 打开终端(Linux、macOS 或 Unix)或命令提示符(Windows),并使用 Amazon CLI 运行 update-pipeline 命令,指定管道结构中的失败条件。下面的示例为名为 Deploy 的阶段配置了“成功时”条件,其中的规则名为 MyDeploymentRule

    { "name": "Deploy", "actions": [ { "name": "Deploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "provider": "S3", "version": "1" }, "runOrder": 1, "configuration": { "BucketName": "MyBucket", "Extract": "false", "ObjectKey": "object.xml" }, "outputArtifacts": [], "inputArtifacts": [ { "name": "SourceArtifact" } ], "region": "us-east-1", "namespace": "DeployVariables" } ], "onSuccess": { "conditions": [ { "result": "FAIL", "rules": [ { "name": "MyAlarmRule", "ruleTypeId": { "category": "Rule", "owner": "AWS", "provider": "CloudWatchAlarm", "version": "1" }, "configuration": { "AlarmName": "CWAlarm", "WaitTime": "1" }, "inputArtifacts": [], "region": "us-east-1" } ] } ] } }

    有关配置成功条件的更多信息,请参阅《CodePipeline API 参考》中的 SuccessConditions

创建“成功时”条件(CFN)

要使用 Amazon CloudFormation 配置“成功时”条件,请使用 OnSuccess 参数。成功时,阶段将运行规则并执行结果。

OnSuccess: Result: ROLLBACK
  • 更新模板,如以下代码段所示。下面的示例使用名为 MyDeploymentWindowRule 的规则配置了 OnSuccess 条件:

    name: Deploy actions: - name: Deploy actionTypeId: category: Deploy owner: AWS provider: S3 version: '1' runOrder: 1 configuration: BucketName: MyBucket Extract: 'false' ObjectKey: object.xml outputArtifacts: [] inputArtifacts: - name: SourceArtifact region: us-east-1 namespace: DeployVariables onSuccess: conditions: - result: FAIL rules: - name: MyMonitorRule ruleTypeId: category: Rule owner: AWS provider: CloudWatchAlarm version: '1' configuration: AlarmName: CWAlarm WaitTime: '1' inputArtifacts: [] region: us-east-1

    有关配置阶段回滚失败条件的更多信息,请参阅《Amazon CloudFormation 用户指南》中的 StageDeclaration 下的 OnFailure

删除阶段条件

您可以删除为管道配置的阶段条件。

删除阶段条件
  1. 通过以下网址登录Amazon Web Services 管理控制台并打开 CodePipeline 控制台:http://console.aws.amazon.com/codesuite/codepipeline/home

    显示所有与您的 Amazon Web Services 账户关联的管道的名称和状态。

  2. Name 中,选择您要编辑的管道的名称。

  3. 在管道详细信息页中,选择编辑

  4. 编辑页面上,对于要编辑的条件,选择编辑阶段

  5. 在要删除的条件旁边,选择删除条件

覆盖阶段条件

您可以覆盖为管道配置的阶段条件。在控制台中,当阶段和规则运行时,您可以选择覆盖阶段条件。这会导致阶段运行

覆盖阶段条件
  1. 在此示例中,管道阶段在条件下运行。覆盖按钮已启用。

    CodePipeline 中的条件示例。
  2. 在要覆盖的条件旁边,选择覆盖

    CodePipeline 中的条件示例。
  3. 要查看详细信息,请选择查看。以下示例中的详细信息显示,条件的配置结果为“失败”,但已被覆盖。由于覆盖,规则状态为 Abandoned。

    显示 CodePipeline 中覆盖条件的条件详细信息页面示例。