참고: 이 기능을 사용하려면 먼저 사이트 관리자가 GitHub Enterprise Server 인스턴스에 대해 code scanning을(를) 사용하도록 설정해야 합니다. GitHub Actions를 사용하여 코드를 스캔하려면 사이트 관리자도 GitHub Actions를 사용하도록 설정하고 필요한 인프라를 설정해야 합니다. 자세한 내용은 "어플라이언스에 대한 코드 검사 구성"을 참조하세요.
CodeQL 분석 워크플로 및 컴파일된 언어 정보
GitHub를 설정하여 리포지토리에 GitHub Actions 워크플로를 추가함으로써 리포지토리에 대한 code scanning를 실행합니다. CodeQL code scanning의 경우 CodeQL 분석 워크플로를 추가합니다. 자세한 내용은 "리포지토리에 대한 코드 검사 구성"을 참조하세요.
일반적으로 code scanning에 대해 생성된 워크플로 파일을 편집할 필요가 없습니다. 그러나 필요한 경우 워크플로를 편집하여 일부 설정을 사용자 지정할 수 있습니다. 예를 들어 GitHub의 CodeQL 분석 워크플로를 편집하여 검사 빈도, 검사할 언어 또는 디렉터리, 코드에서 CodeQL code scanning에서 찾는 항목을 지정할 수 있습니다. 특정 명령 집합을 사용하여 코드를 컴파일하는 경우 CodeQL 분석 워크플로를 편집해야 할 수도 있습니다. code scanning 구성 및 워크플로 파일 편집에 대한 일반적인 내용은 "코드 검사 사용자 지정" 및 "Github Actions 알아보기"을 참조하세요.
CodeQL에 대한 자동 빌드 정보
Code scanning은(는) 하나 이상의 데이터베이스에 대해 쿼리를 실행하여 작동합니다. 각 데이터베이스에는 리포지토리에 있는 단일 언어로 된 모든 코드의 표현이 포함됩니다.
컴파일된 언어 C/C++, C#, 및 Java의 경우 이 데이터베이스를 채우는 프로세스에는 코드 빌드 및 데이터 추출이 포함됩니다. 이러한 언어의 경우 CodeQL는 빌드된 리포지토리의 원본 파일을 분석합니다. 이러한 언어의 경우 이러한 사용자 지정 명령으로 빌드된 파일만 분석하기 위해 사용자 지정 빌드 명령을 사용하지 않도록 설정하고 autobuild
대신 사용할 수 있습니다.
지원되는 컴파일된 언어의 경우 CodeQL 분석 워크플로의 작업을 사용하여 autobuild
코드를 빌드할 수 있습니다. 이렇게 하면 C/C++, C#, 및 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++에 적합한 빌드 메서드를 자동 검색하려고 시도합니다.
- 루트에 가장 가까운 솔루션(
.sln
) 또는 프로젝트(.vcxproj
) 파일에 대해MSBuild.exe
를 호출합니다.autobuild
는 최상위 디렉터리에서 동일한(가장 짧은) 깊이에 있는 여러 솔루션 또는 프로젝트 파일을 검색하면 모두 빌드하려고 합니다. - 빌드 스크립트처럼 보이는 스크립트(build.bat, build.cmd 및 build.exe)를 해당 순서대로 호출합니다.
Linux 및 macOS에서 autobuild
단계는 리포지토리에 있는 파일을 검토하여 사용되는 빌드 시스템을 확인합니다.
- 루트 디렉터리에서 빌드 시스템을 찾습니다.
- 찾을 수 없는 경우 C/C++용 빌드 시스템이 있는 고유한 디렉터리를 하위 디렉터리에서 검색합니다.
- 적절한 명령을 실행하여 시스템을 구성합니다.
C#
지원되는 시스템 유형 | 시스템 이름 |
---|---|
운영 체제 | Windows 및 Linux |
빌드 시스템 | .NET 및 MSbuild, 빌드 스크립트 |
autobuild
프로세스는 다음 방법을 사용하여 C#에 적합한 빌드 메서드를 자동 검색하려고 시도합니다.
- 루트에 가장 가까운 솔루션(
.sln
) 또는 프로젝트(.csproj
) 파일에 대해dotnet build
를 호출합니다. - 루트에 가장 가까운 솔루션 또는 프로젝트 파일에 대해
MSbuild
(Linux) 또는MSBuild.exe
(Windows)를 호출합니다.autobuild
는 최상위 디렉터리에서 동일한(가장 짧은) 깊이에 있는 여러 솔루션 또는 프로젝트 파일을 검색하면 모두 빌드하려고 합니다. - 빌드 스크립트처럼 보이는 스크립트(build 및 build.sh(Linux) 또는 build.bat, build.cmd 및 build.exe(Windows))를 해당 순서대로 호출합니다.
Java
지원되는 시스템 유형 | 시스템 이름 |
---|---|
운영 체제 | Windows, macOS 및 Linux(제한 없음) |
빌드 시스템 | Gradle, Maven 및 Ant |
autobuild
프로세스는 다음 전략을 적용하여 Java 코드베이스에 대한 빌드 시스템을 확인하려고 합니다.
- 루트 디렉터리에서 빌드 파일을 검색합니다. Gradle, Maven 및 Ant 빌드 파일을 순서대로 확인합니다.
- 찾은 첫 번째 빌드 파일을 실행합니다. Gradle 및 Maven 파일이 모두 있는 경우 Gradle 파일이 사용됩니다.
- 그렇지 않으면 루트 디렉터리의 직접 하위 디렉터리에서 빌드 파일을 검색합니다. 하나의 하위 디렉터리에 빌드 파일이 포함되어 있는 경우 해당 하위 디렉터리에서 식별된 첫 번째 파일을 실행합니다(1의 경우와 동일한 기본 설정 사용). 둘 이상의 하위 디렉터리에 빌드 파일이 포함된 경우 오류를 보고합니다.
컴파일 언어의 빌드 단계 추가
실패하거나 프로세스에서 빌드된 파일과 다른 원본 파일 집합을 autobuild
분석하려는 경우 autobuild
워크플로에서 단계를 제거하고 autobuild
빌드 단계를 수동으로 추가해야 합니다. C/C++, C#, Go, 및 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가 리포지토리에서 아직 작동하지 않는 경우 사이트 관리자에 문의하세요.