코드 검사를 위한 언어 및 빌드 사용자 지정
CodeQL 코드 검사는 기본적으로 자동 작성 기능을 사용하여 많은 언어를 지원합니다. 그러나 코드에서 비-표준 빌드 프로세스를 사용할 경우 사용자 지정 빌드 단계를 사용하여 워크플로를 사용자 지정해야 할 수 있습니다.
이 단원에서는 코드 검사로 분석되는 언어를 변경하는 방법과 CodeQL 사용자 지정 빌드 단계를 코드 검사 워크플로에 추가하는 방법을 설명합니다.
분석되는 언어 변경
CodeQL 코드 검사는 C/C++, C#, Go, Java, JavaScript/TypeScript, Python, Ruby 같은 지원되는 언어로 작성된 코드를 자동으로 검색합니다.
참고
CodeQL은 지원되는 언어와 프레임워크를 지속적으로 업데이트하고 있습니다. 사용 가능한 언어, 변형 및 컴파일러의 전체 목록을 보려면 설명서[7]를 참조하세요.
기본 CodeQL 분석 워크플로 파일에는 분석되는 리포지토리의 언어를 나열하는 "언어"라는 빌드 행렬이 포함되어 있습니다. 코드 검사를 리포지토리에 추가하면 CodeQL이 이 행렬을 자동으로 채웁니다. 언어 행렬을 사용하면 CodeQL이 최적화되어 각 분석을 병렬로 실행합니다. 빌드 병렬화의 성능 이점을 고려할 때 모든 워크플로에 이 구성을 채택하는 것이 좋습니다.
리포지토리에 지원되는 언어 중 둘 이상의 코드가 포함된 경우 분석할 언어를 선택할 수 있습니다. 언어가 분석되지 않게 해야 하는 몇 가지 이유가 있습니다. 예를 들어, 프로젝트에 코드의 본문과 다른 언어로 종속성이 있을 수 있는데 이러한 종속성에 대한 경고를 표시하고 싶지 않을 수 있습니다.
워크플로에서 언어 행렬을 사용하는 경우 CodeQL은 행렬의 언어만 분석하도록 하드 코딩됩니다. 분석할 언어를 변경하려면 행렬 변수의 값을 편집합니다. 언어를 제거하여 분석되지 않도록 하거나 코드 검사가 설정될 당시 리포지토리에 없던 언어를 추가할 수 있습니다. 예를 들어, 처음에 코드 검사를 설정할 때 리포지토리에 JavaScript만 있었는데 나중에 Python 코드를 추가한 경우 행렬에 python를 추가해야 합니다.
jobs:
analyze:
name: Analyze
...
strategy:
fail-fast: false
matrix:
language: ['javascript', 'python']
워크플로에 언어라는 행렬이 포함되어 있지 않으면 CodeQL이 분석을 순차적으로 실행하도록 구성됩니다. 워크플로에서 언어를 지정하지 않으면 CodeQL은 리포지토리에서 지원되는 모든 언어를 자동으로 검색하여 분석을 시도합니다. 행렬을 사용하지 않고 분석할 언어를 선택할 경우 init 작업에서 언어 매개 변수를 사용할 수 있습니다.
- uses: github/codeql-action/init@v1
with:
languages: cpp, csharp, python
코드 검사를 위한 사용자 지정 빌드 단계
지원되는 컴파일 언어의 경우 CodeQL 분석 워크플로에서 자동 빌드 작업을 사용하여 코드를 빌드할 수 있습니다. 이렇게 하면 C/C++, C#및 Java에 대한 명시적 빌드 명령을 지정할 필요가 없습니다. 또한 CodeQL은 Go 프로젝트용 빌드를 실행하여 프로젝트를 설정합니다. 그러나 다른 컴파일 언어와 달리, 저장소의 모든 Go 파일은 단순히 빌드되는 것만이 아니라 모두 추출됩니다. 사용자 지정 빌드 명령을 사용하여 빌드에서 처리되지 않는 Go 파일 추출을 건너뛸 수 있습니다.
컴파일 언어의 빌드 단계 추가
리포지토리의 C/C++, C#또는 Java 코드에 비-표준 빌드 프로세스가 있는 경우 autobuild에 실패할 수 있습니다. 워크플로에서 autobuild 단계를 제거하고 빌드 단계를 수동으로 추가해야 합니다.
autobuild 단계를 제거한 후 실행 단계의 주석 처리를 제거하고 리포지토리에 적합한 빌드 명령을 추가합니다. 워크플로 실행 단계에서는 운영 체제의 셸을 사용하여 명령줄 프로그램을 실행합니다. 이러한 명령을 수정하고 더 많은 명령을 추가하여 빌드 프로세스를 사용자 지정할 수 있습니다.
- run: |
make bootstrap
make release
리포지토리에 여러 컴파일 언어가 포함된 경우 언어별 빌드 명령을 지정할 수 있습니다. 예를 들어, 리포지토리에 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@v1
- if: matrix.language == 'java'
name: Build Java
run: |
make bootstrap
make release