CodeQL CLI ์ค์ ํ๊ธฐ
CodeQL ๋ช ๋ น์ ์คํํ๋ ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค๊ณ ๋ถ์ํ๋ ๋ฐ ํ์ํ ๋๊ตฌ, ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ก์ธ์คํ ์ ์๋๋ก CLI๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
CodeQL CLI์(๋) ๋ค์ํ ์ฌ์ฉ ์ฌ๋ก ๋ฐ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ง์ํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค. ๋น ๋ฅด๊ฒ ์์ํ๋ ค๋ฉด ์๋ ๋จ๊ณ์ ์ค๋ช ๋ ๋๋ก ๋น๊ต์ ๊ฐ๋จํ ์ค์ ์ ์ฑํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ณด์ ์ฐ๊ตฌ์ CodeQL CLI์(๋ฅผ) ์ฌ์ฉํ๊ฑฐ๋ ์ฟผ๋ฆฌ๋ฅผ ํ ์คํธ ๋๋ ๊ธฐ์ฌํ๋ ค๋ ๊ฒฝ์ฐ, CodeQL CLI์ ๊ณ ๊ธ ์ค์ ์ด ํ์ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL CLI ๊ณ ๊ธ ์ค์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
CI ์์คํ ์์ CodeQL CLI์(๋ฅผ) ์ค์ ํ๋ ๊ฒฝ์ฐ, CodeQL CLI ๋ฒ๋ค์ ์ ์ฒด ์ฝํ ์ธ ๋ฅผ CodeQL code scanning ๋ถ์์ ์คํํ๋ ค๋ ๋ชจ๋ CI ์๋ฒ์์ ์ฌ์ฉํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ค์ ๋ด๋ถ ์์น์์ ๋ฒ๋ค์ ๋ณต์ฌํ๊ณ ์ถ์ถํ๋๋ก ๊ฐ ์๋ฒ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๋๋ REST API๋ฅผ ์ฌ์ฉํ์ฌ GitHub์์ ์ง์ ๋ฒ๋ค์ ๊ฐ์ ธ์ ์ฟผ๋ฆฌ์ ๋ํ ์ต์ ๊ฐ์ ์ฌํญ์ ํ์ฉํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ REST API ์ค๋ช ์์์ ๋ฆด๋ฆฌ์ค ๋ฐ ๋ฆด๋ฆฌ์ค ์์ฐ์ ๋ํ REST API ์๋ํฌ์ธํธ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
Apple Silicon์ผ๋ก macOS๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ(์: Apple M1), Xcode ๋ช ๋ น์ค ๊ฐ๋ฐ์ ๋๊ตฌ ๋ฐ Rosetta 2๊ฐ ์ค์น๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
์ฐธ๊ณ ํญ๋ชฉ
CodeQL CLI๋ (musl ๊ธฐ๋ฐ) Alpine Linux์ ๊ฐ์ ๋น glibc Linux ๋ฐฐํฌํ๊ณผ ํ์ฌ ํธํ๋์ง ์์ต๋๋ค.
1. CodeQL CLI tar ๋ณด๊ด ํ์ผ ๋ค์ด๋ก๋
CodeQL CLI ๋ค์ด๋ก๋ ํจํค์ง๋ ๋๊ตฌ, ์คํฌ๋ฆฝํธ ๋ฐ ๋ค์ํ CodeQL ๊ด๋ จ ํ์ผ์ ํฌํจํ๋ tar ๋ณด๊ด ํ์ผ์ ๋๋ค. GitHub Enterprise ๋ผ์ด์ ์ค๊ฐ ์๋ ๊ฒฝ์ฐ, ์ด ๋ณด๊ด ํ์ผ์ ๋ค์ด๋ก๋ํ๋ฉด GitHub CodeQL ์ด์ฉ ์ฝ๊ด์ ๋์ํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
https://github.com/github/codeql-action/releases์์ CodeQL ๋ฒ๋ค์ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๋ค. ๋ฒ๋ค์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
- CodeQL CLI ์ ํ
- https://github.com/github/codeql์์ ํธํ๋๋ ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์
- ๋ฒ๋ค์ ํฌํจ๋๋ ๋ชจ๋ ์ฟผ๋ฆฌ์ ์ฌ์ ์ปดํ์ผ ๋ฒ์
ํญ์ CodeQL ๋ฒ๋ค์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด ๋ฒ๋ค์ ํธํ์ฑ์ ๋ณด์ฅํ๊ณ CodeQL CLI ์ฟผ๋ฆฌ๋ฅผ ๋ณ๋๋ก ๋ค์ด๋ก๋ํ๊ณ CodeQL ์ฟผ๋ฆฌ๋ฅผ ์ฒดํฌ ์์ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ํ๋์ ํน์ ํ๋ซํผ์์๋ง CLI๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ ์ ์ ํ codeql-bundle-PLATFORM.tar.zst
ํ์ผ์ ๋ค์ด๋ก๋ํฉ๋๋ค. ๋๋ ์ง์๋๋ ๋ชจ๋ ํ๋ซํผ์ ํด๋นํ๋ CLI๊ฐ ํฌํจ๋ codeql-bundle.tar.zst
๋ฅผ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
๋ฒ๋ค์ tar.gz
๋ณํ๋ ์์ผ๋ฉฐ, ํจ์จ์ฑ์ด ๋จ์ด์ง๋ gzip ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์์ถ๋๋ค๋ ์ ์ ์ ์ธํ๊ณ ๋ tar.zst
๋ณํ๊ณผ ๋์ผํฉ๋๋ค. tar.gz
๋ณํ์ ๋ค์ด๋ก๋ํ๋ ์ ์ผํ ์ด์ ๋ ํ์ค ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ํ์ง ์๋ ์ด์ ์์ถ ํด์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์
๋๋ค.
2. CodeQL CLI tar ๋ณด๊ด ํ์ผ ์ถ์ถ
CodeQL CLI tar ๋ณด๊ด ํ์ผ์ ์ ํํ ๋๋ ํฐ๋ฆฌ์ ์ถ์ถํฉ๋๋ค.
3. codeql
์์
์ถ์ถํ ํ์๋ codeql
์คํ ํ์ผ์ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์คํํ์ฌ CodeQL ํ๋ก์ธ์ค๋ฅผ ์คํํ ์ ์์ต๋๋ค.
<extraction-root>/codeql/codeql
์(๋ฅผ) ์คํํฉ๋๋ค. ์ฌ๊ธฐ์<extraction-root>
๋ CodeQL CLI ํจํค์ง๋ฅผ ์ถ์ถํ ํด๋์ ๋๋ค.codeql
์ฒ๋ผ ์คํ ํ์ผ์ ์คํํ ์ ์๋๋กPATH
์<extraction-root>/codeql
๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ด์ CodeQL ๋ช ๋ น์ ์คํํ ์ ์์ต๋๋ค. CodeQL CLI ๋ช ๋ น์ ์ ์ฒด ๋ชฉ๋ก์ CodeQL CLI ๋ช ๋ น ์ค๋ช ์์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์ฐธ๊ณ ํญ๋ชฉ
PATH
์ codeql
์ ์ถ๊ฐํ ๊ฒฝ์ฐ, Visual Studio Code์ฉ CodeQL์์ ์ก์ธ์คํด ์ฟผ๋ฆฌ๋ฅผ ์ปดํ์ผํ๊ณ ์คํํ ์ ์์ต๋๋ค. CodeQL CLI์ ์ก์ธ์คํ๋๋ก VS Code์(๋ฅผ) ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ CodeQL CLI์ ๋ํ ์ก์ธ์ค ๊ตฌ์ฑ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
CodeQL CLI ๊ตฌ์ฑ ํ ์คํธํ๊ธฐ
CodeQL CLI ๋ฒ๋ค์ ์ถ์ถํ ํ ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ CLI๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค๊ณ ๋ถ์ํ๋๋ก ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์ด ์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
/<extraction root>/codeql
์ดPATH
์ ์๋ ๊ฒฝ์ฐcodeql resolve packs
์ ๋๋ค.- ๊ทธ๋ ์ง ์์ผ๋ฉด
/<extraction root>/codeql/codeql resolve packs
์ ๋๋ค.
์ฑ๊ณตํ๋ค๋ฉด, ์๋ ์ถ์ถ๋ ๊ฒ๊ณผ ๋น์ทํ ๋ด์ฉ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
Searching directories specified by `--additional-packs`. All directories have equal priority.
Searching in:
No packs were found at this location.
Searching directories specified by `--search-path`. Directories are searched in order.
Searching the root of the CodeQL distribution.
Searching in:
<extraction root>
The following packs were found:
codeql/java-all@<version>: (library) <extraction root>/qlpacks/codeql/javat-all/<version>/qlpack.yml
codeql/java-queries@<version>: (query) <extraction root>/qlpacks/codeql/java-queries/<version>/qlpack.yml
codeql/javascript-all@<version>: (library) <extraction root>/qlpacks/codeql/javascript-all/<version>/qlpack.yml
codeql/javascript-queries@<version>: (query) <extraction root>/qlpacks/codeql/javascript-queries/<version>/qlpack.yml
codeql/swift-all@<version>: (library) <extraction root>/qlpacks/codeql/swift-all/<version>/qlpack.yml
codeql/swift-queries@<version>: (query) <extraction root>/qlpacks/codeql/swift-queries/<version>/qlpack.yml
...
๊ฐ๋จํ ์ค๋ช ์ ์ํด ๊ฒฐ๊ณผ๊ฐ ์๋ ธ์ต๋๋ค. ์ค์ ๊ฒฐ๊ณผ๋ ๋ ๊ธธ๊ณ ๋ ์์ธํฉ๋๋ค.
์ถ๋ ฅ์ ์์๋ ์ธ์ด๊ฐ ํฌํจ๋์ด ์๊ณ qlpack ํ์ผ์ ๋๋ ํฐ๋ฆฌ ์์น๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํด์ผ ํฉ๋๋ค. ์์น๋ ์์ ์์์์ <extraction root>
(์ผ)๋ก ํ์๋ ์ถ์ถ๋ CodeQL CLI ๋ฒ๋ค ๋ด์ ์์ด์ผ ํฉ๋๋ค. CodeQL CLI์์ ์์ ์ธ์ด์ ๋ํ qlpack์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ CodeQL ๋ฒ๋ค์ ๋ค์ด๋ก๋ํ๋์ง ํ์ธํ๊ณ CodeQL CLI์ ๋
๋ฆฝ ์คํํ ๋ณต์ฌ๋ณธ์ด ์๋์ง ํ์ธํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ธ์ด๋ฅผ ํ์ํ๊ธฐ ์ํด codeql resolve languages
๋ฅผ ์คํํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด CodeQL CLI ํจํค์ง์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋๋ ์ธ์ด๊ฐ ๋์ด๋ฉ๋๋ค.
ํ์์ ๋ฐ๋ผ, ์คํํ๋ ค๋ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ์ฟผ๋ฆฌ๊ฐ ํฌํจ๋ ์ผ๋ถ CodeQL ํฉ์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL ํฉ์ ์ฌ์ฉํ์ฌ ๋ถ์ ์ฌ์ฉ์ ์ง์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์ด codeql resolve packs
๋ช
๋ น์ CodeQL CLI์์ ๋ถ์์ ์ฌ์ฉํ ์ ์์ ๊ฒ์ผ๋ก ์์๋๋ ์ฟผ๋ฆฌ ํฉ์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฅผ ์ง๋จํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
์ฐธ๊ณ ํญ๋ชฉ
์ด codeql resolve packs
๋ช
๋ น์ CodeQL CLI ๋ฒ์ 2.19.0 ์ด์์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด์ ๋ฒ์ ์ CLI์ ๊ฒฝ์ฐ ๋น์ทํ์ง๋ง ๋ ์์ธํ ์ถ๋ ฅ์ ์์ฑํ๋ codeql resolve qlpacks
๋ช
๋ น์ ์คํํด์ผ ํฉ๋๋ค.
๋ค์ ๋จ๊ณ
CodeQL CLI์์ ๋ถ์ํ ์ฝ๋๋ฅผ ์ค๋นํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋ ค๋ฉด CodeQL ๋ถ์์ ์ํ ์ฝ๋ ์ค๋น์(๋ฅผ) ์ฐธ์กฐํ์ธ์.