Skip to main content

끌어오기 요청에서 코드 검사 경고 심사

code scanning에서 끌어오기 요청의 문제를 식별하는 경우 강조 표시된 코드를 검토하고 경고를 해결할 수 있습니다.

누가 이 기능을 사용할 수 있나요?

If you have read permission for a repository, you can see annotations on pull requests. With write permission, you can see detailed information and resolve code scanning alerts for that repository.

Code scanning는 GitHub.com의 모든 퍼블릭 리포지토리에 사용할 수 있습니다. Code scanning는 또한 GitHub Enterprise Cloud를 사용하고 GitHub Advanced Security에 대한 라이선스가 있는 조직이 소유한 프라이빗 리포지토리에서 사용할 수 있습니다. 자세한 내용은 "GitHub Advanced Security 정보"을(를) 참조하세요.

끌어오기 요청에 대한 code scanning 결과 정보

code scanning이 끌어오기 요청 확인으로 구성된 리포지토리에서 code scanning은 끌어오기 요청의 코드를 확인합니다. 기본값으로 이는 기본 분기를 대상으로 하는 끌어오기 요청으로 제한되지만, 이 구성은 GitHub Actions 내에서 또는 타사 CI/CD 시스템에서 변경할 수 있습니다.

pull request에서 변경된 코드 줄이 code scanning 경고를 생성하는 경우, 이 경고는 pull request의 다음 위치에 보고됩니다.

  • pull request에서 결과 확인
  • 끌어오기 요청 검토의 대화 탭(끌어오기 요청 검토의 일부)
  • 끌어오기 요청의 변경된 파일

참고: Code scanning은(는) 경고로 식별된 모든 코드 줄이 끌어오기 요청 Diff에 있는 경우에만 끌어오기 요청에 경고를 표시합니다. 자세한 내용은 "코드 검사에 대한 SARIF 지원"을(를) 참조하세요.

GitHub Copilot Autofix는 프라이빗 리포지토리의 CodeQL 분석에서 경고에 대한 수정 사항을 제안합니다. pull request에서 Copilot Autofix의 제안 작업에 대한 자세한 내용은 "끌어오기 요청의 경고에 대한 Copilot Autofix 제안 작업"을 참조하세요.

리포지토리에 대한 쓰기 권한이 있는 경우 보안 탭에서 기존 code scanning 경고를 볼 수 있습니다. 리포지토리 경고에 대한 자세한 정보는 "리포지토리에 대한 코드 검사 경고 관리"을 참조하세요A.

또한 코드가 푸시될 때마다 code scanning에서 스캔하도록 구성된 리포지토리에서 code scanning은(는) 결과를 열려 있는 끌어오기 요청에 매핑하고, 경고를 주석으로 다른 끌어오기 요청 확인과 동일한 위치에 추가합니다. 자세한 내용은 "코드 검색을 위한 고급 설정 사용자 지정"을(를) 참조하세요.

끌어오기 요청이 code scanning을(를) 사용하는 보호된 분기를 대상으로 하고 리포지토리 소유자가 필요한 상태 확인을 구성한 경우 끌어오기 요청을 병합하기 전에 먼저 "Code scanning 결과" 확인을 통과해야 합니다. 자세한 내용은 "보호된 분기 정보"을(를) 참조하세요.

끌어오기 요청 확인으로서의 code scanning 정보

code scanning을(를) 끌어오기 요청 확인으로 구성하는 여러 옵션이 있으므로 각 리포지토리의 정확한 구성은 다양하며 일부는 둘 이상의 검사를 받습니다.

Code scanning 결과 확인

code scanning의 모든 구성에 대해 code scanning의 결과를 포함하는 확인은 Code scanning 결과입니다. 사용되는 각 분석 도구의 결과는 별도로 표시됩니다. pull request의 변경된 코드 줄에 대한 새로운 경고는 주석으로 표시됩니다.

분석된 분기에 대한 전체 경고 세트를 보려면 모든 분기 경고 보기를 클릭합니다. 그러면 형식, 심각도, 태그 등을 기준으로 분기의 모든 경고를 필터링할 수 있는 전체 경고 보기가 열립니다. 자세한 정보는 "리포지토리에 대한 코드 검사 경고 관리"을 참조하세요.

끌어오기 요청에 대한 Code scanning 결과 확인의 스크린샷. "모든 분기 경고 보기" 링크는 진한 주황색 윤곽선으로 강조 표시됩니다.

Code scanning 결과 확인 실패

code scanning 결과 확인에서 심각도가 error, critical 또는 high인 문제가 있으면 확인이 실패하고 확인 결과에 오류가 보고됩니다. code scanning에서 찾은 모든 결과의 심각도가 낮으면 경고가 경고 또는 참고로 처리되고 확인이 성공합니다.

