CodeQL팩과 작업하기 GitHub Enterprise Server
기본적으로 CodeQL CLI에서 CodeQL 팩을 다운로드하고 Container registry에 팩을 게시하도록 예상합니다 GitHub.com. 그러나 GitHub Enterprise Server의 Container registry에서 qlconfig.yml 파일을 만들어 CLI에 각 팩에 사용할 Container registry을 알려줌으로써 CodeQL 팩을 함께 사용할 수도 있습니다.
기본 설정 텍스트 편집기를 사용하여 linux/MacOS 또는 Windows ~/.codeql/qlconfig.yml``%HOMEPATH%\.codeql\qlconfig.yml 파일을 만들고 하나 이상의 패키지 이름 패턴에 사용할 레지스트리를 지정하는 항목을 추가합니다.
예를 들어, 다음 qlconfig.yml 파일은 codeql/\* 또는 other-org/* 조직과 일치하는 팩을 제외하고, 모든 팩을 Container registry의 https://GHE_HOSTNAME에 연결합니다. codeql/\* 또는 GitHub.com에서 Container registry와 연결된 팩은 특정합니다.
registries:
- packages:
- 'codeql/*'
- 'other-org/*'
# Container registry on GitHub.com
url: https://ghcr.io/v2/
- packages: '*'
# Container registry hosted at `https://GHE_HOSTNAME`
url: https://containers.GHE_HOSTNAME/v2/
지정된 패키지 이름에 대해 사용할 레지스트리를 결정하기 위해, CodeQL CLI는 packages 목록에서 해당 패키지 이름과 일치하는 속성이 있는 첫 번째 항목 registries을(를) 찾습니다.
즉, 일반적으로 가장 구체적인 패키지 이름 패턴을 먼저 정의하는 것이 좋습니다.
packages 속성은 단일 패키지 이름, GLOB 패턴 또는 패키지 이름 및 GLOB 패턴의 YAML 목록일 수 있습니다.
`registries` 파일 내에 `codeql-workspace.yml` 목록을 배치할 수도 있습니다. 이렇게 하면 특정 작업 영역 내에서 사용할 레지스트리를 정의하여 작업 영역의 다른 CodeQL 사용자 간에 공유할 수 있습니다. 이 `registries`의 `codeql-workspace.yml` 목록이 병합되어 전역 `qlconfig.yml`의 목록보다 우선적으로 적용됩니다.
`codeql-workspace.yml`에 대한 자세한 내용은 [AUTOTITLE](/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/about-codeql-workspaces#about-codeql-workspaces)을(를) 참조하세요.
이제 codeql pack publish, codeql pack download, codeql database analyze를 사용하여 GitHub Enterprise Server에서 팩을 관리할 수 있습니다.
인증 중 GitHubContainer registries
적절한 인증을 통해 팩을 게시하고 프라이빗 팩을 다운로드할 수 있습니다 GitHubContainer registry.
GitHub.com에서 Container registries에 인증하기
Container registry에 두 가지 방법으로 인증할 수 있습니다.
1.
--github-auth-stdin 옵션을 CodeQL CLI에 전달하고 나서, GitHub Apps 토큰이나 personal access token를 표준 입력을 통해 공급합니다.
- 환경 변수
GITHUB_TOKEN를 GitHub Apps 토큰 또는 personal access token.로 설정합니다.
GitHub Enterprise Server에서 Container registries에 인증하는 중
마찬가지로, GitHub Enterprise Server에서 Container registry에 인증할 수 있으며, 또한, 다수의 레지스트리에 동시에 인증할 수 있는 두 가지 방법이 있습니다 (예: 여러 레지스트리에서 private 팩을 다운로드하거나 실행하기 위해).
-
`--registries-auth-stdin` 옵션을 CodeQL CLI에 전달한 후, 표준 입력을 통해 레지스트리 인증 문자열을 입력하십시오. -
`CODEQL_REGISTRIES_AUTH` 환경 변수를 레지스트리 인증 문자열로 설정합니다.
레지스트리 인증 문자열은 쉼표로 구분된 <registry-url>=<token> 쌍들의 목록입니다. 여기서 registry-url은 Container registry URL (예: https://containers.GHE_HOSTNAME/v2/)이고, token은 해당 Container registry에 대한 GitHub Apps 토큰 또는 personal access token입니다.
이렇게 하면 각 토큰이 지정한 Container registry에게만 전달됩니다.
예를 들어 다음 레지스트리 인증 문자열은 다음과 같이 인증해야 한다고 CodeQL CLI 지정합니다.
- 토큰
<token1>을 사용하여 GitHub.com에서 Container registry(을)를 인증합니다. - 토큰
<token2>을 사용하여https://containers.GHE_HOSTNAME/v2/에서 Container registry 엔터프라이즈에 인증합니다.
https://ghcr.io/v2/=<token1>,https://containers.GHE_HOSTNAME/v2/=<token2>
CodeQL 팩을 게시하기
다른 사용자와 CodeQL 팩을 공유하려면 해당 팩을 Container registry에 게시할 수 있습니다.
게시하기 전에 qlpack.yml 파일 구성
참고
이 문서에서는 CodeQL CLI 2.18.4 번들에서 사용할 수 있는 기능을 GitHub Enterprise Server 3.15의 초기 릴리스에 포함되어 있습니다.
사이트 관리자가 CodeQL CLI 버전을 최신 릴리스로 업데이트한 경우 최신 기능에 대한 자세한 내용은 이 문서의 GitHub Enterprise Cloud 버전을 참조하세요.
게시하기 전에 팩의 구성 세부 정보를 확인하고 수정할 수 있습니다 CodeQL . 텍스트 편집기에서 qlpack.yml 파일을 엽니다.
library: # set to true if the pack is a library. Set to false or omit for a query pack
name: <scope>/<pack>
version: <x.x.x>
description: <Description to publish with the package>
defaultSuite: # optional, one or more queries in the pack to run by default
- query: <relative-path>/query-file>.ql
defaultSuiteFile: default-queries.qls # optional, a pointer to a query-suite in this pack
license: # optional, the license under which the pack is published
dependencies: # map from CodeQL pack name to version range
-
`name:`은 GitHub 형식을 따라야 하며, 여기서 `<scope>`는 게시할 `<scope>/<pack>` 조직의 이름이고 `<pack>`는 팩의 이름입니다. -
최대 1개의
defaultSuite또는defaultSuiteFile만 허용됩니다. 실행할 기본 쿼리 그룹을 정의하는 두 가지 방법이 있습니다. 첫 번째는 qlpack.yml 파일에서 직접 쿼리를 지정하고 두 번째는 팩에 쿼리 도구 모음을 지정합니다.
`codeql pack publish` 실행
팩을 게시할 GitHubContainer registry준비가 되면 팩 디렉터리의 루트에서 다음 명령을 실행할 수 있습니다.
codeql pack publish
게시된 패키지는 파일의 GitHub 범위에서 지정한 조직의 패키지 섹션에 qlpack.yml 표시됩니다.
참고
기본 설정 구성의 일부로 조직의 모든 리포지토리로 범위를 확장하기 위해 모델 팩 GitHubContainer registry 을 게시하는 경우 코드 검사를 실행하는 리포지토리가 해당 모델 팩에 액세스할 수 있는지 확인해야 합니다. 자세한 내용은 기본 설정 구성 편집하기 및 패키지의 액세스 제어 및 표시 여부 구성을(를) 참조하세요.
기존 CodeQL 팩 다운로드
다른 사용자가 만든 팩을 실행하려면 먼저 다음 명령을 실행하여 다운로드해야 합니다.
codeql pack download <scope>/<pack>@x.x.x
-
`<scope>`: 다운로드할 GitHub 조직의 이름입니다. -
`<pack>`: 다운로드하려는 팩의 이름입니다. -
`@x.x.x`: 선택적 버전 번호입니다. 생략하면 최신 버전이 다운로드됩니다.
이 명령은 여러 팩에 대한 인수를 허용합니다.
다운로드할 쿼리 팩의 특정 버전 번호를 지정하는 스크립트를 작성하는 경우 버전을 최신 버전 CodeQL 으로 업데이트할 때 최신 버전의 쿼리 팩으로 전환해야 할 수도 있습니다. 최신 버전은 매우 오래된 버전 CodeQL 에 고정된 쿼리 팩과 함께 사용할 때 성능이 저하될 수 있습니다. 자세한 내용은 CodeQL 쿼리 팩 참조을(를) 참조하세요.
CodeQL팩을 사용하여 CodeQL 데이터베이스 분석
팩을 사용하여 데이터베이스를 CodeQLCodeQL 분석하려면 다음 명령을 실행합니다.
codeql database analyze <database> <scope>/<pack>@x.x.x:<path>
-
`<database>` CodeQL: 분석할 데이터베이스입니다. -
`<scope>`: 팩이 게시된 GitHub 조직의 이름입니다. -
`<pack>`: 사용 중인 팩의 이름입니다. -
`@x.x.x`: 선택적 버전 번호입니다. 생략하면 최신 버전이 사용됩니다. -
`:<path>`: 필요에 따라 실행할 쿼리, 디렉터리 또는 쿼리 도구 모음의 경로를 포함시킵니다. 생략하면 팩의 기본 쿼리 도구 모음이 사용됩니다.
이 analyze 명령은 지정된 CodeQL 팩의 기본 모음을 실행합니다. 데이터베이스를 분석하는 데 사용할 여러 CodeQL 팩을 CodeQL 지정할 수 있습니다. 다음은 그 예입니다.
codeql <database> analyze <scope>/<pack> <scope>/<other-pack>
참고
이 codeql pack download 명령은 다운로드한 팩을 로컬 수정용이 아닌 내부 위치에 저장합니다. 다운로드 후 팩이 수정되면 예기치 않은(및 문제 해결이 어려운) 동작이 발생할 수 있습니다. 사용자 지정 팩에 대한 자세한 정보는 CodeQL 팩 만들기 및 작업을(를) 참조하세요.