Skip to main content

์ปจํ…Œ์ด๋„ˆ์—์„œ CodeQL ์ฝ”๋“œ ๊ฒ€์‚ฌ ์‹คํ–‰

๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ผํ•œ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์—์„œ code scanning๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ฐ€ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

Code scanning์€ ๋‹ค์Œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์œ ํ˜•์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • GitHub.com์— ๋Œ€ํ•œ ํผ๋ธ”๋ฆญ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ
  • GitHub Code Security๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •๋œ GitHub Team์˜ ์กฐ์ง ์†Œ์œ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ

์ปจํ…Œ์ด๋„ˆํ™”๋œ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” code scanning ์ •๋ณด

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

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

์ฐธ๊ณ  ํ•ญ๋ชฉ

CodeQL CLI๋Š” (musl ๊ธฐ๋ฐ˜) Alpine Linux์™€ ๊ฐ™์€ ๋น„ glibc Linux ๋ฐฐํฌํŒ๊ณผ ํ˜„์žฌ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

CodeQL code scanning์— ๋Œ€ํ•œ ์ข…์†์„ฑ

์‚ฌ์šฉ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์— ํŠน์ • ์ข…์†์„ฑ์ด ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ code scanning๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: Git์„ ์„ค์น˜ํ•˜๊ณ  PATH ๋ณ€์ˆ˜์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•จ). ์ข…์†์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ GitHub์˜ ์‹คํ–‰๊ธฐ ์ด๋ฏธ์ง€์— ํฌํ•จ๋œ ์†Œํ”„ํŠธ์›จ์–ด ๋ชฉ๋ก์„ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ ์œ„์น˜์— ์žˆ๋Š” ๋ฒ„์ „๋ณ„ readme ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์˜ˆ์‹œ ์›Œํฌํ”Œ๋กœ

์ด ์ƒ˜ํ”Œ ์›Œํฌํ”Œ๋กœ๋Š” GitHub Actions๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ํ™˜๊ฒฝ์—์„œ CodeQL ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. container.image ๊ฐ’์€ ์‚ฌ์šฉํ•  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ ์ด๋ฏธ์ง€ ์ด๋ฆ„์€ codeql-container์ด๊ณ  ํƒœ๊ทธ๋Š” f0f91db์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub Actions์— ๋Œ€ํ•œ ์›Œํฌํ”Œ๋กœ ๊ตฌ๋ฌธ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

name: "CodeQL"

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
  schedule:
    - cron: '15 5 * * 3'

jobs:
  analyze:
    name: Analyze
    runs-on: ubuntu-latest
    permissions:
      security-events: write
      actions: read

    strategy:
      fail-fast: false
      matrix:
        language: [java-kotlin]

    # Specify the container in which actions will run
    container:
      image: codeql-container:f0f91db

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
      - name: Initialize CodeQL
        uses: github/codeql-action/init@v3
        with:
          languages: ${{ matrix.language }}
      - name: Build
        run: |
          ./configure
          make
      - name: Perform CodeQL Analysis
        uses: github/codeql-action/analyze@v3