为舞台配置条件 - AWS CodePipeline

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为舞台配置条件

您可以为阶段指定条件,例如检查管道运行中的特定变量,然后为该条件输入结果,例如跳过该阶段或该阶段失败。可以将管道设置为在运行期间检查阶段条件,您可以在其中指定阶段的检查,然后指定在满足某些条件时该阶段应如何继续。条件包含一条或多条规则,这些规则可在中的规则列表中找到 CodePipeline。如果条件中的所有规则都成功,则该条件即得到满足。您可以配置条件,以便在不满足条件时,指定结果生效。

每个条件都有一个规则集,该规则集是一组有序的规则,可以一起评估。因此,如果一条规则在该条件下失败,则该条件失败。您可以在管道运行时覆盖规则条件。

条件用于特定类型的表达式,每个表达式都有特定的结果选项,如下所示:

  • 入场-进行检查的条件,如果满足这些条件,则允许进入舞台。规则使用以下结果选项:“失败” 或 “跳过

  • 失败时-在舞台失败时对其进行检查的条件。规则使用以下结果选项:回滚

  • On Success-成功时对阶段进行检查的条件。规则使用以下结果选项:“回滚” 或 “失败”

每种条件类型都有一组规则来支持条件。

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

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

舞台条件的用例

阶段条件有多个用例,用于在管道中设置释放和更改安全性。以下是舞台条件的示例用例。

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

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

  • 使用 On Success 条件定义一个条件,这样当该阶段成功完成时,该规则将检查当前时间是否在部署窗口中,然后在规则成功时进行部署。

针对阶段条件配置的结果的注意事项

舞台条件的注意事项如下:

  • 您不能对 onFailure 条件使用自动阶段重试。

  • 在配置带有 Rollback 结果的条件时,只有在当前工作流结构版本中可用的情况下,该阶段才能回滚到之前的执行。

  • 使用回滚结果配置条件时,您无法回滚到回滚执行类型的目标执行 ID。

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

  • 您无法在处于 “已跳过” 状态的舞台上执行手动阶段重试。

  • 您无法手动回滚到处于 “已跳过” 状态的阶段。

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

  • 除了 “跳过结果” 之外,您可以在开始执行管道时覆盖阶段条件。对于使用重写的阶段条件,执行将如下表所示。

  • 类型 条件失败时的配置结果 舞台状态 重写行为
    条目 Fail 进行中 舞台继续进行。
    条目 跳过 Skipped 不适用。

    OnFailure

    回滚 失败 舞台失败了。
    OnSuccess 回滚 成功 舞台继续进行。

    OnSuccess

    Fail 失败 舞台继续进行。

为阶段条件配置的规则的注意事项

阶段条件的可用规则的注意事项如下:

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

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

创建入境条件

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

这些步骤提供了使用监控规则的输入条件示例。

有关更多信息,请参阅CodePipeline API《指南》RuleExecution中的 “状况” 和。RuleTypeId

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

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

配置进入条件(控制台)
  1. 完成所有先决条件,例如创建资源和ARN提供资源的规则,例如AWS CloudWatchAlarm

  2. 登录 AWS Management Console 并打开 CodePipeline 控制台,网址为 http://console.aws.amazon。 com/codesuite/codepipeline/home

    将显示与您 AWS 账户 关联的所有管道的名称和状态。

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

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

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

  6. 选择 “添加输入条件”。此时将显示 “进入舞台之前” 条件卡,其中包含适用于该条件的 “失败” 选项。

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

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

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

    3. 在 “区域” 中,根据您的条件选择区域或保留默认值。

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

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

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

    7. 编辑完舞台后,选择 “完成”。在管道编辑页面上,选择保存

  8. 运行后,查看结果。

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

您可以为阶段配置进入条件,这样如果不满足进入条件,则跳过该阶段。如果条件失败,则结果将启动并跳过该阶段。跳过阶段时,舞台状态为 “已跳过”,操作状态为 “运行”。有关带有 “跳过” 结果的阶段条件的注意事项,请参阅针对阶段条件配置的结果的注意事项

在以下示例中,变量检查规则发现该值不匹配,因此跳过了生成阶段。

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

  2. 登录 AWS Management Console 并打开 CodePipeline 控制台,网址为 http://console.aws.amazon。 com/codesuite/codepipeline/home

    将显示与您 AWS 账户 关联的所有管道的名称和状态。

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

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

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

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

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

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

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

      使用的一个发布流程示例 CodePipeline。
    3. 在 “区域” 中,根据您的条件选择区域或保留默认值。

    4. 变量中,选择要与之比较#{SourceVariables.FullRepositoryName}的变量,例如具有 GitHub 版本 2 源操作的管道。输入存储库名称并选择运算符,例如 Equals。

    5. 编辑完舞台后,选择 “完成”。在管道编辑页面上,选择保存

  8. 运行后,查看结果。

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

    一个示例条件详细信息页面,其中显示了 “跳过” 结果条件 CodePipeline。

