CodeQL ์์ ์์ญ ์ ๋ณด
์ฐธ๊ณ ํญ๋ชฉ
์ด ๋ฌธ์์์๋ ์ด GitHub Enterprise Server ๋ฒ์ ์ ์ด๊ธฐ ๋ฆด๋ฆฌ์ค์ ํฌํจ๋ CodeQL ์์ ๊ณผ ๊ด๋ จ CodeQL CLI ๋ฒ๋ค์ ๋ฒ์ ์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ค๋ช ํฉ๋๋ค. ์ํฐํ๋ผ์ด์ฆ์์ ๋ ์ต์ ๋ฒ์ ์ CodeQL ์์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ต์ ๊ธฐ๋ฅ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ด ๋ฌธ์์GitHub Enterprise Cloud ๋ฒ์ ์ ์ฐธ์กฐํ์ธ์. ์ต์ ๋ฒ์ ์ฌ์ฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ดํ๋ผ์ด์ธ์ค์ ๋ํ ์ฝ๋ ๊ฒ์ฌ ๊ตฌ์ฑ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์ฌ๋ฌ CodeQL ํฉ์ ํจ๊ป ๊ทธ๋ฃนํํ๋ ค๋ ๊ฒฝ์ฐ CodeQL ์์ ์์ญ์ ์ฌ์ฉํฉ๋๋ค. CodeQL ์์ ์์ญ์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ ์ํธ ์ข ์๋ CodeQL ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์ฟผ๋ฆฌ ํฉ ์งํฉ์ ๊ฐ๋ฐํ๋ ๊ฒ์ ๋๋ค. CodeQL์ ๋ํ ์์ธํ ์ ๋ณด๋ CodeQL ํฉ์ ์ฌ์ฉํ์ฌ ๋ถ์ ์ฌ์ฉ์ ์ง์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
CodeQL ์์ ์์ญ์ ์ฃผ์ ์ด์ ์ ์ฌ๋ฌ CodeQL ํฉ์ ๋ ์ฝ๊ฒ ๊ฐ๋ฐํ๊ณ ์ ์ง ๊ด๋ฆฌํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. CodeQL ์์ ์์ญ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ๋ฅผ ํ์ธํ๋ CodeQL ๋ช ๋ น์ ์คํํ ๋ ์์ ์์ญ์ ๋ชจ๋ CodeQL ํฉ์ ์๋ก์ ๋ํ _์๋ณธ ์ข ์์ฑ_์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ด๋ จ๋ ์ฌ๋ฌ CodeQL ํฉ์ ๋ ์ฝ๊ฒ ๊ฐ๋ฐ, ์ ์ง ๊ด๋ฆฌ ๋ฐ ๊ฒ์ํ ์ ์์ต๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ CodeQL ์์ ์์ญ๊ณผ CodeQL ํฉ์ ํ๋์ git ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ ์ฅํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด CodeQL ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ ์ฝ๊ฒ ๊ณต์ ํ ์ ์์ต๋๋ค.
codeql-workspace.yml
ํ์ผ
CodeQL ์์
์์ญ์ codeql-workspace.yml
yaml ํ์ผ๋ก ์ ์๋ฉ๋๋ค. ์ด ํ์ผ์๋ provide
๋ธ๋ก์ด ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ํ์ ์ผ๋ก ignore
๋ฐ registries
๋ธ๋ก์ด ํฌํจ๋์ด ์์ต๋๋ค.
-
provide
๋ธ๋ก์๋ ์์ ์์ญ์์ ์ฌ์ฉํ ์ ์๋ CodeQL ํฉ์ ์ ์ํ๋ GLOB ํจํด ๋ชฉ๋ก์ด ํฌํจ๋์ด ์์ต๋๋ค. -
ignore
๋ธ๋ก์๋ ์์ ์์ญ์์ ์ฌ์ฉํ ์ ์๋ CodeQL ํฉ์ ์ ์ํ๋ GLOB ํจํด ๋ชฉ๋ก์ด ํฌํจ๋์ด ์์ต๋๋ค. -
registries
๋ธ๋ก์๋ CodeQL ํฉ์ ๊ฒ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ปจํ ์ด๋ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ ์ดํ๋ GHES URL ๋ฐ ํจํค์ง ํจํด ๋ชฉ๋ก์ด ํฌํจ๋์ด ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL ํฉ ๊ฒ์ ๋ฐ ์ฌ์ฉ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
provide
๋๋ ignore
์น์
์ ๊ฐ ํญ๋ชฉ์ qlpack.yml
ํ์ผ์ ์์น์ ๋งคํ๋์ด์ผ ํฉ๋๋ค. ๋ชจ๋ GLOB ํจํด์ ์์
์์ญ ํ์ผ์ ํฌํจํ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์๋ฉ๋๋ค. ์ด ํ์ผ์ ํ์ฉ๋๋ ํจํด ๋ชฉ๋ก์ @actions/glob ํญ๋ชฉ์ ์ฐธ์กฐํ์ธ์.
์๋ฅผ ๋ค์ด ๋ค์ codeql-workspace.yml
ํ์ผ์ experimental
๋๋ ํฐ๋ฆฌ์ ํฉ์ ์ ์ธํ๊ณ codeql-packs
๋๋ ํฐ๋ฆฌ์์ ์ฌ๊ท์ ์ผ๋ก ์ฐพ์ ๋ชจ๋ CodeQL ํฉ์ ํฌํจํ๋ ์์
์์ญ์ ์ ์ํฉ๋๋ค. registries
๋ธ๋ก์ GitHub์ ๊ธฐ๋ณธ ์ปจํ
์ด๋ ๋ ์ง์คํธ๋ฆฌ์ธ https://ghcr.io/v2/
์์ codeql/\*
ํฉ์ ๋ค์ด๋ก๋ํด์ผ ํ๋ค๊ณ ์ง์ ํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ํฉ์ ๋ค์ด๋ก๋ํ์ฌ GHE_HOSTNAME
์ ๋ ์ง์คํธ๋ฆฌ์ ๊ฒ์ํด์ผ ํฉ๋๋ค.
provide:
- "*/codeql-packs/**/qlpack.yml"
ignore:
- "*/codeql-packs/**/experimental/**/qlpack.yml"
registries:
- packages: 'codeql/*'
url: https://ghcr.io/v2/
- packages: '*'
url: https://containers.GHE_HOSTNAME/v2/
codeql-workspace.yml
ํ์ผ์ ์์ํ CodeQL ํฉ์ด ํฌํจ๋์ด ์๋์ง ํ์ธํ๋ ค๋ฉด ์์
์์ญ๊ณผ ๋์ผํ ๋๋ ํฐ๋ฆฌ์์ codeql pack ls
๋ช
๋ น์ ์คํํฉ๋๋ค. ๋ช
๋ น์ ๊ฒฐ๊ณผ๋ ์์
์์ญ์ ๋ชจ๋ CodeQL ํฉ์ ๋ชฉ๋ก์
๋๋ค.
์๋ณธ ์ข ์์ฑ
์๋ณธ ์ข
์์ฑ์ CodeQL ํจํค์ง ์บ์ ์ธ๋ถ์ ๋ก์ปฌ ํ์ผ ์์คํ
์์ ํ์ธ๋ CodeQL ํฉ์
๋๋ค. ์ด๋ฌํ ์ข
์์ฑ์ ๋์ผํ CodeQL ์์
์์ญ์ ์๊ฑฐ๋ ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ --additional-packs
๊ฒฝ๋ก ์ต์
์ผ๋ก ์ง์ ๋ ์ ์์ต๋๋ค. ๋ก์ปฌ์์ ์ฟผ๋ฆฌ๋ฅผ ์ปดํ์ผํ๊ณ ์คํํ๋ ๊ฒฝ์ฐ ์๋ณธ ์ข
์์ฑ์ CodeQL ํจํค์ง ์บ์์ ์๋ ๋ชจ๋ ์ข
์์ฑ๊ณผ qlpack.yml
์ ์ ์๋ ๋ฒ์ ์ ์ฝ ์กฐ๊ฑด์ ์ฌ์ ์ํฉ๋๋ค. ๋์ผํ ์์
์์ญ์ CodeQL ํฉ์ ๋ํ ๋ชจ๋ ์ฐธ์กฐ๋ ์๋ณธ ์ข
์์ฑ์ผ๋ก ํ์ธ๋ฉ๋๋ค.
์ด๋ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ํนํ ์ ์ฉํฉ๋๋ค.
-
์คํ ์ค์ธ ์ฟผ๋ฆฌ ํฉ์ ์ข ์์ฑ ์ค ํ๋๊ฐ ์์ง ๊ฒ์๋์ง ์์์ต๋๋ค. ์๋ณธ์์ ํ์ธํ๋ ๊ฒ์ด ํด๋น ํฉ์ ์ฐธ์กฐํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋๋ค.
-
์ฌ๋ฌ ํฉ์ ๋์์ ๋ณ๊ฒฝํ๊ณ ํจ๊ป ํ ์คํธํ๋ ค๊ณ ํฉ๋๋ค. ์๋ณธ์์ ํ์ธํ๋ฉด ํฉ์ ๋ฒ์ ์ ๋ณ๊ฒฝ ๋ด์ฉ๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค.
CodeQL ์์ ์์ญ ๋ฐ ์ฟผ๋ฆฌ ํ์ธ
์ฟผ๋ฆฌ ๋๋ ํฉ์ ํ์ธํ๋ CodeQL ๋ช
๋ น์ ์คํํ ๋ ์์
์์ญ์ ๋ชจ๋ CodeQL ํฉ์ ์๋ก์ ๋ํ ์๋ณธ ์ข
์์ฑ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์์
์์ญ์ ํฉ ๋๋ ํฐ๋ฆฌ์์ codeql pack install
์ ์คํํ๋ฉด ํด๋น ์ข
์์ฑ์ ํจํค์ง ์บ์์ ๋ค์ด๋ก๋ํ๊ณ codeql-pack.lock.yml
ํ์ผ์ ์ถ๊ฐํ๋ ๋์ ์์
์์ญ์์ ์ฐพ์ ์ ์๋ ๋ชจ๋ ์ข
์์ฑ์ด ์ฌ์ฉ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL ํฉ ๋ง๋ค๊ธฐ ๋ฐ ์์
์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๋ง์ฐฌ๊ฐ์ง๋ก codeql pack publish
๋ฅผ ์ฌ์ฉํ์ฌ CodeQL ์ฟผ๋ฆฌ ํฉ์ GitHub ์ปจํ
์ด๋ ๋ ์ง์คํธ๋ฆฌ์ ๊ฒ์ํ๋ฉด ๋ช
๋ น์ ๋ก์ปฌ ํจํค์ง ์บ์์ ์๋ ์ข
์์ฑ์ ์ฌ์ฉํ๋ ๋์ ํญ์ ์์
์์ญ์ ์ข
์์ฑ์ ์ฌ์ฉํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ข ์์ฑ์์ ์ฟผ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๋ก์ปฌ ๋ณ๊ฒฝ ๋ด์ฉ์ด ํด๋น ์์ ์์ญ์์ ๊ฒ์ํ๋ ๋ชจ๋ ์ฟผ๋ฆฌ ํฉ์ ์๋์ผ๋ก ๋ฐ์๋ฉ๋๋ค.
์์
๋ค์ codeql-workspace.yml
ํ์ผ์ ์ดํด๋ณด์ธ์.
provide:
- "**/qlpack.yml"
๋ค์ CodeQL ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ qlpack.yml
ํ์ผ์ ์์
์์ญ์ ์์ต๋๋ค.
name: my-company/my-library
library: true
version: 1.0.0
๋ค์ CodeQL ์ฟผ๋ฆฌ ํฉ qlpack.yml
ํ์ผ์ ์์
์์ญ์ ์์ต๋๋ค.
name: my-company/my-queries
version: 1.0.0
dependencies:
my-company/my-library: "*"
codeql/cpp-all: ~0.2.0
CodeQL ์ฟผ๋ฆฌ ํฉ์ dependencies
๋ธ๋ก์ธ my-company/my-queries
๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ์ ๋ฒ์ ์ผ๋ก "*"
๋ฅผ ์ง์ ํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ์ ์ด๋ฏธ codeql-workspace.yml
์ ์๋ณธ ์ข
์์ฑ์ผ๋ก ์ ์๋์ด ์์ผ๋ฏ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ์ ์ฝํ
์ธ ๋ ํญ์ ์์
์์ญ ๋ด์์ ํ์ธ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ ์ํ ๋ชจ๋ ๋ฒ์ ์ ์ฝ ์กฐ๊ฑด์ด ๋ฌด์๋ฉ๋๋ค. ๋ฒ์ ์ด ์์
์์ญ์์ ์์๋จ์ ๋ถ๋ช
ํ ํ๋ ค๋ฉด ์๋ณธ ์ข
์์ฑ์ "*"
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฟผ๋ฆฌ ํฉ ๋๋ ํฐ๋ฆฌ์์ codeql pack install
์ ์คํํ๋ฉด ์ ์ ํ ๋ฒ์ ์ codeql/cpp-all
์ด ๋ก์ปฌ ํจํค์ง ์บ์์ ๋ค์ด๋ก๋๋ฉ๋๋ค. ๋ํ codeql/cpp-all
์ ํ์ธ๋ ๋ฒ์ ์ ํฌํจํ๋ codeql-pack.lock.yml
ํ์ผ์ด ์์ฑ๋ฉ๋๋ค. ์ ๊ธ ํ์ผ์ ์๋ณธ ์ข
์์ฑ์์ ํ์ธ๋๋ฏ๋ก my-company/my-library
์ ํญ๋ชฉ์ด ํฌํจ๋์ง ์์ต๋๋ค. codeql-pack.lock.yml
ํ์ผ์ ๋ค์๊ณผ ๋น์ทํฉ๋๋ค.
dependencies:
codeql/cpp-all:
version: 0.2.2
์ฟผ๋ฆฌ ํฉ ๋๋ ํฐ๋ฆฌ์์ codeql pack publish
๋ฅผ ์คํํ๋ฉด ํจํค์ง ์บ์์ codeql/cpp-all
์ข
์์ฑ๊ณผ ์์
์์ญ์ my-company/my-library
๊ฐ my-company/my-queries
์ ํจ๊ป ๋ฒ๋ค๋ก ์ ๊ณต๋๊ณ GitHub ์ปจํ
์ด๋ ๋ ์ง์ง์คํธ๋ฆฌ์ ๊ฒ์๋ฉ๋๋ค.
qlpack.yml
ํ์ผ์์ ๋ฒ์ ๋ฒ์๋ก ${workspace}
์ฌ์ฉ
์์
์์ญ์ CodeQL ํฉ์ ํน์ ${workspace}
, ~${workspace}
๋ฐ ^${workspace}
๋ฒ์ ๋ฒ์ ์๋ฆฌ ํ์์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์๋ฆฌ ํ์์๋ ์ด ํฉ์ด ํ์ฌ ์์
์์ญ์ ์๋ ์ง์ ๋ ํฉ์ ๋ฒ์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง์ ๋ํ๋
๋๋ค. ์ด ์๋ฆฌ ํ์์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ ๋ด์ ์ข
์์ฑ์ ์ฌ์ฉ๋๋ฉฐ, ๊ฒ์๋ ๋ qlpack.yml
ํ์ผ์ ์ข
์์ฑ์ด ๊ฒ์๋ ๋น์์ ์์
์์ญ ์ํ๋ฅผ ๋ฐ์ํ๋๋ก ํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
์์
๋์ผํ ์์ ์์ญ์ ์๋ ๋ค์ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ์ ๊ณ ๋ คํฉ๋๋ค.
name: my-company/my-library
library: true
version: 1.2.3
dependencies:
my-company/my-library2: ${workspace}
name: my-company/my-library2
library: true
version: 4.5.6
my-company/my-library
๊ฐ GitHub ์ปจํ
์ด๋ ๋ ์ง์คํธ๋ฆฌ์ ๊ฒ์๋๋ฉด, ๊ฒ์๋ qlpack.yml
ํ์ผ์ my-company/my-library2
์ข
์์ฑ ๋ฒ์ ์ด 4.5.6
์ผ๋ก ๊ธฐ๋ก๋ฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก, ์์ค ํฉ์ ์ข
์์ฑ์ด my-company/my-library2: ^${workspace}
์ด๊ณ ํฉ์ด ๊ฒ์๋๋ฉด ๊ฒ์๋ qlpack.yml
ํ์ผ์ my-company/my-library2
์ข
์์ฑ ๋ฒ์ ์ ^4.5.6
์ผ๋ก ์์ฑ๋์ด >= 4.5.6
๋ฐ < 5.0.0
๋ฒ์ ์ด ๋ชจ๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ๊ณผ ํธํ๋จ์ ๋ํ๋
๋๋ค.
์์ค ํฉ์ ์ข
์์ฑ์ด my-company/my-library2: ~${workspace}
์ด๊ณ ํฉ์ด ๊ฒ์๋๋ฉด ๊ฒ์๋ qlpack.yml
ํ์ผ์ my-company/my-library2
์ข
์์ฑ ๋ฒ์ ์ ~4.5.6
์ผ๋ก ์์ฑ๋์ด >= 4.5.6
๋ฐ < 4.6.0
๋ฒ์ ์ด ๋ชจ๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ๊ณผ ํธํ๋จ์ ๋ํ๋
๋๋ค.