끌어오기 요청에 대한 병합 상자의 스크린샷. "코드 스캔 결과 / CodeQL" 확인에는 "1개의 높은 보안 심각도를 포함한 1개의 새 경고..."가 있습니다.

끌어오기 요청 확인 실패를 유발하는 심각도 및 보안 심각도 수준을 지정하여 리포지토리 설정의 기본 동작을 재정의할 수 있습니다. 자세한 내용은 "코드 검색을 위한 고급 설정 사용자 지정"을 참조하세요.

기타 code scanning 확인

구성에 따라 code scanning이 구성된 끌어오기 요청에서 실행되는 추가 확인을 볼 수 있습니다. 이러한 확인은 일반적으로 코드를 분석하거나 code scanning 결과를 업로드하는 워크플로입니다. 이러한 확인은 분석 관련 문제가 있을 때 해당 문제를 해결하는 데 유용합니다.

예를 들어 리포지토리에서 CodeQL 분석 워크플로을(를) 사용하는 경우 결과 확인이 실행되기 전에 각 언어에 대해 CodeQL / 분석(LANGUAGE) 확인이 실행됩니다. 구성에 문제가 있거나 끌어오기 요청에서 분석이 컴파일하는 언어에 대한 빌드를 중단하는 경우(예: C/C++, C#, Go, Java 및 Swift) 분석 확인이 실패할 수 있습니다.

다른 끌어오기 요청 확인과 마찬가지로 확인 탭에서 확인 실패에 대한 전체 세부 정보를 볼 수 있습니다. 구성 및 문제 해결에 대한 자세한 정보는 "코드 검색을 위한 고급 설정 사용자 지정" 또는 "코드 검사 문제 해결"을 참조하세요.

끌어오기 요청에 대한 경고 보기

대화 탭을 보면 변경 사항의 Diff 내에 있는 끌어오기 요청에 도입된 모든 code scanning 경고를 확인할 수 있습니다. Code scanning은(는) 각 경고를 경고가 트리거된 코드 줄에 주석으로 표시하는 끌어오기 요청 검토를 게시합니다. 주석에서 직접 경고에 대해 주석을 달고, 경고를 해제하고, 경고의 경로를 볼 수 있습니다. "자세한 정보 표시" 링크를 클릭하여 경고 세부 정보 페이지로 이동하면 경고의 전체 세부 정보를 볼 수 있습니다.

끌어오기 요청의 "대화" 탭에 있는 경고 주석의 스크린샷. "더 많은 세부 정보 표시" 링크는 진한 주황색으로 간략하게 설명되어 있습니다.

pull request에 도입된 변경 내용의 차이에 포함되는 모든 code scanning 경고를 변경된 파일 탭에서 볼 수 있습니다.

pull request에 새 코드 검사 구성을 추가하는 경우 리포지토리의 보안 탭으로 안내하는 pull request에 대한 메모가 나타나고 끌어오기 요청 분기에 대한 모든 경고를 볼 수 있습니다. 리포지토리에 대한 경고 보기의 자세한 정보는 "리포지토리에 대한 코드 검사 경고 관리"을 참조하세요.

리포지토리에 대한 쓰기 권한이 있는 경우 일부 주석에는 경고에 대한 추가 컨텍스트가 있는 링크가 포함됩니다. 위 예제의 CodeQL 분석에서 user-provided value(사용자 제공 값)를 클릭하여 신뢰할 수 없는 데이터가 데이터 흐름에 들어가는 위치(이를 원본이라고 함)를 확인할 수 있습니다. 이 경우 경로 표시를 클릭하여 원본에서 데이터를 사용하는 코드(싱크)까지의 전체 경로를 볼 수도 있습니다. 이렇게 하면 데이터를 신뢰할 수 없는지 또는 분석에서 원본과 싱크 간의 데이터 삭제 단계를 인식하지 못했는지를 쉽게 확인할 수 있습니다. CodeQL을 사용하여 데이터 흐름을 분석하는 방법에 대한 자세한 내용은 "데이터 흐름 분석 정보"를 참조하세요.

경고에 대한 자세한 내용을 보려면 쓰기 권한이 있는 사용자가 주석에 표시된 자세히 링크를 클릭할 수 있습니다. 이렇게 하면 경고 보기에서 도구가 제공하는 모든 컨텍스트 및 메타데이터를 볼 수 있습니다. 아래 예제에서는 문제에 대한 심각도, 형식 및 관련 CWE(Common Weakness Enumeration)를 보여 주는 태그를 볼 수 있습니다. 또한 보기에서는 문제가 발생한 커밋을 보여 줍니다.

경고 페이지에 있는 상태와 세부 정보는 경고가 다른 분기에 있는 경우에도 리포지토리의 기본 분기에 있는 경고의 상태만 반영합니다. 경고 페이지의 오른쪽에 있는 영향받는 분기 섹션에서 기본 분기가 아닌 분기에 대한 경고 상태를 볼 수 있습니다. 경고가 기본 분기에 없는 경우 경고 상태가 "끌어오기 요청 내" 또는 "분기 내"로 표시되고 회색으로 표시됩니다.

경고에 대한 자세한 보기에서 CodeQL 분석과 같은 일부 code scanning 도구에는 문제에 대한 설명 및 자세히 표시 코드를 수정하는 방법의 지침에 대한 링크도 포함되어 있습니다.

code scanning 경고에 대한 설명을 표시하는 스크린샷. "자세히 표시"라는 레이블이 지정된 링크는 진한 주황색 윤곽선으로 강조 표시됩니다.

끌어오기 요청에서 경고에 대한 주석 처리

pull request에 나타나는 모든 code scanning 경고에 메모를 추가할 수 있습니다. 경고는 끌어오기 요청 검토의 일부로 끌어오기 요청의 대화 탭에 주석으로 표시되며 변경된 파일 탭에도 표시됩니다.

끌어오기 요청을 병합하기 전에 code scanning 경고에 대한 대화를 포함하여 끌어오기 요청의 모든 대화를 확인하도록 선택할 수 있습니다. 자세한 내용은 "보호된 분기 정보"을(를) 참조하세요.

끌어오기 요청에 대한 경고 수정

끌어오기 요청에 대한 푸시 액세스 권한이 있는 사용자는 해당 끌어오기 요청에서 식별된 code scanning 경고를 수정할 수 있습니다. 끌어오기 요청에 대한 변경 내용을 커밋하면 끌어오기 요청 확인의 새 실행이 트리거됩니다. 변경 내용으로 문제가 해결되면 경고가 종료되고 주석이 제거됩니다.

pull request의 경고에 대한 Copilot Autofix 제안 작업

GitHub Copilot Autofix는 code scanning의 확장판으로, pull request의 code scanning 경고를 수정하는 데 도움이 되는 타게팅된 권장 사항을 제공합니다. 잠재적 수정 사항은 코드베이스, 끌어오기 요청 ��� CodeQL 분석의 데이터를 사용하는 LLM(거대 언어 모델)에 의해 자동으로 생성됩니다.

Note

GitHub Copilot Autofix을(를) 사용하려면 GitHub Copilot에 대한 구독이 필요하지 않습니다. Copilot Autofix은(는) GitHub.com의 모든 퍼블릭 리포지토리에서 사용할 수 있습니다. 뿐만 아니라 GitHub Advanced Security에 대한 라이선스가 있는 GitHub Enterprise Cloud Enterprise의 프라이빗 리포지토리에서도 사용할 수 있습니다.

끌어오기 요청의 code scanning 경고에 대한 검사 실패 스크린샷입니다. "자동 수정" 제안의 일부는 진한 주황색으로 간략하게 설명되어 있습니다.

Copilot Autofix 제안 생성 및 pull request에 게시

리포지토리에 대해 Copilot Autofix를 사용하도록 설정하면 경고가 정상적으로 끌어오기 요청에 표시되고 CodeQL가 찾은 경고의 모든 정보는 처리를 위해 LLM으로 자동 전송됩니다. LLM 분석이 완료되면 모든 결과는 관련 경고에 대한 주석으로 게시됩니다. 자세한 정보는 "CodeQL 코드 검사에 대한 Copilot Autofix 정보" 항목을 참조하세요.

참고:

  • Copilot Autofix는 CodeQL 쿼리의 하위 집합을 지원합니다. Copilot Autofix 가용성에 대한 자세한 내용은 "CodeQL 쿼리 도구 모음"에서 연결된 쿼리 테이블을 참조하세요.
  • 분석이 완료되면 모든 관련 결과가 끌어오기 요청에 한 번에 게시됩니다. pull request에서 하나 이상의 경고에 Copilot Autofix 제안이 있는 경우 LLM이 코드에 대한 잠재적 수정 사항 식별을 완료한 것으로 가정할 수 있습니다.
  • Copilot Autofix에서 지원되지 않는 쿼리에서 생성된 경고에는 쿼리가 지원되지 않는다는 메모가 표시됩니다. 지원되는 쿼리에 대한 제안을 생성하지 못하면 경고에 다른 커밋을 푸시하거나 고객 지원에 문의하라는 메모가 표시됩니다.

일반적으로 끌어오기 요청에 변경 내용을 제안할 때 주석에는 끌어오기 요청에서 변경된 단일 파일에 대한 변경 내용이 포함됩니다. 다음 스크린샷은 경고가 표시되는 index.js 파일에 변경 내용을 제안하는 Copilot Autofix 주석을 보여줍니다. 잠재적인 수정 사항에는 escape-html의 새 종속성이 필요하므로 원본 끌어오기 요청이 이 파일을 변경하지 않더라도 주석은package.json 파일에 이 종속성을 추가하는 것도 제안합니다.

현재 파일의 설명 및 변경 내용이 포함된 Copilot Autofix 제안 스크린샷. "package.json"의 제안된 변경 내용은 진한 주황색으로 간략하게 설명되어 있습니다.

Copilot Autofix 제안 평가 및 커밋

각 Copilot Autofix 제안은 코드베이스에서 code scanning 경고에 대한 잠재적 솔루션을 보여줍니다. 제안된 변경 내용을 평가하여 코드베이스에 적합한 솔루션인지 확인하고 의도한 동작을 유지 관리하는지 확인해야 합니다. Copilot Autofix 제안의 제한 사항에 대한 자세한 내용은 "CodeQL code scanning에 대한 Copilot Autofix 정보"에서 "제안의 제한 사항" 및 "제안의 제한 사항 완화"를 참조하세요.

  1. 편집을 클릭하여 편집 옵션을 표시하고 선호하는 방법을 선택합니다.
    • GitHub CLI을(를) 사용하여 편집 아래에서 로컬에서 끌어오기 요청을 체크 아웃하고 제안된 수정 사항을 적용하는 지침을 따릅니다.
    • FILENAME 편집을 선택하여 제안된 수정 사항이 적용된 GitHub에서 직접 파일을 편집합니다.
  2. 필요에 따라 로컬 리포지토리 또는 분기에 수정 사항을 적용하려면 제안에서 드롭다운 메뉴를 선택합니다.
    • 자동 수정 패치 보기를 선택하여 제안된 수정 사항을 로컬 리포지토리 또는 분기에 적용하기 위한 지침을 표시합니다.
    • 수정된 줄 LINE_NUMBER 복사를 선택하여 제안의 특정 줄을 복사합니다.
  3. 필요에 따라 제안된 수정 사항을 테스트하고 수정합니다.
  4. 변경 내용 테스트를 마쳤으면 변경 내용을 커밋하고 분기에 푸시합니다.
  5. 분기로 변경 내용을 푸시하면 ���어오기 요청에 대한 모든 일반적인 테스트가 트리거됩니다. 단위 테스트가 여전히 통과인지와 code scanning 경고가 수정되어 있는지를 확인합니다.

Copilot Autofix 제안 해제

Copilot Autofix 제안을 거부하기로 결정한 경우 주석에서 제안 해제를 클릭하여 제안된 수정 사항을 해제합니다.

끌어오기 요청에 대한 경고 해제

경고를 종료하는 다른 방법은 경고를 해제하는 것입니다. 수정할 필요가 없다고 생각되면 경고를 해제할 수 있습니다. 예를 들어 테스트에만 사용되는 코드의 오류 또는 오류를 수정하는 데 드는 노력이 코드 개선의 잠재적 이점보다 큰 경우입니다. 리포지토리에 대한 쓰기 권한이 있는 경우 코드 주석 및 경고 요약에서 경고 해제 단추를 사용할 수 있습니다. 경고 해제를 클릭하면 경고를 종료하는 이유를 선택하라는 프롬프트가 표시됩니다.

코드 검사에 대한 검사 실패의 스크린샷. "경고 해제" 단추가 진한 주황색으로 강조 표시됩니다. "경고 해제" 드롭다운이 표시됩니다.

쿼리가 향후 분석에 계속 포함될지 여부에 영향을 줄 수 있으므로 드롭다운 메뉴에서 적절한 이유를 선택하는 것이 중요합니다. 선택적으로 해제에 대한 주석을 달아 경고 해제의 컨텍스트를 기록할 수 있습니다. 해제 주석은 경고 타임라인에 추가되며 감사 및 보고 중에 근거로 사용할 수 있습니다. REST API를 검색하는 코드를 사용하여 주석을 검색하거나 설정할 수 있습니다. 주석은 alerts/{alert_number} 엔드포인트에 대한 dismissed_comment에 포함되어 있습니다. 자세한 내용은 "코드 검색에 대한 REST API 엔드포인트" 항목을 참조하세요.

예를 들어 코드에서 지원되지 않는 삭제 라이브러리를 사용하기 때문에 CodeQL 경고를 가양성 결과로 해제하는 경우 CodeQL 리포지토리에 기여하고 분석을 개선하는 것이 좋습니다. CodeQL에 대한 자세한 내용은 “CodeQL에 기여”를 참조하세요.

해제 경고에 대한 자세한 내용은 “리포지토리에 대한 코드 검사 경고 관리”를 참조하세요.