Skip to main content

컴파일된 언어에 CodeQL 코드 스캐닝

컴파일된 언어, 사용 가능한 빌드 옵션을 분석하는 방법을 CodeQL 이해하고 필요한 경우 데이터베이스 생성 프로세스를 사용자 지정하는 방법을 알아봅니다.

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

쓰기 권한이 있는 사용자 if advanced setup is already enabled

Code scanning은 다음 리포지토리 유형에서 사용할 수 있습니다.

  • GitHub.com에 대한 퍼블릭 리포지토리
  • GitHub Team, GitHub Enterprise Cloud 또는 GitHub Enterprise Server에 대한 조직 소유의 리포지토리로, GitHub Advanced Security 가 활성화되어 있습니다.

참고

사이트 관리자가 먼저 code scanning을 사용하도록 설정해야 이 기능을 사용할 수 있습니다. GitHub Actions를 사용하여 코드를 스캔하려면 사이트 관리자도 GitHub Actions를 사용하도록 설정하고 필요한 인프라를 설정해야 합니다. 자세한 내용은 어플라이언스에 대한 코드 스캐닝 구성을(를) 참조하세요.

빌드 모드 비교

빌드 모드 특성없음자동 빌드설명서
기본 설정 및 조직 수준의 활성화에 사용됩니다.예(C# 및 Java)
          `none`가 지원되지 않는 곳에서 예 | No |

| 사용자 구성 없이 분석 성공함 | 예 | 변수 | No | | 분석의 완전성 | 생성된 코드가 분석되지 않음 | 변수 | 사용자 제어 | | 분석의 정확성 | 좋음 | 좋음 | 최상의 |

빌드 모드 선택

처음으로 또는 여러 리포지토리에서 설정하는 code scanning 경우 기본 설정을 사용하는 것이 가장 좋습니다. 기본 설정은 가능한 한 CodeQL 빨리 경고 수정을 시작할 수 있도록 데이터베이스를 생성하고 코드를 분석하는 데 사용할 수 있는 가장 간단한 방법을 사용합니다. 초기 경고를 해결하고 나면 위험 수준이 높은 리포지토리에 수동 빌드 프로세스를 사용하여 고급 설정으로 전환할 수 있습니다.

컴파일된 언어에 대한 언어별 autobuild 동작, 실행기 요구 사항 및 빌드 모드 세부 정보는 컴파일된 언어에 대한 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@v5

# Initializes CodeQL tools and creates a codebase for analysis.
- name: Initialize CodeQL
  uses: github/codeql-action/init@v4
  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에 대한 종속성 캐싱 사용 설정

기본 설정 워크플로의 경우 종속성 캐싱은 퍼블릭 및 프라이빗 리포지토리의 GitHub에서 호스팅되는 실행기에만 사용하도록 설정되어 있습니다.

고급 설정 워크플로에서는 기본적으로 종속성 캐싱이 비활성화됩니다. CodeQL에 대한 종속성 캐싱을 활성화하려면 고급 설정 워크플로에서 CodeQL 작업에 대한 dependency-caching 설정을 사용합니다. 이 설정은 다음 값을 허용합니다.

  •         `false`
            /
            `none`
            /
            `off`: 종속성 캐싱이 비활성화됩니다(기본값).
    
  •         `restore`: 기존 캐시만 복원하고 새 캐시는 저장하지 않습니다.
    
  •         `store`: 새 캐시만 저장하고 기존 캐시는 복원하지 않습니다.
    
  •         `true`
            /
            `full`
            /
            `on`: 기존 캐시를 복원하고 새 캐시는 저장합니다.
    

예를 들어, 다음 설정은 CodeQL 작업에 대한 종속성 캐싱을 활성화합니다.

    # Initializes CodeQL with dependency caching enabled
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v4
      with:
        languages: java
        dependency-caching: true

          `none` 빌드 모드를 CodeQL에 사용하세요.

          C# 및 Java 의 경우 CodeQL리포지토리에 Kotlin 코드도 포함되어 있지 않으면 기본 설정을 code scanning 사용하도록 설정할 때 빌드를 요구하지 않고 데이터베이스를 만듭니다. 리포지토리에 Java 코드 외에 Kotlin 코드가 포함된 경우 Kotlin 분석에 빌드가 필요하기 때문에 자동 빌드 프로세스에서 기본 설정을 사용하도록 설정됩니다.

다음과 같은 경우 빌드 없이 데이터베이스를 CodeQL 만들면 사용 autobuild 또는 수동 빌드 단계보다 덜 정확한 결과를 생성할 수 있습니다.

  • 빌드 스크립트는 종속성 정보를 쿼리할 수 없고 종속성 추측은 정확하지 않습니다.

  • 리포지토리는 보통 빌드 프로세스 중에 코드를 생성합니다.

            `autobuild` 또는 수동 빌드 단계를 사용하기 위해서는 고급 설정을 사용할 수 있습니다.
    

참고

Java 분석의 경우 build-mode``none로 설정되고 Kotlin 코드가 리포지토리에 있으면 Kotlin 코드가 분석되지 않으며 경고가 생성됩니다. 컴파일된 언어에 대한 CodeQL 빌드 옵션 및 단계을(를) 참조하세요.

          `autobuild`를 CodeQL으로 사용하십시오.

이 CodeQL 작업은 다음 경우에 컴파일된 언어를 분석하는 데 사용합니다 autobuild .

  • 기본 설정이 사용되며 이 언어는 none 빌드를 지원하지 않습니다(C# 및 Java는 지원됨).
  • 고급 설정이 활성화되고 워크플로는 build-mode: autobuild를 지정합니다.
  • 고급 설정이 활성화되고 워크플로에 autobuild 작업(github/codeql-action/autobuild@v4)을 사용하는 언어용으로 자동 작성 단계가 있습니다.

          `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@v4
    with:
      languages: ${{ matrix.language }}
      build-mode: ${{ matrix.build-mode }}

자동 구성 단계 사용

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v4
      with:
        languages: ${{ matrix.language }}

    - name: Autobuild
      uses: github/codeql-action/autobuild@v4

수동으로 빌드 단계 지정

고급 설정을 활성화한 경우에만 수동 빌드 단계를 지정할 수 있으며, 코드 검사에 대한 고급 설정 구성을 참조하세요.

autobuild 가 실패했거나 autobuild 프로세스에서 빌드한 것과는 다른 소스 파일들을 분석하고자 한다면 다음을 수행해야 합니다.

  • 워크플로에서 특정 언어에 대한 빌드 모드를 지정했다면, 빌드 모드를 manual로 변경하세요.
  • 워크플로에 autobuild 단계가 있는 경우, autobuild 단계를 삭제하거나 주석으로 처리합니다.

다음으로, run 단계의 주석 처리를 제거하고 사용할 빌드 프로세스를 직접 지정합니다. C/C++, C#, Go, Java, Kotlin 및 Swift의 경우 CodeQL은 지정된 빌드 단계에서 빌드된 모든 소스 코드를 분석합니다.

          `build-mode`를 `manual`로 정의하도록 워크플로를 업데이트합니다.
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v4
  with:
    languages: ${{ matrix.language }}
    build-mode: manual
- uses: github/codeql-action/analyze@v4
  with:
    category: "/language:${{ matrix.language }}"

또는 "자동 빌드" 단계를 주석으로 처리하도록 워크플로를 업데이트합니다.

    # Autobuild attempts to build any compiled languages.
    # - name: Autobuild
    #  uses: github/codeql-action/autobuild@v4

빌드 명령 추가

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

- run: |
    make bootstrap
    make release
          `run` 키워드에 대한 자세한 내용은 [AUTOTITLE](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun)을(를) 참조하세요.

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