Skip to main content
설명서에 자주 업데이트를 게시하며 이 페이지의 번역이 계속 진행 중일 수 있습니다. 최신 정보는 영어 설명서를 참조하세요.

컴파일된 언어에 대한 CodeQL 워크플로 구성

GitHub에서 CodeQL 분석 워크플로를 사용하여 컴파일된 언어로 작성된 코드를 검사하여 취약성 및 오류를 검사하는 방법을 구성할 수 있습니다.

이 기능을 사용할 수 있는 사용자

If you have write permissions to a repository, you can configure code scanning for that repository.

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

CodeQL 분석 워크플로 및 컴파일된 언어 정보

CodeQL code scanning의 경우 코드를 분석하고 code scanning를 자동으로 구성하는 기본 설정 또는 편집할 수 있는 워크플로 파일을 생성하는 고급 설정을 사용할 수 있습니다. 현재 기본 설정은 컴파일된 언어를 지원하지 않으므로 고급 설정을 사용해야 합니다. 자세한 내용은 "리포지토리에 대한 코드 검사 구성"을 참조하세요.

일반적으로 code scanning에 대해 생성된 워크플로 파일을 편집할 필요가 없습니다. 그러나 필요한 경우 워크플로를 편집하여 일부 설정을 사용자 지정할 수 있습니다. 예를 들어 GitHub의 CodeQL 분석 워크플로를 편집하여 검사 빈도, 검사할 언어 또는 디렉터리, 코드에서 CodeQL code scanning에서 찾는 항목을 지정할 수 있습니다. 특정 명령 집합을 사용하여 코드를 컴파일하는 경우 CodeQL 분석 워크플로를 편집해야 할 수도 있습니다. code scanning 구성 및 워크플로 파일 편집에 대한 일반적인 내용은 "코드 검사 사용자 지정" 및 "Github Actions 알아보기"을 참조하세요.

CodeQL에 대한 자동 빌드 정보

Code scanning은(는) 하나 이상의 데이터베이스에 대해 쿼리를 실행하여 작동합니다. 각 데이터베이스에는 리포지토리에 있는 단일 언어로 된 모든 코드의 표현이 포함됩니다. 컴파일된 언어 C/C++, C#, Go, Kotlin, 및 Java의 경우 이 데이터베이스를 채우는 프로세스에는 코드 빌드 및 데이터 추출이 포함됩니다. 이러한 언어의 경우 CodeQL는 빌드된 리포지토리의 원본 파일을 분석합니다. 이러한 언어의 경우 이러한 사용자 지정 명령으로 빌드된 파일만 분석하기 위해 사용자 지정 빌드 명령을 사용하지 않도록 설정하고 autobuild 대신 사용할 수 있습니다.

지원되는 컴파일된 언어의 경우 CodeQL 분석 워크플로의 작업을 사용하여 autobuild 코드를 빌드할 수 있습니다. 이렇게 하면 C/C++, C#, Go, Kotlin, 및 Java에 대한 명시적 빌드 명령을 지정하지 않아도 됩니다.

워크플로에서 language 행렬을 사용하는 경우 autobuild는 행렬에 나열된 컴파일된 각 언어를 빌드하려고 합니다. 행렬을 사용하지 않는 경우 autobuild는 리포지토리에서 가장 많은 원본 파일이 있는 지원되는 컴파일 언어를 빌드하려고 합니다. Go를 제외하고 명시적 빌드 명령을 제공하지 않는 한, 리포지토리에서 컴파일된 다른 언어의 분석은 실패합니다.

참고: GitHub Actions에 대해 자체 호스팅 실행기를 사용하는 경우 autobuild 프로세스를 사용하기 위해 추가 소프트웨어를 설치해야 할 수 있습니다. 또한 리포지토리에 특정 버전의 빌드 도구가 필요한 경우 수동으로 설치해야 할 수 있습니다. 자세한 내용은 "GitHub 호스팅 실행기 정보.

C/C++

지원되는 시스템 유형시스템 이름
운영 체제Windows, macOS 및 Linux
빌드 시스템Windows: MSbuild 및 빌드 스크립트
Linux 및 macOS: Autoconf, Make, CMake, qmake, Meson, Waf, SCons, Linux Kbuild 및 빌드 스크립트

autobuild 단계의 동작은 추출이 실행되는 운영 체제에 따라 달라집니다. Windows에서 autobuild 단계는 다음 방법을 사용하여 C/C++에 적합한 빌드 메서드를 자동 검색하려고 시도합니다.

  1. 루트에 가장 가까운 솔루션(.sln) 또는 프로젝트(.vcxproj) 파일에 대해 MSBuild.exe를 호출합니다. autobuild는 최상위 디렉터리에서 동일한(가장 짧은) 깊이에 있는 여러 솔루션 또는 프로젝트 파일을 검색하면 모두 빌드하려고 합니다.
  2. 빌드 스크립트처럼 보이는 스크립트(build.bat, build.cmdbuild.exe)를 해당 순서대로 호출합니다.

Linux 및 macOS에서 autobuild 단계는 리포지토리에 있는 파일을 검토하여 사용되는 빌드 시스템을 확인합니다.

  1. 루트 디렉터리에서 빌드 시스템을 찾습니다.
  2. 찾을 수 없는 경우 C/C++용 빌드 시스템이 있는 고유한 디렉터리를 하위 디렉터리에서 검색합니다.
  3. 적절한 명령을 실행하여 시스템을 구성합니다.

C#

지원되는 시스템 유형시스템 이름
운영 체제Windows 및 Linux
빌드 시스템.NET 및 MSbuild, 빌드 스크립트

