

Amazon CodeCatalyst는 더 이상 신규 고객에게 공개되지 않습니다. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [CodeCatalyst에서 마이그레이션하는 방법](migration.md) 단원을 참조하십시오.

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

# 자습서: GitHub 작업을 사용한 린트 코드
<a name="integrations-github-action-tutorial"></a>

이 자습서에서는 Amazon CodeCatalyst 워크플로에 [Super-Linter GitHub 작업](https://github.com/marketplace/actions/super-linter)을 추가합니다. Super-Linter 작업은 코드를 검사하고, 코드에 오류가 있는 영역, 서식 문제, 의심스러운 구문을 찾은 다음, 결과를 CodeCatalyst 콘솔에 출력합니다. 워크플로에 린터를 추가한 후 워크플로를 실행하여 샘플 Node.js 애플리케이션(`app.js`)을 린트합니다. 그런 다음 보고된 문제를 수정하고 워크플로를 다시 실행하여 수정 사항이 제대로 작동하는지 확인합니다.

**작은 정보**  
[CloudFormation 템플릿](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)과 같은 YAML 파일을 린트하기 위해 Super-Linter를 사용하는 것이 좋습니다.

**Topics**
+ [사전 조건](#integrations-github-action-tutorial-prereqs)
+ [1단계: 소스 리포지토리 생성](#integrations-github-action-tutorial-create-source-repo)
+ [2단계: app.js 파일 추가](#integrations-github-action-tutorial-add-appjs)
+ [3단계: Super-Linter 작업을 실행하는 워크플로 생성](#integrations-github-action-tutorial-create-workflow)
+ [4단계: Super-Linter에서 발견한 문제 해결](#integrations-github-action-tutorial-fix-probs)
+ [정리](#integrations-github-action-tutorial-cleanup)

## 사전 조건
<a name="integrations-github-action-tutorial-prereqs"></a>

시작하려면 다음이 필요합니다.
+ 가 연결된 CodeCatalyst **스페이스**입니다 AWS 계정. 자세한 내용은 [스페이스 생성](spaces-create.md) 단원을 참조하십시오.
+ CodeCatalyst 스페이스의 이름이 `codecatalyst-linter-project`인 빈 프로젝트로. **처음부터 시작** 옵션을 선택하여 이 프로젝트를 생성합니다.

  ```
  ```

  자세한 내용은 [Amazon CodeCatalyst에서 빈 프로젝트 생성](projects-create.md#projects-create-empty) 섹션을 참조하세요.

## 1단계: 소스 리포지토리 생성
<a name="integrations-github-action-tutorial-create-source-repo"></a>

이 단계에서는 CodeCatalyst에 소스 리포지토리를 생성합니다. 이 리포지토리를 사용하여 이 자습서의 샘플 애플리케이션 소스 파일인 `app.js`를 저장합니다.

소스 리포지토리에 대한 자세한 정보는 [소스 리포지토리 생성](source-repositories-create.md) 섹션을 참조하세요.

**소스 리포지토리를 생성하려면**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/)에서 CodeCatalyst 콘솔을 엽니다.

1. `codecatalyst-linter-project` 프로젝트로 이동합니다.

1. 탐색 창에서 **코드**를 선택한 다음 **소스 리포지토리**를 선택합니다.

1. **리포지토리 추가**를 선택하고 **리포지토리 생성**을 선택합니다.

1. **리포지토리 이름**에 다음과 같이 입력합니다.

   ```
   codecatalyst-linter-source-repository
   ```

1. **생성(Create)**을 선택합니다.

## 2단계: app.js 파일 추가
<a name="integrations-github-action-tutorial-add-appjs"></a>

이 단계에서는 원본 리포지토리에 `app.js` 파일을 추가합니다. `app.js`에는 린터에서 찾을 수 있는 몇 가지 실수가 있는 함수 코드가 포함되어 있습니다.

**app.js 파일을 추가하려면**

1. CodeCatalyst 콘솔에서 `codecatalyst-linter-project` 프로젝트를 선택합니다.

1. 탐색 창에서 **코드**를 선택한 다음 **소스 리포지토리**를 선택합니다.

1. 소스 리포지토리 목록에서 `codecatalyst-linter-source-repository` 리포지토리를 선택합니다.

1. **파일**에서 **파일 생성**을 선택합니다.

1. 다음 코드를 텍스트 상자에 입력합니다.

   ```
   // const axios = require('axios')
   // const url = 'http://checkip.amazonaws.com/';
   let response;
   /**
    *
    * Event doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format
    * @param {Object} event - API Gateway Lambda Proxy Input Format
    *
    * Context doc: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html 
    * @param {Object} context
    *
    * Return doc: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html
    * @returns {Object} object - API Gateway Lambda Proxy Output Format
    *
    */
   exports.lambdaHandler = async (event, context) => {
     try {
       // const ret = await axios(url);
       response = {
         statusCode: 200,
         'body': JSON.stringify({
           message: 'hello world'
           // location: ret.data.trim()
         })
       }
     } catch (err) {
       console.log(err)
       return err
     }
   
       return response
   }
   ```

1. **파일 이름**에 `app.js`를 입력합니다. 다른 기본 옵션을 유지합니다.

1. **커밋**을 선택합니다.

   `app.js` 새 역할이 생성되었습니다.

## 3단계: Super-Linter 작업을 실행하는 워크플로 생성
<a name="integrations-github-action-tutorial-create-workflow"></a>

이 단계에서는 코드를 소스 리포지토리로 푸시할 때 Super-Linter 작업을 실행하는 워크플로를 생성합니다. 워크플로는 YAML 파일에 정의한 다음 구성 요소로 구성됩니다.
+ **트리거** - 이 트리거는 소스 리포지토리에 변경 사항을 푸시할 때 워크플로 실행을 자동으로 시작합니다. 트리거에 대한 자세한 내용은 [트리거를 사용하여 워크플로 실행 자동 시작](workflows-add-trigger.md) 주제를 참조하세요.
+ **'GitHub Actions' 작업** - 트리거 시 **GitHub Actions** 작업은 Super-Linter 작업을 실행하여 소스 리포지토리의 모든 파일을 검사합니다. 리터에서 문제를 발견하면 워크플로 작업이 실패합니다.

**Super-Linter 작업을 실행하는 워크플로를 생성하려면**

1. CodeCatalyst 콘솔에서 `codecatalyst-linter-project` 프로젝트를 선택합니다.

1. 탐색 창에서 **CI/CD**를 선택한 다음 **워크플로**를 선택합니다.

1. **워크플로 생성**을 선택합니다.

1. **소스 리포지토리**에서 `codecatalyst-linter-source-repository`을 선택합니다.

1. **브랜치**에서 `main`을 선택합니다.

1. **생성(Create)**을 선택합니다.

1. YAML 샘플 코드를 삭제합니다.

1. 다음 YAML을 추가합니다:

   ```
   Name: codecatalyst-linter-workflow
   SchemaVersion: "1.0"
   Triggers:
     - Type: PUSH
       Branches:
         - main
   Actions:
     SuperLinterAction:
       Identifier: aws/github-actions-runner@v1
       Configuration:
         Steps:
           github-action-code
   ```

   이 절차의 다음 단계에 설명된 대로 앞의 코드에서 *github-action-code*를 Super-Linter 작업 코드로 바꿉니다.

1. GitHub Marketplace의 [Super-Linter 페이지로](https://github.com/marketplace/actions/super-linter) 이동합니다.

1. `steps:`(소문자)에서 코드를 찾아 CodeCatalyst 워크플로의 `Steps:`(대문자)에 붙여 넣습니다.

   다음 코드와 같이 CodeCatalyst 표준에 맞게 GitHub 작업 코드를 조정합니다.

   이제 CodeCatalyst 워크플로는 다음과 같습니다.

   ```
   Name: codecatalyst-linter-workflow
   SchemaVersion: "1.0"
   Triggers:
     - Type: PUSH
       Branches:
         - main
   Actions:
     SuperLinterAction:
       Identifier: aws/github-actions-runner@v1
       Configuration:
         Steps:
           - name: Lint Code Base
             uses: github/super-linter@v4
             env:
               VALIDATE_ALL_CODEBASE: "true"
               DEFAULT_BRANCH: main
   ```

1. (선택 사항) 커밋하기 전에 YAML 코드가 유효한지 확인하려면 **검증**을 선택합니다.

1. **커밋**을 선택하고 **커밋 메시지**를 입력한 다음 `codecatalyst-linter-source-repository`**리포지토리**를 선택하고 **커밋**을 다시 선택합니다.

   이제 워크플로를 생성했습니다. 워크플로 상단에 정의된 트리거로 인해 워크플로 실행이 자동으로 시작됩니다.

**진행 중인 워크플로 실행을 보려면**

1. 탐색 창에서 **CI/CD**를 선택한 다음 **워크플로**를 선택합니다.

1. 방금 생성한 `codecatalyst-linter-workflow` 워크플로를 선택합니다.

1. 워크플로 다이어그램에서 **SuperLinterAction**을 선택합니다.

1. 작업이 실패할 때까지 기다립니다. 이 실패는 코드에서 linter가 문제를 발견했기 때문에 예상됩니다.

1. CodeCatalyst 콘솔을 열어 두고 [4단계: Super-Linter에서 발견한 문제 해결](#integrations-github-action-tutorial-fix-probs)로 이동합니다.

## 4단계: Super-Linter에서 발견한 문제 해결
<a name="integrations-github-action-tutorial-fix-probs"></a>

Super-Linter는 `app.js` 코드와 소스 리포지토리에 포함된 `README.md` 파일에서 문제를 발견했어야 합니다.

**린터에서 발견된 문제를 해결하려면**

1. CodeCatalyst 콘솔에서 **로그** 탭을 선택한 다음 **Lint Code Base**를 선택합니다.

   생성된 슈퍼 린터 작업이 표시되는 로그입니다.

1. 슈퍼 린터 로그에서 90행을 따라 아래로 스크롤하면 문제의 시작을 찾을 수 있습니다. 다음처럼 보일 것입니다.

   ```
   /github/workspace/hello-world/app.js:3:13: Extra semicolon.
   /github/workspace/hello-world/app.js:9:92: Trailing spaces not allowed.
   /github/workspace/hello-world/app.js:21:7: Unnecessarily quoted property 'body' found.
   /github/workspace/hello-world/app.js:31:1: Expected indentation of 2 spaces but found 4.
   /github/workspace/hello-world/app.js:32:2: Newline required at end of file but not found.
   ```

1. 소스 리포지토리에서 `app.js` 및 `README.md`를 수정하고 변경 사항을 커밋합니다.
**작은 정보**  
`README.md`를 수정하려면 다음과 같이 코드 블록에 `markdown`을 추가합니다.  

   ```
   ```markdown
   Setup examples:
   ...
   ```
   ```

   변경하면 다른 워크플로가 자동으로 실행됩니다. 워크플로가 완료될 때까지 기다립니다. 모든 문제를 해결한 경우 워크플로가 성공해야 합니다.

## 정리
<a name="integrations-github-action-tutorial-cleanup"></a>

CodeCatalyst에서 정리하여 환경에서 이 자습서의 트레이스를 제거합니다.

**CodeCatalyst에서 정리하려면**

1. [https://codecatalyst.aws/](https://codecatalyst.aws/)에서 CodeCatalyst 콘솔을 엽니다.

1. `codecatalyst-linter-source-repository`를 삭제합니다.

1. `codecatalyst-linter-workflow`를 삭제합니다.

이 자습서에서는 일부 코드를 린트하기 위해 CodeCatalyst 워크플로에 Super-Linter GitHub 작업을 추가하는 방법을 배웠습니다.