CodeQL CLI ๊ณ ๊ธ ์ค์ ์ ๋ณด
์ฝ๋ ๊ฒ์ฌ ์ด์์ ์ฉ๋๋ก CodeQL์ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ CodeQL CLI์ ๊ณ ๊ธ ์ค์ ์ ์ ํธํ ์ ์์ต๋๋ค.
- ์คํ ์์ค ๊ณต์ CodeQL ์ฟผ๋ฆฌ์ ๊ธฐ์ฌํ๋ ค๋ฉด CodeQL ์์ค ์ฝ๋๋ก ์ง์ ์์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ์ต์ CodeQL ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฒ ์ด์ค์ ๋ํ ์ฝ๋ ๊ฒ์ฌ ๊ฒฝ๊ณ ๋ฅผ ์์ฑํ์ง๋ง ํน์ ๋ฒ์ ์ CodeQL CLI์๋ง ํธํ๋๋ ๋ค๋ฅธ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ถ์ํ๋ ค๋ ๊ฒฝ์ฐ ์ฌ๋ฌ ๋ฒ์ ์ CodeQL CLI๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
- ์ฟผ๋ฆฌ๋ฅผ ์กฐ์ฌํ๊ฑฐ๋ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ GitHub.com์์ ํฅ๋ฏธ๋กญ๊ฑฐ๋ ๊ณ ์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
๊ฐ์ฅ ๊ฐ๋จํ CodeQL CLI ์ค์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ CodeQL CLI ์ค์ ํ๊ธฐ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
CodeQL ์์ค ์ฝ๋ ์ง์ ์ฒดํฌ ์์
์ผ๋ถ ์ฌ์ฉ์๋ ์คํ ์์ค ๊ณต์ ์ฟผ๋ฆฌ์ ๋ํด ์์ ํ๊ฑฐ๋ ๊ธฐ์ฌํ๊ธฐ ์ํด CodeQL ์ฟผ๋ฆฌ ์๋ณธ์ผ๋ก ์ง์ ์์ ํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค. ์ด๋ฅผ ์ํด์๋ ๋ค์ ๋จ๊ณ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
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์์ ํธํ๋๋ ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์
- ๋ฒ๋ค์ ํฌํจ๋๋ ๋ชจ๋ ์ฟผ๋ฆฌ์ ์ฌ์ ์ปดํ์ผ ๋ฒ์
์ฐธ๊ณ ํญ๋ชฉ
GitHub Enterprise Server 3.17์ ๊ฒฝ์ฐ, CodeQL CLI 2.20.7๋ฒ์ ์ ๊ถ์ฅํฉ๋๋ค.
ํญ์ 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 ๋ฐ ์ฌ์ฉํ๋ ค๋ ์ฟผ๋ฆฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐ์นํ ์ ์๋ ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค. ์๋ค ๋ค์ด $HOME/codeql-home
์
๋๋ค.
CLI์ ๊ธฐ๋ณธ ์ ๊ณต ๊ฒ์ ์์ ์ ๋ชจ๋ ํ์ ๋๋ ํฐ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง๋ค๊ธฐ ๋ฐ ๋ถ์์ ์ฌ์ฉ๋๋ ํ์ผ์ ์๋์ผ๋ก ์ฐพ์ต๋๋ค. ๊ตฌ์ฑ ์์๋ฅผ ์์ฒด ๋๋ ํฐ๋ฆฌ์ ์ ์งํ๋ฉด ๋ช ๋ น์ค์์ ์ถ๊ฐ ์ต์ ์ ์ง์ ํ์ง ์์๋ ๋ชจ๋ ํ์ผ์ ์ฌ์ฉํ ์ ์์ผ๋ฉด์ CLI๊ฐ ๊ด๋ จ ์๋ ํ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ฒ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
3. CodeQL ์ฟผ๋ฆฌ์ ๋ก์ปฌ ๋ณต์ฌ๋ณธ ๊ฐ์ ธ์ค๊ธฐ
CodeQL ๋ฆฌํฌ์งํ ๋ฆฌ์๋ ์ง์๋๋ ๋ชจ๋ ์ธ์ด์ CodeQL ๋ถ์์ ํ์ํ ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ณต์ฌ๋ณธ์ codeql-home
์ ๋ณต์ ํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ณต์ ๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ฃจํธ๋ฅผ codeql
์ด๋ผ๊ณ ํฉ๋๋ค.
1๋จ๊ณ์์ ์ถ์ถํ CodeQL CLI๊ณผ(์) ์ถฉ๋ํ์ง ์๋๋ก ์ด ํด๋ codeql-repo
์ ์ด๋ฆ์ ๋ฐ๊ฟ๋๋ค. ๋ช
๋ น์ค์์ git์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ codeql-home
์์ git clone git@github.com:github/codeql.git codeql-repo
์ ์คํํ์ฌ ํ ๋จ๊ณ์ฉ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํ๊ณ ์ด๋ฆ์ ๋ฐ๊ฟ ์๋ ์์ต๋๋ค.
์ด ๋ฆฌํฌ์งํ ๋ฆฌ ๋ด์์ ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ CodeQL ํฉ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ฟผ๋ฆฌ ์์ฒด์ ํจ๊ป CodeQL ํฉ์๋ CodeQL CLI์๊ฒ ์ฟผ๋ฆฌ ํ์ผ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ๋ ์ค์ํ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL ํฉ ๋ง๋ค๊ธฐ ๋ฐ ์์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์ฐธ๊ณ ํญ๋ชฉ
๋ค๋ฅธ ์ฌ์ฉ์์ ๋ํด ์ฌ์ฉํ ์ ์๋ CodeQL ์ฟผ๋ฆฌ์ ๋ฒ์ ์ด ๋ค๋ฆ ๋๋ค. ์ฌ์ฉ ์ฌ๋ก์ ๋ง๋ ๋ฒ์ ์ ์ฒดํฌ ์์ํฉ๋๋ค.
- ์ต์ CodeQL CLI ๋ฆด๋ฆฌ์ค์ ํจ๊ป ์ฌ์ฉํ๋ ค๋ ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ
codeql-cli/latest
ํ๊ทธ๊ฐ ์ง์ ๋ ๋ถ๊ธฐ๋ฅผ ์ฒดํฌ ์์ํฉ๋๋ค. CodeQL CLI๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ํ๊ฑฐ๋ ์ต๊ทผ GitHub์์ ๋ค์ด๋ก๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด ๋ถ๊ธฐ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. - ์ต์ CodeQL ์ฟผ๋ฆฌ๋ฅผ ํ์ธํ๋ ค๋ฉด
main
๋ถ๊ธฐ๋ฅผ ์ฒดํฌ ์์ํฉ๋๋ค. ์ด ๋ถ๊ธฐ๋ CodeQL ๋ถ์์ ์ต์ ๋ฒ์ ์ ๋ํ๋ ๋๋ค.
4. CodeQL CLI tar ๋ณด๊ด ํ์ผ ์ถ์ถ
2๋จ๊ณ์์ ๋ง๋ ๋๋ ํฐ๋ฆฌ์ tar ๋ณด๊ด ํ์ผ์ ์ถ์ถํฉ๋๋ค.
์๋ฅผ ๋ค์ด, CodeQL ๋ฆฌํฌ์งํ ๋ฆฌ ๋ณต์ฌ๋ณธ์ ๊ฒฝ๋ก๊ฐ $HOME/codeql-home/codeql-repo
์ธ ๊ฒฝ์ฐ CLI๋ฅผ $HOME/codeql-home/
(์ผ)๋ก ์ถ์ถํฉ๋๋ค.
5.codeql
์์
์ถ์ถํ ํ์๋ codeql
์คํ ํ์ผ์ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์คํํ์ฌ CodeQL ํ๋ก์ธ์ค๋ฅผ ์คํํ ์ ์์ต๋๋ค.
<extraction-root>/codeql/codeql
์(๋ฅผ) ์คํํฉ๋๋ค. ์ฌ๊ธฐ์<extraction-root>
๋ CodeQL CLI ํจํค์ง๋ฅผ ์ถ์ถํ ํด๋์ ๋๋ค.codeql
์ฒ๋ผ ์คํ ํ์ผ์ ์คํํ ์ ์๋๋กPATH
์<extraction-root>/codeql
๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ด์ CodeQL ๋ช ๋ น์ ์คํํ ์ ์์ต๋๋ค. CodeQL CLI ๋ช ๋ น์ ์ ์ฒด ๋ชฉ๋ก์ CodeQL CLI ๋ช ๋ น ์ค๋ช ์์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
6. CodeQL CLI ์ค์ ํ์ธ
CodeQL CLI์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค๊ณ ๋ถ์ํ๋๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ์คํํ ์ ์๋ ํ์ ๋ช ๋ น์ด ์์ต๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ธ์ด๋ฅผ ํ์ํ๋ ค๋ฉด
codeql resolve languages
๋ฅผ ์คํํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด CodeQL CLI ํจํค์ง์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋๋ ์ธ์ด๊ฐ ๋์ด๋ฉ๋๋ค. codeql resolve qlpacks
๋ฅผ ์คํํ์ฌ CLI์์ ์ฐพ์ ์ ์๋ CodeQL ํฉ์ ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด CodeQL CLI์์ ์ง์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ CodeQL ํฉ์ ์ด๋ฆ์ด ํ์๋ฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค.- ์ง์๋๋ ๊ฐ ์ธ์ด์ ๋ํ ์ฟผ๋ฆฌ ํฉ(์:
codeql/{language}-queries
). ์ด๋ฌํ ํฉ์๋ ๊ฐ ๋ถ์์ ๋ํด ์คํ๋ ํ์ค ์ฟผ๋ฆฌ๊ฐ ํฌํจ๋ฉ๋๋ค. - ์ง์๋๋ ๊ฐ ์ธ์ด์ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ(์:
codeql/{language}-all
). ์ด๋ฌํ ํฉ์๋ ์ฟผ๋ฆฌ ์์ฑ๊ธฐ์ ์ ์ฉํ ์ ์๋ ์ ์ด ํ๋ฆ ๋ฐ ๋ฐ์ดํฐ ํ๋ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ์ฟผ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. - ์ง์๋๋ ๊ฐ ์ธ์ด์ ๋ํ ์์ ํฉ(์:
codeql/{language}-examples
). ์ด๋ฌํ ํฉ์๋ ์ฟผ๋ฆฌ ์์ฑ์์๊ฒ ์ ์ฉํ ์ ์๋ ์ ์ฉํ CodeQL ์ฝ๋ ์กฐ๊ฐ์ด ํฌํจ๋์ด ์์ต๋๋ค. - ์ด์ ์ ํ์ ์ฌ์ฉํ์ฌ ๋ง๋ ์ฌ์ฉ์ ์ง์ ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฌ์ฉ์์ CodeQL ๋ฒ์ ๊ณผ ํธํ๋๋๋ก ํ๋ ๋ ๊ฑฐ์ ํฉ.
๋ ๊ฐ์ง ๋ฒ์ ์ CodeQL CLI ์ฌ์ฉ
์ต์ CodeQL ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ๋๋ CodeQL ํ ์คํธ๋ฅผ ์คํํ์ง๋ง GitHub Enterprise Server์์ ํน์ ๋ฒ์ ์ CodeQL ์ฝ๋ ๊ฒ์ฌ์ ํธํ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค๋นํ๋ ค๋ฉด ๋ ๊ฐ์ง ๋ฒ์ ์ CLI๋ฅผ ์ค์นํด์ผ ํ ์ ์์ต๋๋ค. ์ํ๋ CodeQL CLI์ ๋ฒ์ ์ ๋ค์ด๋ก๋ํ๊ณ ๋์ผํ ๋ถ๋ชจ ๋๋ ํฐ๋ฆฌ์์ ๋ CLI ๋ณด๊ด ํ์ผ์ ์์ถ์ ํ ์ ์์ต๋๋ค.
GitHub.com์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ค์ด๋ก๋
GitHub์(๋) GitHub.com์ 200,000๊ฐ ์ด์์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์ฅํฉ๋๋ค. ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ REST API๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. ๋ฆฌํฌ์งํ ๋ฆฌ ๋ชฉ๋ก์ ๋ณด์ ์ฐ๊ตฌ๋ฅผ ์ํ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ํฌํจํ๋๋ก ์ง์์ ์ผ๋ก ์ฆ๊ฐํ๊ณ ๋ฐ์ ํ๊ณ ์์ต๋๋ค.
VS Code ํ์ฅ์ฉ CodeQL์(๋ฅผ) ์ฌ์ฉํ์ฌ GitHub.com์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ถ์ํ ์๋ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL ์ฟผ๋ฆฌ ์คํ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๋ฆฌํฌ์งํ ๋ฆฌ์ /repos/<owner>/<repo>/code-scanning/codeql/databases
์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ด๋ก๋ํ ์ ์๋ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด GitHub CLI์(๋ฅผ) ์ฌ์ฉํ์ฌ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์ธํ๋ ค๋ฉด ๋ค์์ ์คํํฉ๋๋ค.
gh api /repos/<owner>/<repo>/code-scanning/codeql/databases
์ด ๋ช ๋ น์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ํ๋ด๋ ์ธ์ด ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ง์ง๋ง์ผ๋ก ์ ๋ฐ์ดํธ๋ ์๊ธฐ๋ฅผ ํฌํจํ์ฌ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ฌ์ฉํ ์ ์๋ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค. ์ฌ์ฉํ ์ ์๋ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์์ผ๋ฉด ์๋ต์ด ๋น์ด ์์ต๋๋ค.
๊ด์ฌ ์๋ ์ธ์ด์ ๋ํ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋์ง ํ์ธํ์ผ๋ฉด ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
gh api /repos/<owner>/<repo>/code-scanning/codeql/databases/<language> -H 'Accept: application/zip' > path/to/local/database.zip
์์ธํ ๋ด์ฉ์ CodeQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ํฌ์ธํธ ๊ฐ์ ธ์ค๊ธฐ์ ๋ํ ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ธ์.
CodeQL CLI๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์์ ์คํํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ถ์ ํ๋๋ค.