

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 트리거 및 필터링을 사용하여 시작 파이프라인 자동화
<a name="pipelines-triggers"></a>

트리거를 사용하면 특정 브랜치 또는 풀 요청에 대한 변경 사항이 감지되는 경우와 같이 특정 이벤트 유형 또는 필터링된 이벤트 유형에서 시작하도록 파이프라인을 구성할 수 있습니다. 트리거는 GitHub, Bitbucket 및 GitLab과 같이 CodePipeline에서 `CodeStarSourceConnection` 작업을 사용하는 연결을 통해 소스 작업에 대해 구성할 수 있습니다. 연결을 사용하는 소스 작업에 대한 자세한 내용은 [CodeConnections를 사용하여 파이프라인에 타사 소스 공급자 추가](pipelines-connections.md) 섹션을 참조하세요.

CodeCommit 및 S3와 같은 소스 작업은 자동 변경 감지를 사용하여 변경 시 파이프라인을 시작합니다. 자세한 내용은 [CodeCommit 소스 작업 및 EventBridge](triggering.md) 단원을 참조하십시오.

콘솔 또는 CLI를 사용하여 트리거를 지정합니다.

다음과 같이 필터 유형을 지정합니다.
+ **필터 없음**

  이 트리거 구성은 작업 구성의 일부로 지정된 기본 브랜치로 푸시할 때마다 파이프라인을 시작합니다.
+ **필터 지정**

  코드 푸시의 브랜치 이름과 같은 특정 필터에서 파이프라인을 시작하고 정확한 커밋을 가져오는 필터를 추가합니다. 또한 변경 시 파이프라인이 자동으로 시작되지 않도록 구성합니다.
  + **푸시**
    + 유효한 필터 조합은 다음과 같습니다.
      + **Git 태그**

        Include 또는 exclude
      + **브랜치**

        Include 또는 exclude
      + **브랜치 \+ 파일 경로**

        Include 또는 exclude
  + **풀 요청**
    + 유효한 필터 조합은 다음과 같습니다.
      + **브랜치**

        Include 또는 exclude
      + **브랜치 \+ 파일 경로**

        Include 또는 exclude
+ **변경 사항을 감지하지 않음**

  이렇게 해도 트리거가 추가되지 않으며 파이프라인은 변경 시 자동으로 시작되지 않습니다.

다음 표에서는 각 이벤트 유형에 유효한 필터 옵션을 제공합니다. 이 표에는 작업 구성에서 자동 변경 감지를 위해 기본적으로 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) 섹션을 참조하세요.
+ 브랜치 및 파일 경로 필터가 있는 트리거의 경우 브랜치를 처음 푸시할 때 새로 생성된 브랜치에 대해 변경된 파일 목록에 액세스할 수 없으므로 파이프라인이 실행되지 않습니다.
+ 풀 요청을 병합하면 푸시(브랜치 필터)와 풀 요청(브랜치 필터) 트리거 구성이 교차하는 경우 두 파이프라인 실행이 트리거될 수 있습니다.
+ 풀 요청 이벤트에서 파이프라인을 트리거하는 필터의 경우 Closed 풀 요청 이벤트 유형의 경우 연결의 타사 리포지토리 공급자가 병합 이벤트에 대해 별도의 상태를 가질 수 있습니다. 예를 들어 Bitbucket에서 병합에 대한 Git 이벤트는 풀 요청 종료 이벤트가 아닙니다. 그러나 GitHub에서 풀 요청을 병합하는 것은 종료 이벤트입니다. 자세한 내용은 [공급자별 트리거에 대한 풀 요청 이벤트](#pipelines-filter-pullrequest-events) 단원을 참조하십시오.
+ 파이프라인의 여러 소스 작업이 연결을 통해 동일한 리포지토리의 여러 브랜치를 참조하는 경우 하나의 브랜치만 파이프라인을 안정적으로 트리거합니다. 연결의 웹후크 구독은 브랜치당이 아닌 파이프라인과 리포지토리의 조합에 등록됩니다. 해결 방법으로 각 브랜치에 대해 별도의 파이프라인을 사용합니다.

## 공급자별 트리거에 대한 풀 요청 이벤트
<a name="pipelines-filter-pullrequest-events"></a>

다음 테이블에는 풀 요청 종료와 같이 공급자별로 풀 요청 이벤트 유형을 생성하는 Git 이벤트의 요약이 나와 있습니다.


****  
[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/codepipeline/latest/userguide/pipelines-triggers.html)

## 트리거 필터의 예
<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` 및 `branches`)가 있는 푸시 이벤트 유형에 대한 Git 구성을 보여줍니다. 다음 예제에서는 `filePaths`가 `branches`와 함께 AND가 됩니다.  

```
{
  "filePaths": {
    "includes": ["common/**/*.js"]
  },
  "branches": {
    "includes": ["feature/**"]
  }
}
```
위의 Git 구성으로 이 예제에서는 AND 작업이 성공하므로 파이프라인 실행이 시작되는 이벤트를 보여줍니다. 즉, 지정된 브랜치 `refs/heads/feature/triggers `에 영향을 미치지 않았더라도, `common/app.js`라는 파일 경로가 필터에 포함되어 파이프라인을 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/ko_kr/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` 브랜치(두 번째 푸시 필터에 포함됨)에서 릴리스를 푸시하면 파이프라인이 시작됩니다.
   
다음 편집 페이지 예제는 두 가지 푸시 필터 유형과 포함/제외 설정을 보여줍니다.  

![릴리스-1 태그를 포함하는 푸시 필터 유형과 메인* 브랜치를 포함하고 특성* 브랜치를 제외하는 푸시 필터 유형을 포함한 트리거 구성 예제](http://docs.aws.amazon.com/ko_kr/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/ko_kr/codepipeline/latest/userguide/images/example-source-action-manual.png)

다음 예제 작업 출력은 풀 요청으로 필터링할 때 트리거에 사용된 풀 요청 및 브랜치를 보여줍니다.  

![트리거 풀 요청 필터 유형으로 시작된 파이프라인에 대한 예제 작업 출력 페이지](http://docs.aws.amazon.com/ko_kr/codepipeline/latest/userguide/images/example-source-action-pr.png)
