Skip to main content

์˜ค๋ฅ˜: โ€œ๋นŒ๋“œํ•˜๋Š” ๋™์•ˆ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Œโ€

CodeQL์ด(๊ฐ€) ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ code scanning ๋ถ„์„์„ ์ฐจ๋‹จ ํ•ด์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์›Œํฌํ”Œ๋กœ๊ฐ€ Error: "No source code was seen during the build" ๋˜๋Š” The process '/opt/hostedtoolcache/CodeQL/0.0.0-20200630/x64/codeql/codeql' failed with exit code 32(์œผ)๋กœ ์ธํ•ด ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Š” CodeQL์ด(๊ฐ€) ์ฝ”๋“œ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ๊ฐ€๋Šฅํ•œ 6๊ฐ€์ง€ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์ง€์›๋˜๋Š” ์–ธ์–ด ์—†์Œ: ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—๋Š” CodeQL์—์„œ ์ง€์›ํ•˜๋Š” ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ์–ธ์–ด ๋ชฉ๋ก์„ ํ™•์ธํ•˜๊ณ  ์ด ๊ฒฝ์šฐ CodeQL ์›Œํฌํ”Œ๋กœ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ๊ฒ€์‚ฌ ์•ˆ๋‚ด์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

  2. ๊ฒ€์ƒ‰๋œ ์–ธ์–ด์˜ ๋ถ„์„ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์—†์Œ: ์ž๋™ ์–ธ์–ด ๊ฒ€์ƒ‰์€ ์ง€์›๋˜๋Š” ์–ธ์–ด๋ฅผ ์‹๋ณ„ํ–ˆ์ง€๋งŒ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—๋Š” ํ•ด๋‹น ์–ธ์–ด์˜ ๋ถ„์„ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์˜ˆ๋Š” ์–ธ์–ด ๊ฒ€์ƒ‰ ์„œ๋น„์Šค์—์„œ ํŠน์ • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(์˜ˆ: .h ๋˜๋Š” .gyp ํŒŒ์ผ)์™€ ์—ฐ๊ฒฐ๋œ ํŒŒ์ผ์„ ์ฐพ์ง€๋งŒ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ํ•ด๋‹น ์‹คํ–‰ ์ฝ”๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด language ํ–‰๋ ฌ์˜ ์–ธ์–ด ๋ชฉ๋ก์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๋ถ„์„ํ•˜๋ ค๋Š” ์–ธ์–ด๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ๊ตฌ์„ฑ์€ Go ๋ฐ JavaScript๋งŒ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

    strategy:
      fail-fast: false
      matrix:
        # Override automatic language detection by changing the list below.
        # Supported options are listed in a comment in the default workflow.
        language: ['go', 'javascript-typescript']
    

    ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ผ๋ถ€ ์–ธ์–ด๋Š” CodeQL ๊ณ ๊ธ‰ ์„ค์ •์œผ๋กœ ๋ถ„์„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.์˜ ์›Œํฌํ”Œ๋กœ ์ถ”์ถœ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  3. ์ปดํŒŒ์ผ๋œ ์–ธ์–ด์˜ ์ปดํŒŒ์ผ ์‹คํŒจ: code scanning ์›Œํฌํ”Œ๋กœ๊ฐ€ ์ปดํŒŒ์ผ๋œ ์–ธ์–ด(C, C++, C#, Go ๋˜๋Š” Java)๋ฅผ ์ปดํŒŒ์ผํ•˜๋ ค๊ณ  ํ•˜์ง€๋งŒ ์ฝ”๋“œ๊ฐ€ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ๊ฐ€ ์–ธ์–ด๋ฅผ build-mode: autobuild๋กœ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ autobuild ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ CodeQL์€ ์ ์ ˆํ•œ ๋นŒ๋“œ ๋ฐฉ๋ฒ•์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ•ฉ๋‹ˆ๋‹ค. autobuild ํ”„๋กœ์„ธ์Šค๋Š” ํŠน์ • ๋นŒ๋“œ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. autobuild ๋‹จ๊ณ„๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜๋™์œผ๋กœ ํฌํ•จํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ ์ปดํŒŒ์ผ์ด ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ๋‹จ๊ณ„ ์ง€์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ปดํŒŒ์ผ๋œ ์–ธ์–ด์— ๋Œ€ํ•œ CodeQL ์ฝ”๋“œ ๊ฒ€์‚ฌํ•˜๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

  4. ์บ์‹œ๋œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๊ฒ€์ƒ‰๋˜์ง€ ์•Š์Œ: ์›Œํฌํ”Œ๋กœ์—์„œ๋Š” ์ปดํŒŒ์ผ๋œ ์–ธ์–ด(C, C++, C#, Go ๋˜๋Š” Java)๋ฅผ ๋นŒ๋“œํ•˜์—ฌ ๋ถ„์„์„ ์œ„ํ•œ CodeQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์ง€๋งŒ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋นŒ๋“œ์˜ ์ผ๋ถ€๊ฐ€ ์บ์‹œ๋ฉ๋‹ˆ๋‹ค(Gradle ๋˜๋Š” Bazel๊ณผ ๊ฐ™์€ ๋นŒ๋“œ ์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ€์žฅ ๋†’์Œ). CodeQL์€(๋Š”) ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ์˜ ํ™œ๋™์„ ๊ด€์ฐฐํ•˜๋ฏ€๋กœ CodeQL์€(๋Š”) ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์™„์ „ํ•œ ๋นŒ๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  5. init ๋ฐ analyze ๋‹จ๊ณ„ ์ด์™ธ์˜ ์ปดํŒŒ์ผ: ์›Œํฌํ”Œ๋กœ๋Š” ์ปดํŒŒ์ผ๋œ ์–ธ์–ด(C, C++, C#, Go ๋˜๋Š” Java)๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์›Œํฌํ”Œ๋กœ์˜ init ๋ฐ analyze ๋‹จ๊ณ„ ๊ฐ„์— ์ปดํŒŒ์ผ์ด ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. CodeQL์„(๋ฅผ) ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ์˜ ํ™œ๋™์„ ๊ด€์ฐฐํ•˜๊ณ  ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ด ๋‘ ๋‹จ๊ณ„ ์‚ฌ์ด์— ๋นŒ๋“œ๊ฐ€ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  6. CodeQL์—์„œ ์ปดํŒŒ์ผ์ด ๊ฐ์ง€๋˜์ง€ ์•Š์Œ: ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ(C, C++, C#, Go ๋˜๋Š” Java)๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ปดํŒŒ์ผ๋˜์—ˆ์ง€๋งŒ CodeQL์—์„œ ์ปดํŒŒ์ผ๋Ÿฌ ํ˜ธ์ถœ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์›์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • CodeQL์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ปจํ…Œ์ด๋„ˆ์—์„œ CodeQL ์ฝ”๋“œ ๊ฒ€์‚ฌ ์‹คํ–‰์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.
    • ๋””๋จผ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GitHub Actions ์™ธ๋ถ€์˜ ๋ถ„์‚ฐ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.
    • CodeQL์€(๋Š”) ์‚ฌ์šฉ ์ค‘์ธ ํŠน์ • ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ์ปดํŒŒ์ผ๋Ÿฌ ๋˜๋Š” ๊ตฌ์„ฑ์— ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด GitHub ์ง€์› ํฌํ„ธ ์‚ฌ์šฉ์— ๋ฌธ์˜ํ•˜์„ธ์š”.

๋นŒ๋“œ ๋‹จ๊ณ„ ์ง€์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ปดํŒŒ์ผ๋œ ์–ธ์–ด์— ๋Œ€ํ•œ CodeQL ์ฝ”๋“œ ๊ฒ€์‚ฌํ•˜๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.