

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用觸發和篩選來自動化啟動管道
<a name="pipelines-triggers"></a>

觸發可讓您設定管道以啟動特定事件類型或篩選的事件類型，例如偵測到特定分支或提取請求的變更時。對於在 CodePipeline 中使用 動作的連線，例如 GitHub、Bitbucket 和 GitLab，可設定來源`CodeStarSourceConnection`動作的觸發。如需使用連線之來源動作的詳細資訊，請參閱 [使用 CodeConnections 將第三方來源提供者新增至管道](pipelines-connections.md)。

CodeCommit 和 S3 等來源動作會使用自動變更偵測，在進行變更時啟動管道。如需詳細資訊，請參閱[CodeCommit 來源動作和 EventBridge](triggering.md)。

您可以使用主控台或 CLI 指定觸發。

您可以指定篩選條件類型，如下所示：
+ **無篩選條件**

  此觸發組態會在任何推送至動作組態中指定的預設分支時啟動您的管道。
+ **指定篩選條件**

  您可以新增篩選條件，在特定篩選條件上啟動管道，例如在程式碼推送的分支名稱上，並擷取確切的遞交。這也會將管道設定為不會在任何變更時自動啟動。
  + **推送**
    + 有效的篩選條件組合包括：
      + **Git 標籤**

        包含或排除
      + **分支**

        包含或排除
      + **分支 \$1 檔案路徑**

        包含或排除
  + **提取請求**
    + 有效的篩選條件組合包括：
      + **分支**

        包含或排除
      + **分支 \$1 檔案路徑**

        包含或排除
+ **請勿偵測變更**

  這不會新增觸發，而且管道不會在任何變更時自動啟動。

下表為每個事件類型提供有效的篩選選項。資料表也會針對動作組態中的自動變更偵測，顯示哪些觸發組態預設為 true 或 false。


****  

| 觸發組態 | 事件類型 | 篩選條件選項 | 偵測變更 | 
| --- | --- | --- | --- | 
| 新增觸發條件 – 無篩選條件 | 無 | 無 | true | 
| 新增觸發條件 – 程式碼推送時篩選 | 推送事件 | Git 標籤、分支、檔案路徑 | false | 
| 新增觸發條件 – 提取請求的篩選條件  | 提取請求 | 分支、檔案路徑 | false | 
| 無觸發 – 請勿偵測 | 無 | 無 | false | 