autobuild 프로세스는 다음 방법을 사용하여 C#에 적합한 빌드 메서드를 자동 검색하려고 시도합니다.

  1. 루트에 가장 가까운 솔루션(.sln) 또는 프로젝트(.csproj) 파일에 대해 dotnet build를 호출합니다.
  2. 루트에 가장 가까운 솔루션 또는 프로젝트 파일에 대해 MSbuild(Linux) 또는 MSBuild.exe(Windows)를 호출합니다. autobuild는 최상위 디렉터리에서 동일한(가장 짧은) 깊이에 있는 여러 솔루션 또는 프로젝트 파일을 검색하면 모두 빌드하려고 합니다.
  3. 빌드 스크립트처럼 보이는 스크립트(buildbuild.sh(Linux) 또는 build.bat, build.cmdbuild.exe(Windows))를 해당 순서대로 호출합니다.

Go

지원되는 시스템 유형시스템 이름
운영 체제Windows, macOS 및 Linux
빌드 시스템Go 모듈 dep 및 글라이드뿐만 아니라 메이크파일 및 닌자 스크립트를 포함한 빌드 스크립트

프로세스는 autobuild 모든 .go 파일을 추출하기 전에 Go 리포지토리에 필요한 종속성을 설치하는 적절한 방법을 자동으로 검색하려고 시도합니다.

  1. make이러한 명령 중 하나가 성공하고 후속 go list ./... 명령도 성공할 때까지 , ninja``./build 또는 ./build.sh 를 호출하여 필요한 종속성이 설치되었음을 나타냅니다.
  2. 이러한 명령 중 어느 것도 성공하지 못한 경우 , 또는 glide.yamlGopkg.toml 찾아 go.mod실행 go get 하거나(공급업체가 사용되지 않는 한) dep ensure -v glide install 각각 종속성을 설치하려고 시도합니다.
  3. 마지막으로 이러한 종속성 관리자에 대한 구성 파일을 찾을 수 없는 경우 에 추가 GOPATH하기에 적합한 리포지토리 디렉터리 구조를 다시 정렬하고 를 사용하여 go get 종속성을 설치합니다. 디렉터리 구조는 추출이 완료된 후 정상으로 되돌아갑니다.
  4. 를 실행하는 go build ./...것과 유사하게 리포지토리의 모든 Go 코드를 추출합니다.

Java 및 Kotlin

지원되는 시스템 유형시스템 이름
운영 체제Windows, macOS 및 Linux(제한 없음)
빌드 시스템Gradle, Maven 및 Ant

autobuild 프로세스는 다음 전략을 적용하여 Java 코드베이스에 대한 빌드 시스템을 확인하려고 합니다.

  1. 루트 디렉터리에서 빌드 파일을 검색합니다. Gradle, Maven 및 Ant 빌드 파일을 순서대로 확인합니다.
  2. 찾은 첫 번째 빌드 파일을 실행합니다. Gradle 및 Maven 파일이 모두 있는 경우 Gradle 파일이 사용됩니다.
  3. 그렇지 않으면 루트 디렉터리의 직접 하위 디렉터리에서 빌드 파일을 검색합니다. 하나의 하위 디렉터리에 빌드 파일이 포함되어 있는 경우 해당 하위 디렉터리에서 식별된 첫 번째 파일을 실행합니다(1의 경우와 동일한 기본 설정 사용). 둘 이상의 하위 디렉터리에 빌드 파일이 포함된 경우 오류를 보고합니다.

컴파일 언어의 빌드 단계 추가

실패하거나 프로세스에서 빌드된 파일과 다른 원본 파일 집합을 autobuild 분석하려는 경우 autobuild 워크플로에서 단계를 제거하고 autobuild 빌드 단계를 수동으로 추가해야 합니다. C/C++, C#, Go, Kotlin, 및 Java 프로젝트의 경우 CodeQL는 지정된 빌드 단계에서 빌드된 소스 코드를 분석합니다. 워크플로 파일을 편집하는 방법에 대한 자세한 내용은 "코드 검사 사용자 지정.

autobuild 단계를 제거한 후 run 단계의 주석 처리를 제거하고 리포지토리에 적합한 빌드 명령을 추가합니다. 워크플로 run 단계에서는 운영 체제의 셸을 사용하여 명령줄 프로그램을 실행합니다. 이러한 명령을 수정하고 더 많은 명령을 추가하여 빌드 프로세스를 사용자 지정할 수 있습니다.

- run: |
    make bootstrap
    make release

키워드에 run 대한 자세한 내용은 "GitHub Actions에 대한 워크플로 구문"을 참조하세요.

리포지토리에 여러 컴파일 언어가 포함된 경우 언어별 빌드 명령을 지정할 수 있습니다. 예를 들어, 리포지토리에 C/C++, C# 및 Java가 포함되어 있고 autobuild가 C/C++ 및 C#을 올바르게 빌드하지만 Java를 빌드하지 못하는 경우 init 단계 후 워크플로에서 다음 구성을 사용할 수 있습니다. 이렇게 C/C++ 및 C#에 autobuild를 계속 사용하는 동안 Java에 대한 빌드 단계가 지정됩니다.

- if: matrix.language == 'cpp' || matrix.language == 'csharp'
  name: Autobuild
  uses: github/codeql-action/autobuild@v2

- if: matrix.language == 'java'
  name: Build Java
  run: |
    make bootstrap
    make release

조건부에 if 대한 자세한 내용은 "GitHub Actions에 대한 워크플로 구문"을 참조하세요.

코드를 빌드하지 않는 이유에 autobuild 대한 자세한 팁과 요령은 "CodeQL에 대한 고급 설정 문제 해결"을 참조하세요.

컴파일된 언어에 대한 수동 빌드 단계를 추가했으나 code scanning가 리포지토리에서 아직 작동하지 않는 경우 GitHub 지원에 문의하세요.