Note
사이트 관리자가 먼저 code scanning을 사용하도록 설정해야 이 기능을 사용할 수 있습니다. GitHub Actions를 사용하여 코드를 스캔하려면 사이트 관리자도 GitHub Actions를 사용하도록 설정하고 필요한 인프라를 설정해야 합니다. 자세한 내용은 "어플라이언스에 대한 코드 검사 구성"을(를) 참조하세요.
CodeQL 분석 워크플로 및 컴파일된 언어에 대한 정보
Code scanning은(는) 하나 이상의 CodeQL 데이터베이스에 대해 쿼리를 실행하여 작동합니다. 각 데이터베이스에는 리포지토리에 있는 단일 언어로 된 코드의 표현이 포함됩니다. 컴파일된 언어 C/C++, C#, Go, Java, Kotlin, and Swift의경우 이 데이터베이스를 채우는 프로세스에는 종종 코드 빌드 및 데이터 추출이 포함됩니다.
code scanning을(를) 사용하도록 설정하면 기본 설정과 고급 설정 모두 사용 가능한 가장 간단한 방법을 사용하여 분석을 위해 CodeQL 데이터베이스를 생성합니다. Java의 경우 빌드(none
빌드 모드)를 요구하지 않고 CodeQL 데이터베이스가 코드베이스에서 직접 생성됩니다. 다른 컴파일된 언어의 경우 CodeQL은(는) autobuild
빌드 모드를 사용하여 코드베이스를 빌드합니다. 또는 manual
빌드 모드를 사용하여 명시적 빌드 명령을 지정하여 이러한 사용자 지정 명령으로 빌드된 파일만 분석할 수 있습니다.
CodeQL 빌드 모드
CodeQL 작업은 컴파일된 언어에 대해 세 가지 빌드 모드를 지원합니다.
none
- CodeQL 데이터베이스는 코드베이스를 구축하지 않고 코드베이스에서 직접 생성됩니다(해석된 모든 언어에 대해 지원되며 Java에 대해 추가로 지원됨).autobuild
- CodeQL은(는) 가장 가능성이 큰 빌드 방법을 검색하고 이를 사용하여 코드베이스를 빌드하고 분석을 위한 데이터베이스를 만듭니다(컴파일된 모든 언어에서 지원됨).manual
- 워크플로의 코드베이스에 사용할 빌드 단계를 정의합니다(컴파일된 모든 언어에 대해 지원됨).
빌드 모드 비교
빌드 모드 특성 | None | 자동 빌드 | 설명서 |
---|---|---|---|
기본 설정 및 조직 수준 사용 설정에 사용됩니다. | 예( Java) | 예, none 가 지원되지 않는 위치 | 아니요 |
사용자 구성 없이 분석 성공 | 예 | 변수 | 아니요 |
분석의 완전성 | 생성된 코드가 분석되지 않음 | 변수 | 사용자 컨트롤형 |
분석의 정확도 | 적절함 | 적절함 | 가장 좋음 |
권장 사항
code scanning을(를) 처음으로 설정하거나 여러 리포지토리에서 설정하는 경우 기본 설정을 사용하는 것이 가장 좋습니다. 기본 설정에서는 CodeQL 데이터베이스를 생성하고 코드를 분석하는 데 사용할 수 있는 가장 간단한 방법을 사용하므로 가능한 한 빨리 경고 수정을 시작할 수 있습니다. 초기 경고를 해결한 후에는 위험 수준이 높은 리포지토리에 대한 수동 빌드 프로세스를 사용하여 고급 설정으로 전환할 수 있습니다.
다중 언어 리포지토리에서 여러 빌드 모드 사용
여러 컴파일된 언어가 있는 리포지토리의 경우 다른 언어에 대해 다른 빌드 모드를 사용할 수 있습니다. 예를 들어 리포지토리에 C/C++, C# 및 Java가 포함된 경우 한 언어(여기서는 C/C++)에 대한 수동 빌드 단계를 제공할 수 있습니다. 이 워크플로는 각 언어에 대해 다른 빌드 모드를 지정합니다.
strategy:
matrix:
include:
# Analyzes C and C++ code using the commands in `Build C and C++ code`
- language: c-cpp
build-mode: manual
# Analyzes C# code by automatically detecting a build
- language: csharp
build-mode: autobuild
# Analyzes Java code directly from the codebase without a build
- language: java-kotlin
build-mode: none # analyzes Java only
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Initializes CodeQL tools and creates a codebase for analysis.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
- if: ${{ matrix.build-mode == 'manual' }}
name: Build C and C++ code
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
echo ' make bootstrap'
echo ' make release'
exit 1
최신 버전의 CodeQL에서 지원되는 언어, 라이브러리 및 프레임워크에 대한 자세한 내용은 CodeQL 설명서의 "지원되는 언어 및 프레임워크"를 참조하세요. 최신 버전의 CodeQL을(를) 실행하기 위한 시스템 요구 사항에 대한 자세한 내용은 CodeQL 설명서의 "시스템 요구 사항"을 참조하세요.
CodeQL용 빌드 모드 없음 정보
Java의 경우 리포지토리에 Kotlin 코드가 포함되어 있지 않으면 code scanning에 대한 기본 설정을 사용하도록 설정할 때 빌드를 요구하지 않고 CodeQL에서 데이터베이스를 만듭니다. 리포지토리에 Java 코드 외에 Kotlin 코드가 포함된 경우 Kotlin 분석에 빌드가 필요하기 때문에 자동 빌드 프로세스에서 기본 설정이 사용됩니다.
빌드 없이 CodeQL 데이터베이스를 만들면 다음과 같은 경우 autobuild
또는 수동 빌드 단계를 사용하는 것보다 덜 정확한 결과를 생성할 수 있습니다.
- 빌드 스크립트는 종속성 정보를 쿼리할 수 없으며, 종속성 추측은 정확하지 않습니다.
- 리포지토리는 일반적으로 빌드 프로세스 중에 코드를 생성합니다.
autobuild
또는 수동 빌드 단계를 사용하려면 고급 설정을 사용하면 됩니다.
Note
Java 분석의 경우 build-mode
가 none
으로 설정되고 Kotlin 코드가 리포지토리에 있으면 Kotlin 코드가 분석되지 않으며 경고가 생성됩니다. "Java 및 Kotlin 빌드"를 참조하세요.
CodeQL에 대한 자동 빌드 정보
CodeQL 작업은 다음 경우에 autobuild
를 사용하여 컴파일된 언어를 분석합니다.
- 기본 설정은 사용이며 언어는
none
빌드( Java용으로 지원됨)를 지원하지 않습니다. - 고급 설정이 활성화되고 워크플로에서
build-mode: autobuild
을(를) 지정합니다. - 고급 설정이 활성화되고 워크플로에
autobuild
작업(github/codeql-action/autobuild@v3
)을 사용하는 언어에 대한 자동 작성 단계가 있습니다.
build-mode
옵션을 사용하는 예시
# Initializes the CodeQL tools for scanning.
name: Analyze
strategy:
matrix:
include:
# Analyze C and C++ code
- language: c-cpp
build-mode: autobuild
# Analyze Go code
- language: go
build-mode: autobuild
steps:
- uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
자동 빌드 단계를 사용하는 예시
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
- name: Autobuild
uses: github/codeql-action/autobuild@v3
수동으로 빌드 단계 지정 정보
고급 설정을 사용하는 경우에만 수동 빌드 단계를 지정할 수 있습니다. "코드 스캔을 위한 고급 설정 구성" 항목을 참조하세요.
autobuild
가 실패하거나 autobuild
프로세스에서 빌드한 것과 다른 소스 파일 집합을 분석하려는 경우 다음을 수행해야 합니다.
- 워크플로에서 언어에 대한 빌드 모드를 지정하는 경우 빌드 모드를
manual
로 변경합니다. - 워크플로에
autobuild
단계가 포함되어 있는 경우 워크플로에서autobuild
단계를 제거하거나 주석 처리합니다.
그런 다음 run
단계의 주석을 해제하고 사용할 빌드 프로세스를 수동으로 지정합니다. C/C++, C#, Go, Java, Kotlin, and Swift의 경우 CodeQL은(는) 지정된 빌드 단계에서 빌드된 소스 코드를 분석합니다. 워크플로 파일을 편집하는 방법에 대한 자세한 내용은 "코드 검색을 위한 고급 설정 사용자 지정" 항목을 참조하세요.
워크플로를 업데이트하여 build-mode
를 manual
로 정의합니다.
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
build-mode: manual
- uses: github/codeql-action/analyze@v3
with:
category: "/language:${{ matrix.language }}"
또는 워크플로를 업데이트하여 "자동 빌드" 단계를 주석으로 처리합니다.
# Autobuild attempts to build any compiled languages.
# - name: Autobuild
# uses: github/codeql-action/autobuild@v3
빌드 명령 지정
수동 빌드를 사용하도록 설정하면 워크플로에서 run
단계의 주석 처리를 제거하고 리포지토리에 적합한 빌드 명령을 추가합니다. run
단계에서는 운영 체제의 셸을 사용하여 명령줄 프로그램을 실행합니다. 이러한 명령을 수정하고 더 많은 명령을 추가하여 빌드 프로세스를 사용자 지정할 수 있습니다.
- run: |
make bootstrap
make release
run
키워드에 대한 자세한 내용은 "GitHub Actions에 대한 워크플로 구문" 항목을 참조하세요.
컴파일된 언어에 대한 수동 빌드 단계를 추가했으나 code scanning가 리포지토리에서 아직 작동하지 않는 경우 사이트 관리자에게 문의에 문의하세요.
컴파일 언어의 자동 빌드 단계
GitHub Actions에 자체 호스트형 실행기를 사용하는 경우 autobuild
프로세스를 사용하기 위해 추가 소프트웨어를 설치해야 할 수 있습니다. 또한 리포지토리에 특정 버전의 빌드 도구가 필요한 경우 수동으로 설치해야 할 수 있습니다. 자체 호스트 실행기의 경우 실행기 자체에 종속성을 직접 설치해야 합니다. 이러한 언어에 대한 이 문서의 각 autobuild
섹션에서 C/C++, C#및 Java에 대한 일반적인 종속성의 예를 제공합니다. 자세한 내용은 "자체 호스트형 실행기 정보" 항목을 참조하세요.
Note
워크플로에서 language
행렬을 사용하는 경우 autobuild
는 행렬에 나열된 컴파일된 각 언어를 빌드하려고 합니다. 행렬을 사용하지 않는 경우 autobuild
는 리포지토리에서 가장 많은 원본 파일이 있는 지원되는 컴파일 언어를 빌드하려고 합니다. Go를 제외하고 명시적 빌드 명령을 제공하지 않는 한, 리포지토리에서 컴파일된 다른 언어의 분석은 실패합니다.
C/C++ 빌드
CodeQL은(는) C/C++ 코드에 대해 빌드 모드 autobuild
또는 manual
를 지원합니다.
C/C++용 자동 빌드 요약
지원되는 시스템 유형 | 시스템 이름 |
---|---|
운영 체제 | Windows, macOS 및 Linux |
빌드 시스템 | Windows: MSbuild 및 빌드 스크립트 Linux 및 macOS: Autoconf, Make, CMake, qmake, Meson, Waf, SCons, Linux Kbuild 및 빌드 스크립트 |
autobuild
단계의 동작은 추출이 실행되는 운영 체제에 따라 달라집니다.
Windows 자동 검색
Windows에서 autobuild
단계는 다음 방법을 사용하여 C/C++에 적합한 빌드 메서드를 자동 검색하려고 시도합니다.
- 루트에 가장 가까운 솔루션(
.sln
) 또는 프로젝트(.vcxproj
) 파일에 대해MSBuild.exe
를 호출합니다.autobuild
는 최상위 디렉터리에서 동일한(가장 짧은) 깊이에 있는 여러 솔루션 또는 프로젝트 파일을 검색하면 모두 빌드하려고 합니다. - 빌드 스크립트처럼 보이는 스크립트(build.bat, build.cmd 및 build.exe)를 해당 순서대로 호출합니다.
Linux 및 macOS 자동 검색
Linux 및 macOS에서 autobuild
단계는 리포지토리에 있는 파일을 검토하여 사용되는 빌드 시스템을 확인합니다.
- 루트 디렉터리에서 빌드 시스템을 찾습니다.
- 찾을 수 없는 경우 C/C++용 빌드 시스템이 있는 고유한 디렉터리를 하위 디렉터리에서 검색합니다.
- 적절한 명령을 실행하여 시스템을 구성합니다.
C/C++용 실행기 요구 사항
Ubuntu Linux 실행기에서 autobuild
는 검색된 구성 및 빌드 단계에 필요한 종속성을 자동으로 설치하려고 시도할 수 있습니다. 기본값으로 이 동작은 GitHub호스트형 실행기에서 사용 설정되며 자체 호스트형 실행기에서는 사용하지 않도록 설정됩니다. 환경에서 CODEQL_EXTRACTOR_CPP_AUTOINSTALL_DEPENDENCIES
를 true
또는 false
로 설정하여 이 기능을 명시적으로 사용하거나 사용하지 않도록 설정할 수 있습니다. 환경 변수 정의에 대한 자세한 내용은 "변수에 정보 저장" 항목을 참조하세요.
자체 호스트형 실행기의 경우 종속성 자동 설치를 사용하도록 설정하지 않는 한 gcc
컴파일러를 설치해야 할 수 있으며 특정 프로젝트에서 clang
또는 msvc
실행 파일에 액세스해야 할 수도 있습니다. 또한 프로젝트가 의존하는 빌드 시스템(예시: msbuild
, make
, cmake
, bazel
) 및 유틸리티(예시: python
, perl
, lex
, yacc
)를 설치해야 합니다.
종속성의 자동 설치를 사용하도록 설정한 경우 실행기에서 Ubuntu를 사용하고 있으며 암호 없이 sudo apt-get
을 실행할 수 있는지 확인해야 합니다.
Windows 실행기는 powershell.exe
가 PATH
에 있어야 합니다.
C# 빌드
CodeQL은(는) C# 코드에 대해 빌드 모드 autobuild
또는 manual
을 지원합니다.{ %endif %}
지원되는 시스템 유형 | 시스템 이름 |
---|---|
운영 체제 | Windows, macOS 및 Linux |
빌드 시스템 | .NET 및 MSbuild, 빌드 스크립트 |
CodeQL에 의해 삽입된 C# 컴파일러 플래그
Note
다음 컴파일러 플래그는 빌드 모드 manual
을(를) 사용하는 경우에만 적용됩니다.
CodeQL 추적기를 사용하면 빌드 프로세스를 가로채고 관련 CodeQL 언어 추출기에 정보를 전달하여 컴파일된 모든 언어를 추출할 수 있도록 합니다. 추적기는 C# 컴파일러 호출에 특정 플래그를 삽입하여 모든 구성 요소가 빌드되고 CodeQL 데이터베이스에 포함되도록 합니다. 그러면 C# 코드가 CodeQL 분석 중에 예상한 것과 다른 방식으로 빌드될 수 있습니다.
/p:MvcBuildViews=true
이 옵션을 true
(으)로 설정하면 ASP.NET MVC(모델 뷰 컨트롤러) 프로젝트의 뷰가 빌드 프로세스의 일부로 미리 컴파일되므로 오류를 포착하고 성능을 개선하는 데 도움이 될 수 있습니다. 추적기는 이 플래그를 삽입하여 CodeQL이(가) 이러한 보기에서 생성된 코드를 통해 데이터 흐름을 포함할 수 있는 보안 문제를 찾아서 강조 표시합니다. 자세한 내용은 Microsoft Learn의 "MVC 애플리케이션에 보기 추가"를 참조하세요.
/p:UseSharedCompilation=false
이 옵션을 false
(으)로 설정하면 공유 컴파일 기능을 사용할 수 없으므로 빌드 시간이 느려질 수 있습니다. /p:UseSharedCompilation=false
을(를) 지정하지 않으면 msbuild
은(는) 컴파일러 서버 프로세스를 시작하고 모든 컴파일은 해당 단일 프로세스에서 수행됩니다. 그러나 CodeQL 추적기는 새로 만든 프로세스의 인수를 검사하는 데 따라 달라집니다.
/p:EmitCompilerGeneratedFiles=true
이 옵션을 true
(으)로 설정하면 빌드 프로세스 중에 컴파일러가 생성한 파일을 내보냅니다. 이 옵션을 선택하면 컴파일러가 향상된 정규식 지원, 직렬화 및 웹 애플리케이션 뷰 생성 등의 기능을 지원하는 데 사용되는 추가 소스 파일을 생성합니다. 이렇게 생성된 아티팩트는 일반적으로 컴파일러에 의해 디스크에 쓰이지 않지만, 옵션을 true
(으)로 설정하면 파일을 디스크에 강제로 쓰게 되어 추출기가 파일을 처리할 수 있습니다.
일부 레거시 프로젝트와 .sqlproj
파일을 사용하는 프로젝트의 경우, 삽입된 /p:EmitCompilerGeneratedFiles=true
속성으로 인해 msbuild
에서 예기치 않은 문제가 발생하는 것을 볼 수 있습니다. 이 문제 해결에 대한 자세한 내용은 "C# 컴파일러가 예기치 않게 실패" 항목을 참조하세요.
Windows 자동 검색
autobuild
프로세스는 다음 방법을 사용하여 C#에 적합한 빌드 메서드를 자동 검색하려고 시도합니다.
- 루트에 가장 가까운 솔루션(
.sln
) 또는 프로젝트(.csproj
) 파일에 대해dotnet build
를 호출합니다. - 루트에 가장 가까운 솔루션 또는 프로젝트 파일에 대해
MSBuild.exe
를 호출합니다.autobuild
는 최상위 디렉터리에서 동일한(가장 짧은) 깊이에 있는 여러 솔루션 또는 프로젝트 파일을 검색하면 모두 빌드하려고 합니다. - 빌드 스크립트처럼 보이는 스크립트(
build.bat
,build.cmd
, 및build.exe
)를 해당 순서대로 호출합니다.
Windows의 C#용 실행기 요구 사항
자체 호스팅 실행기에서 .NET Core 애플리케이션 개발의 경우 .NET SDK가 필요합니다(예 dotnet
: ).
.NET Framework 애플리케이션 개발의 경우 Microsoft Build Tools(msbuild
용) 및 NuGet CLI(nuget
용)가 필요합니다.
Windows 실행기는 powershell.exe
가 PATH
에 있어야 합니다.
Linux 및 macOS 자동 검색
- 루트에 가장 가까운 솔루션(
.sln
) 또는 프로젝트(.csproj
) 파일에 대해dotnet build
를 호출합니다. - 루트에 가장 가까운 솔루션 또는 프로젝트 파일에 대해
MSbuild
를 호출합니다.autobuild
는 최상위 디렉터리에서 동일한(가장 짧은) 깊이에 있는 여러 솔루션 또는 프로젝트 파일을 검색하면 모두 빌드하려고 합니다. - 빌드 스크립트처럼 보이는 스크립트(
build
및build.sh
)를 해당 순서대로 호출합니다.
Linux 및 macOS의 C#용 실행기 요구 사항
자체 호스팅 실행기에서 .NET Core 애플리케이션 개발의 경우 .NET SDK가 필요합니다(예 dotnet
: ).
.NET Framework 애플리케이션 개발의 경우 Mono 런타임(mono
, msbuild
또는 nuget
실행용)이 필요합니다.
Go 빌드
CodeQL은(는) Go 코드에 대해 빌드 모드 autobuild
또는 manual
를 지원합니다.
Go용 자동 빌드 요약
지원되는 시스템 유형 | 시스템 이름 |
---|---|
운영 체제 | Windows, macOS 및 Linux |
빌드 시스템 | Go 모듈, dep 및 글라이드뿐만 아니라 메이크파일 및 닌자 스크립트를 포함한 빌드 스크립트 |
Go용 자동 검색
autobuild
프로세스는 모든 .go
파일을 추출하기 전에 Go 리포지토리에 필요한 종속성을 설치하는 적절한 방법을 자동으로 검색하려고 시도합니다.
- 이러한 명령 중 하나가 성공할 때까지
make
,ninja
,./build
또는./build.sh
를 적용하고 후속go list ./...
명령도 성공하면, 필요한 종속성이 설치되었음을 나타냅니다. - 이러한 명령 중 어느 것도 성공하지 못한 경우
go.mod
,Gopkg.toml
또는glide.yaml
을 찾아go get
(벤더링이 사용 중이 아닐 경우),dep ensure -v
또는glide install
을 각각 실행하여 종속성 설치를 시도합니다. - 마지막으로 이러한 종속성 관리자에 대한 구성 파일을 찾을 수 없는 경우,
GOPATH
외에도 적합한 리포지토리 디렉터리 구조를 다시 정렬하고go get
을(를) 사용하여 종속성을 설치하는 데 사용합니다. 디렉터리 구조는 추출이 완료된 후 정상으로 되돌립니다. go build ./...
실행과 유사하게 리포지토리의 모든 Go 코드를 추출합니다.
Note
기본 설정을 사용하는 경우 호환되는 버전의 Go 언어를 자동으로 설치하는 go.mod
파일을 찾습니다.{ % ifversion code-scanning-default-setup-self-hosted-310 %} 인터넷에 액세스할 수 없는 기본 설정으로 자체 호스팅 실행기를 사용하는 경우, 호환되는 버전의 Go를 수동으로 설치할 수 있습니다.
Go에 대한 추출기 옵션
기본적으로 테스트 코드(_test.go
(으)로 끝나는 파일 내 코드)는 분석되지 않습니다. CodeQL CLI를 사용할 때 옵션 --extractor-option extract_tests=true
을(를) 사용하거나 환경 변수 CODEQL_EXTRACTOR_GO_OPTION_EXTRACT_TESTS
을(를) true
(으)로 설정하여 이를 재정의할 수 있습니다.
또한 vendor
디렉터리는 기본적으로 CodeQL Go 분석에서 제외됩니다. CodeQL CLI를 사용할 때 --extractor-option extract_vendor_dirs=true
옵션을 전달하거나 환경 변수 CODEQL_EXTRACTOR_GO_OPTION_EXTRACT_VENDOR_DIRS
을(를) true
(으)로 설정하여 이 옵션을 재정의할 수 있습니다.
Java 및 Kotlin 빌드
CodeQL은(는) 다음 빌드 모드를 지원합니다.
- Java:
none
,autobuild
또는manual
- Kotlin:
autobuild
또는manual
리포지토리에 대한 기본 설정을 처음 활성화할 때 Java 코드만 감지되면 빌드 모드가 none
로 설정됩니다. Kotlin 또는 Java 및 Kotlin 코드의 조합이 검색되면 빌드 모드가 autobuild
로 설정됩니다.
나중에 none
빌드 모드를 사용하는 리포지토리에 Kotlin 코드를 추가하는 경우 CodeQL 분석은 Kotlin이 지원되지 않는다는 경고 메시지를 보고합니다. 기본 설정을 사용하지 않도록 설정하고 다시 사용하도록 설정해야 합니다. 기본 설정을 다시 사용하도록 설정하면 두 언어를 모두 분석할 수 있도록 빌드 모드가 autobuild
로 변경됩니다. 또는 고급 설정으로 변경할 수 있습니다. 자세한 내용은 "경고: 빌드 없이 처리할 수 없는 프로젝트에서 X Kotlin 파일이 검색됨"을(를) 참조하세요.
Java용 빌드 없음
CodeQL은(는) 존재하는 모든 Java 파일에서 데이터베이스를 만들기 전에 정확한 종속성 정보를 추출하기 위해 먼저 Gradle 또는 Maven을 실행하려고 시도하지만 빌드를 호출하지는 않습니다. 모든 루트 Maven 또는 Gradle 프로젝트 파일(상위 디렉터리에 빌드 스크립트가 없는 빌드 스크립트)은 종속성 정보를 쿼리하고 충돌이 있는 경우 최신 종속성 버전을 사용하는 것이 좋습니다. Maven 또는 Gradle을 실행하기 위한 실행기 요구 사항에 대한 자세한 내용은 "Java용 실행기 요구 사항"을 참조하세요.
Java용 빌드 분석 없음의 정확도
빌드 없이 CodeQL Java 데이터베이스를 만들면 다음과 같은 경우 autobuild
또는 수동 빌드 단계를 사용하는 것보다 덜 정확한 결과를 생성할 수 있습니다.
- Gradle 또는 Maven 빌드 스크립트는 종속성 정보를 쿼리할 수 없으며, 종속성 추측(Java 패키지 이름 기반)은 정확하지 않습니다.
- 리포지토리는 일반적으로 빌드 프로세스 중에 코드를 생성합니다. 이는 다른 모드를 사용하여 CodeQL 데이터베이스를 만든 경우 분석됩니다.
다음 단계를 수행하여 보다 정확한 분석을 보장할 수 있습니다.
- 공용 인터넷에 대한 액세스를 제공하거나 비공개 아티팩트 리포지토리에 액세스할 수 있도록 합니다.
- 리포지토리에 종속성이 동일한 여러 버전이 필요한지 확인합니다. CodeQL은(는) 하나의 버전만 사용할 수 있으며 일반적으로 여러 버전이 있는 최신 버전을 선택합니다. 이 방법은 모든 리포지토리에서 작동하지 않을 수 있습니다.
- 여러 원본 Java 파일에서 둘 이상의 JDK API 버전이 필요한지 확인합니다. 여러 버전이 표시되면 CodeQL은(는) 빌드 스크립트에 필요한 가장 높은 버전을 사용합니다. 즉, 하위 버전의 JDK가 필요한 일부 파일이 부분적으로 분석될 수 있습니다. 예를 들어, 일부 파일에 JDK 8이 필요하지만 하나 이상의 빌드 스크립트에서 JDK 17 요구 사항이 발견되면 CodeQL은(는) JDK 17을 사용합니다. JDK 8이 필요하고 JDK 17을 사용하여 빌드할 수 없는 파일은 부분적으로 분석됩니다.
- 클래스 이름이 충돌(예시:
org.myproject.Test
을(를) 정의하는 여러 파일)하지 않도록 합니다. 그렇지 않으면 메서드 호출 대상이 누락되어 데이터 흐름 분석에 영향을 줄 수 있습니다.
Java용 자동 빌드 요약
지원되는 시스템 유형 | 시스템 이름 |
---|---|
운영 체제 | Windows, macOS 및 Linux(제한 없음) |
빌드 시스템 | Gradle, Maven 및 Ant |
Java용 자동 검색
autobuild
프로세스는 다음 전략을 적용하여 Java 코드베이스에 대한 빌드 시스템을 확인하려고 합니다.
- 루트 디렉터리에서 빌드 파일을 검색합니다. Gradle, Maven 및 Ant 빌드 파일을 순서대로 확인합니다.
- 찾은 첫 번째 빌드 파일을 실행합니다. Gradle 및 Maven 파일이 모두 있는 경우 Gradle 파일이 사용됩니다.
- 그렇지 않으면 루트 디렉터리의 직접 하위 디렉터리에서 빌드 파일을 검색합니다. 하나의 하위 디렉터리에 빌드 파일이 포함되어 있는 경우 해당 하위 디렉터리에서 식별된 첫 번째 파일을 실행합니다(1의 경우와 동일한 기본 설정 사용). 둘 이상의 하위 디렉터리에 빌드 파일이 포함된 경우 오류를 보고합니다.
Java용 실행기 요구 사항
자체 호스팅 실행기를 사용하는 경우, Java의 필수 버전이 있어야 합니다.
-
실행기를 사용하여 단일 버전의 Java가 필요한 리포지토리를 분석하는 경우, 적절한 JDK 버전을 설치해야 하며 PATH 변수에 있어야 합니다(
java
및javac
을(를) 찾을 수 있도록). -
실행기를 사용하여 여러 버전의 Java가 필요한 리포지토리를 분석하는 경우 적절한 JDK 버전을 설치해야 하며
toolchains.xml
파일을 통해 지정할 수 있습니다. 이 파일은 일반적으로 Apache Maven에서 사용하는 구성 파일로, 도구의 위치, 도구 버전 및 도구를 사용하는 데 필요한 추가 구성을 지정할 수 있습니다. 자세한 내용은 Apache Maven 설명서의 "도구 체인 사용 가이드"를 참조하세요.
다음 실행 파일은 다양한 Java 프로젝트에 필요할 수 있으며 PATH 변수에 있어야 하지만 모든 경우에 필수는 아닙니다.
mvn
Apache Mavengradle
Gradleant
Apache Ant
또한 프로젝트가 의존하는 빌드 시스템(예시: make
, cmake
, bazel
) 및 유틸리티(예시: python
, perl
, lex
, yacc
)를 설치해야 합니다.
Windows 실행기는 powershell.exe
가 PATH
에 있어야 합니다.
Swift 빌드
CodeQL은(는) Swift 코드에 대해 빌드 모드 autobuild
또는 manual
를 지원합니다.
Swift용 자동 빌드 요약
지원되는 시스템 유형 | 시스템 이름 |
---|---|
운영 체제 | macOS |
빌드 시스템 | Xcode |
이 autobuild
프로세스는 Xcode 프로젝트 또는 작업 영역에서 가장 큰 대상을 빌드하려고 합니다.
Swift 코드의 코드 검사는 기본적으로 macOS 실행기를 사용합니다.
ARC 실행기는 Linux만 사용하고 Swift에는 macOS 실행기만 필요하기 때문에 Actions Runner Controller(ARC)의 일부인 실행기에는 Swift 코드의 Code scanning이(가) 지원되지 않습니다. 그러나 ARC 실행기와 자체 호스팅 macOS 실행기를 혼합하여 사용할 수 있습니다. 자세한 내용은 "Actions Runner Controller 정보"을(를) 참조하세요.
CodeQL 분석 워크플로 Swift 컴파일 사용자 지정하기
xcodebuild
및 swift build
둘 다 Swift 빌드에 대해 지원됩니다. 빌드하는 동안에는 하나의 아키텍처만 대상으로 지정하는 것이 좋습니다. 예를 들어, xcodebuild
에는 ARCH=arm64
, 또는 swift build
에는 --arch arm64
입니다.
archive
및 test
옵션을 xcodebuild
에 전달할 수 있습니다. 그러나 표준 xcodebuild
명령은 가장 빠르며 성공적인 검사를 위해 CodeQL에 필요한 모든 것이기 때문에 권장됩니다.
Swift 분석의 경우 CodeQL 데이터베이스를 생성하기 전에 항상 CocoaPods 또는 Carthage를 통해 관리되는 종속성을 명시적으로 설치해야 합니다.