创建入境条件 (CLI)

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

配置条件和一个或多个规则 (CLI)
  • 打开终端(Linux、macOS 或 Unix)或命令提示符 (Windows),然后使用运行update-pipeline命令,在管道结构中指定失败条件。 AWS CLI 以下示例为名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)

AWS 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 条件的更多信息,请参阅 BeforeEntryConditions《AWS CloudFormation 用户指南StageDeclaration中的AWSCodePipeline::: Pipelin e。

创建失败时条件

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

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

您可以为阶段配置 On Failure 条件,以及您希望该阶段在满足条件时执行的规则和结果。

配置 “出现故障” 条件(控制台)
  1. 完成所有先决条件,例如创建资源和ARN提供资源的规则(例如LambdaInvoke规则)。

  2. 登录 AWS Management Console 并打开 CodePipeline 控制台,网址为 http://console.aws.amazon。 com/codesuite/codepipeline/home

    将显示与您 AWS 账户 关联的所有管道的名称和状态。

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

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

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

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

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

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

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

    3. 在 “区域” 中,根据您的条件选择区域或保留默认值。

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

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

    6. (可选)在用户参数中,输入代表其他配置参数的任意对。

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

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

    9. 编辑完舞台后,选择 “完成”。在管道编辑页面上,选择保存

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

您可以为阶段配置 onFailure 条件,以便在不满足进入条件时重试该阶段。作为此结果的一部分,您可以配置重试模式,指定是重试失败的操作还是重试失败的阶段。

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

  2. 登录 AWS Management Console 并打开 CodePipeline 控制台,网址为 http://console.aws.amazon。 com/codesuite/codepipeline/home

    将显示与您 AWS 账户 关联的所有管道的名称和状态。

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

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

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

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

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

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

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

    3. 在 “区域” 中,根据您的条件选择区域或保留默认值。

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

    5. 编辑完舞台后,选择 “完成”。在管道编辑页面上,选择保存

  8. 运行后,查看结果。

创建失败时条件 (CLI)

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

配置条件和一个或多个规则 (CLI)
  • 打开终端(Linux、macOS 或 Unix)或命令提示符 (Windows),然后使用运行update-pipeline命令,在管道结构中指定失败条件。 AWS CLI 以下示例为名Deploy为的阶段配置 On Failure 条件:

    { "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)

AWS 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

    有关配置故障条件的更多信息,请参阅OnFailureAWS CloudFormation 用户指南StageDeclaration中的。

创建 “成功时” 条件

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

这些步骤提供了使用部署窗口规则的 On Success 条件示例。

有关更多信息,请参阅CodePipeline API《指南》RuleExecution中的 “状况” 和。RuleTypeId

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

您可以为阶段配置 On Success 条件,以及您希望该阶段在满足条件时执行的规则和结果。

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

  2. 登录 AWS Management Console 并打开 CodePipeline 控制台,网址为 http://console.aws.amazon。 com/codesuite/codepipeline/home

    将显示与您 AWS 账户 关联的所有管道的名称和状态。

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

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

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

  6. 选择添加成功条件。将显示 “在舞台上成功条件” 卡片。选择显示为该条件类型的可用结果的 “回滚” 或 “失败” 选项。

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

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

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

    3. 在 “区域” 中,根据您的条件选择区域或保留默认值。

    4. 在 Cron 中,输入部署窗口的 cron 表达式。cron 表达式定义了应允许部署的日期和时间。有关 cron 表达式的参考信息,请参阅使用 cron 和速率表达式调度规则

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

  8. 运行后,查看结果。

    中的示例条件 CodePipeline。

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

要使用 AWS CLI 来配置 On Success 条件,请使用命令创建或更新管道,详见创建管道、阶段和操作和中在中编辑管道 CodePipeline

配置条件和一个或多个规则 (CLI)
  • 打开终端(Linux、macOS 或 Unix)或命令提示符 (Windows),然后使用运行update-pipeline命令,在管道结构中指定失败条件。 AWS CLI 以下示例为名为的分阶段配置 On Success 条件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)

AWS 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

    有关为阶段回滚配置故障条件的更多信息,请参阅OnFailureAWS CloudFormation 用户指南StageDeclaration中的。

删除舞台条件

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

删除阶段条件
  1. 登录 AWS Management Console 并打开 CodePipeline 控制台,网址为 http://console.aws.amazon。 com/codesuite/codepipeline/home

    将显示与您 AWS 账户 关联的所有管道的名称和状态。

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

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

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

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

重写舞台条件

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

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

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

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

    一个示例条件详细信息页面,其中显示了被覆盖的条件。 CodePipeline