**注意**  
此觸發類型使用自動變更偵測 （做為`Webhook`觸發類型）。使用此觸發類型的來源動作提供者是針對程式碼推送設定的連線 (Bitbucket Cloud、GitHub、GitHub Enterprise Server、GitLab.com,和 GitLab 自我管理）。

如需欄位定義和觸發的進一步參考，請參閱 

如需 JSON 結構中的欄位定義清單，請參閱 [`triggers`](pipeline-requirements.md#pipeline.triggers)。

對於篩選，支援 glob 格式的規則表達式模式，如 中所述[使用語法中的 glob 模式](syntax-glob.md)。

**注意**  
在某些情況下，對於具有在檔案路徑上篩選之觸發條件的管道，管道可能不會在第一次建立具有檔案路徑篩選條件的分支時啟動。如需詳細資訊，請參閱[具有使用檔案路徑觸發篩選之連線的管道可能不會在分支建立時開始](troubleshooting.md#troubleshooting-file-paths-filtering)。

## 觸發條件篩選條件的考量事項
<a name="pipelines-filter-considerations"></a>

使用觸發程序時，適用下列考量事項。
+ 每個來源動作不能新增多個觸發。
+ 您可以將多個篩選條件類型新增至觸發條件。如需範例，請參閱 [4：具有兩種具有衝突的推送篩選條件類型的觸發條件包含和排除](#example-filter-multiple-push)。
+ 對於具有分支和檔案路徑篩選條件的觸發，第一次推送分支時，管道不會執行，因為無法存取新建立分支變更的檔案清單。
+ 在推送 （分支篩選條件） 和提取請求 （分支篩選條件） 觸發組態相交的情況下，合併提取請求可能會觸發兩個管道執行。
+ 對於在提取請求事件上觸發管道的篩選條件，對於封閉提取請求事件類型，連線的第三方儲存庫提供者可能具有合併事件的個別狀態。例如，在 Bitbucket 中，合併的 Git 事件不是提取請求關閉事件。不過，在 GitHub 中，合併提取請求是關閉事件。如需詳細資訊，請參閱[依供應商提取觸發的請求事件](#pipelines-filter-pullrequest-events)。

## 依供應商提取觸發的請求事件
<a name="pipelines-filter-pullrequest-events"></a>

下表提供 Git 事件的摘要，例如用於提取請求關閉，這會導致依提供者的提取請求事件類型。


****  

|  | 連線的儲存庫提供者 | 觸發的 PR 事件 | Bitbucket | GitHub | GHES | GitLab | 
| --- | --- | --- | --- | --- | --- | --- | 
| 開啟 - 此選項會在為分支/檔案路徑建立提取請求時觸發管道。 | 建立提取請求會導致開啟的 Git 事件。 | 建立提取請求會導致開啟的 Git 事件。 | 建立提取請求會導致開啟的 Git 事件。 | 建立提取請求會導致開啟的 Git 事件。 | 
| 更新 - 當針對分支/檔案路徑發佈提取請求修訂時，此選項會觸發管道。 | 發佈更新會導致更新的 Git 事件。 | 發佈更新會導致更新的 Git 事件。 | 發佈更新會導致更新的 Git 事件。 | 發佈更新會導致更新的 Git 事件。 | 
| 已關閉 - 此選項會在分支/檔案路徑的提取請求關閉時觸發管道。 | 在 Bitbucket 中合併提取請求會導致關閉 Git 事件。重要：在 Bitbucket 中手動關閉提取請求而不合併不會導致關閉 Git 事件。 | 合併或手動關閉提取請求會導致關閉 Git 事件。 | 合併或手動關閉提取請求會導致關閉 Git 事件。 | 合併或手動關閉提取請求會導致關閉 Git 事件。 | 

## 觸發條件篩選條件的範例
<a name="pipelines-filter-examples"></a>

對於具有推送和提取請求事件類型篩選條件的 Git 組態，指定的篩選條件可能會彼此衝突。以下是推送和提取請求事件的有效篩選條件組合範例。觸發可以包含多種篩選條件類型，例如觸發組態中的兩種推送篩選條件類型，而推送和提取請求篩選條件類型將在它們之間使用 OR 操作，這表示任何相符項目都會啟動管道。同樣地，每個篩選條件類型可以包含多個篩選條件，例如 filePaths 和分支；這些篩選條件將使用 AND 操作，這表示只有完全相符項目才會啟動管道。每個篩選條件類型可以包含 和 排除，其中排除優先於 包含。如果分支或檔案路徑符合排除模式，即使也符合包含模式，也不會觸發管道。當遞交變更多個檔案時，會根據篩選條件獨立評估每個檔案；如果任何變更的檔案通過 （符合 包含和不符合 排除），管道就會啟動。包含/排除 內的名稱，例如分支名稱，請使用 OR 操作。下列清單摘要說明 Git 組態物件每個部分的操作。

如需 JSON 結構中的欄位定義清單，以及包含和排除 的詳細參考，請參閱 [`triggers`](pipeline-requirements.md#pipeline.triggers)。

**Example 1：具有分支和檔案路徑篩選條件的篩選條件類型 (AND 操作）**  <a name="example-filter-branches-filepaths"></a>
對於提取請求等單一篩選條件類型，您可以結合篩選條件，這些篩選條件將使用 AND 操作，這表示只有完全相符項目才會啟動管道。下列範例顯示具有兩個不同篩選條件 (`filePaths` 和 ) 的推送事件類型的 Git 組態`branches`。在下列範例中， `filePaths`將使用 AND’ed with `branches`：  

```
{
  "filePaths": {
    "includes": ["common/**/*.js"]
  },
  "branches": {
    "includes": ["feature/**"]
  }
}
```
使用上面的 Git 組態，此範例顯示由於 AND 操作成功而開始管道執行的事件。換言之，篩選條件`common/app.js`會包含檔案路徑，即使`refs/heads/feature/triggers `指定的分支沒有影響，也會將管道啟動為 AND。  

```
{
  "ref": "refs/heads/feature/triggers",
  ...
  "commits": [
    {
      ...
      "modified": [
        "common/app.js"
      ]
      ...
    }
  ]
}
```
下列範例顯示具有上述組態的觸發事件，不會啟動管道執行，因為分支可以篩選，但檔案路徑不是。  

```
{
   "ref": "refs/heads/feature/triggers",
  ...
  "commits": [
    {
      ...
      "modified": [
        "src/Main.java"
      ]
      ...
    }
  ]
}
```

**Example 2：排除優先於包含**  <a name="example-filter-includes-excludes"></a>
在單一篩選條件中，排除優先於 包含 。下列範例顯示組態物件中具有單一篩選條件 (`branches`) 的 Git 組態。這表示如果分支符合排除模式 (`feature-branch` 範例中為 )，即使管道也符合包含模式，也不會觸發管道。如果包含模式相符且沒有排除模式相符，例如`main`分支的 ，則會觸發管道。  
對於下列範例 JSON：  
+ 將遞交推送至`main`分支會觸發管道
+ 將遞交推送到`feature-branch`分支不會觸發管道。

```
{
  "branches": {
      "Includes": [
          "main"
      ],
      "Excludes": [
          "feature-branch"
      ]
   }
```

**Example 3：具有推送和提取請求篩選條件類型的觸發 (OR 操作）、檔案路徑和分支的篩選條件 (AND 操作），以及包含/排除 （排除優先）**  <a name="example-filter-push-pullrequest"></a>
觸發組態物件，例如包含推送事件類型和提取請求事件類型的觸發，請在兩個事件類型之間使用 OR 操作。下列範例顯示的觸發組態具有包含`main`分支的推送事件類型，以及一個`main`排除相同分支的提取請求事件類型。此外，推送事件類型已`LICENSE.txt`排除一個檔案路徑，並`README.MD`包含一個檔案路徑。對於第二個事件類型，`feature-branch`分支 （包含） `Created` 上 `Closed`或 的提取請求會啟動管道，而管道在 `feature-branch-2`或 `main`分支 （排除） 上建立或關閉提取請求時不會啟動。在每個事件類型中，排除會優先於包含 。例如，對於`feature-branch`分支上的提取請求事件 （包含於提取請求），推送事件類型會排除`feature-branch`分支，因此推送不會觸發管道。  
針對下列範例，  
+ 將遞交推送至`README.MD`檔案路徑 （包含） 的`main`分支 （包含） 將觸發管道。
+ 在`feature-branch`分支 （已排除） 上，推送遞交不會觸發管道。
+ 在包含的分支上，編輯`README.MD`檔案路徑 （包含） 會觸發管道。
+ 在包含的分支上，僅編輯`LICENSE.TXT`檔案路徑 （排除） 不會觸發管道。不過，如果相同的遞交也會變更 `README.MD`（包含），則管道會觸發 ，因為每個檔案都會獨立評估。
+ 在`feature-branch`分支上，關閉提取請求會觸發管道，因為 `feature-branch` 包含提取請求事件類型和事件類型 CLOSED 相符項目。
下圖顯示 組態。  

![\[具有推送篩選條件類型和提取請求篩選條件類型的範例觸發組態\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/example-trigger-filters-pushpluspullrequest.png)

以下是組態的範例 JSON。  

```
"triggers": [
            {
                "providerType": "CodeStarSourceConnection",
                "gitConfiguration": {
                    "sourceActionName": "Source",
                    "push": [
                        {
                            "branches": {
                                "includes": [
                                    "main"
                                ],
                                "excludes": [
                                    "feature-branch",
                                    "feature-branch-2"
                                ]
                            },
                            "filePaths": {
                                "includes": [
                                    "README.md"
                                ],
                                "excludes": [
                                    "LICENSE.txt"
                                ]
                            }
                        }
                    ],
                    "pullRequest": [
                        {
                            "events": [
                                "CLOSED",
                                "OPEN"
                            ],
                            "branches": {
                                "includes": [
                                    "feature-branch"
                                ],
                                "excludes": [
                                    "feature-branch-2",
                                    "main"
                                ]
                            }
                        }
                    ]
                }
            }
        ]
    },
```

**Example 4：具有兩種具有衝突的推送篩選條件類型的觸發條件包含和排除**  <a name="example-filter-multiple-push"></a>
下圖顯示推送篩選條件類型，指定在 標籤 `release-1`（包含） 上進行篩選。新增第二個推送篩選條件類型，指定 在分支 `main`（包含） 上進行篩選，且不開始推送至`feature*`分支 （排除）。  
在下列範例中：  
+ 從`feature-branch`分支上的標籤 `release-1`（包含於第一個推送篩選條件） 推送版本 （排除`feature*`於第二個推送篩選條件） 將觸發管道，因為兩個推送篩選條件類型在兩者之間使用 OR 操作，且第一個推送篩選條件 （標籤 `release-1`) 相符。
+ 從`main`分支推送版本 （包含於第二個推送篩選條件） 將啟動管道。
   
下列編輯頁面範例顯示兩種推送篩選條件類型及其 的組態，包括 和 排除。  

![\[具有包含 release-1 標籤的推送篩選條件類型，以及包含 main* 分支且排除 feature* 分支的推送篩選條件類型的範例觸發組態\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/example-trigger-filters-pushtags-pushbranches.png)


以下是組態的範例 JSON。

```
"triggers": [
            {
                "providerType": "CodeStarSourceConnection",
                "gitConfiguration": {
                    "sourceActionName": "Source",
                    "push": [
                        {
                            "tags": {
                                "includes": [
                                    "release-1"
                                ]
                            }
                        },
                        {
                            "branches": {
                                "includes": [
                                    "main*"
                                ],
                                "excludes": [
                                    "feature*"
                                ]
                            }
                        }
                    ]
                }
            }
        ]
    },
```

**Example 5：在預設動作組態 BranchName 用於手動啟動時設定的觸發**  <a name="example-filter-default-manual"></a>
  
動作組態預設`BranchName`欄位定義了在管道手動啟動時將使用的單一分支，而具有篩選條件的觸發條件可用於您指定的任何分支。  
以下是顯示 `BranchName` 欄位之動作組態的範例 JSON。  

```
{
                "name": "Source",
                "actions": [
                    {
                        "name": "Source",
                        "actionTypeId": {
                            "category": "Source",
                            "owner": "AWS",
                            "provider": "CodeStarSourceConnection",
                            "version": "1"
                        },
                        "runOrder": 1,
                        "configuration": {
                            "BranchName": "main",
                            "ConnectionArn": "ARN",
                            "DetectChanges": "false",
                            "FullRepositoryId": "owner-name/my-bitbucket-repo",
                            "OutputArtifactFormat": "CODE_ZIP"
                        },
                        "outputArtifacts": [
                            {
                                "name": "SourceArtifact"
                            }
                        ],
                        "inputArtifacts": [],
                        "region": "us-west-2",
                        "namespace": "SourceVariables"
                    }
                ],
```
下列範例動作輸出顯示手動啟動管道時使用了預設分支主節點。  

![\[手動啟動管道的動作輸出頁面範例\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/example-source-action-manual.png)

下列範例動作輸出顯示提取請求和分支，當依提取請求篩選時，用於觸發。  

![\[以觸發提取請求篩選條件類型啟動的管道的動作輸出頁面範例\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/example-source-action-pr.png)
