Modül 4 · Code Security (CodeQL) · ⏱ 10 dakika

CodeQL CLI ve database build

CodeQL CLI and database build

Bu derste neler öğreneceksin

  • CodeQL CLI'ın ne için kullanıldığını anlamak
  • Database oluşturma ve sorgu çalıştırma komutlarını öğrenmek
  • CLI ile CI entegrasyonu ve SARIF upload akışını kavramak
  • Local geliştirme ortamında custom query test etmeyi bilmek

CodeQL CLI nedir?

CodeQL CLI, GitHub Actions dışında — local geliştirme ortamında veya özel CI sistemlerinde — CodeQL analizi çalıştırmayı sağlar.

Kullanım senaryoları:

  • Custom query geliştirme ve test etme
  • GitHub Actions kullanmayan CI (Jenkins, GitLab CI, TeamCity)
  • Offline / air-gapped ortamlarda analiz
  • Database’i başka araçlarla entegre etme

Temel CLI komutları

# CodeQL database oluştur
codeql database create mydb \
  --language=python \
  --source-root=./src

# Sorgu çalıştır
codeql database analyze mydb \
  codeql/python-queries:codeql-suites/python-security.qls \
  --format=sarif-latest \
  --output=results.sarif

# Custom sorgu çalıştır
codeql database analyze mydb \
  ./.github/codeql/queries/python/hardcoded-password.ql \
  --format=sarif-latest \
  --output=custom-results.sarif

# SARIF sonuçlarını GitHub'a yükle
gh code-scanning upload-results \
  --ref=refs/heads/main \
  --commit=$(git rev-parse HEAD) \
  --sarif=results.sarif

Derleme gerektiren diller için database build

# Java için: build komutunu belirt
codeql database create mydb \
  --language=java \
  --command="mvn clean package -DskipTests"

# C/C++ için
codeql database create mydb \
  --language=cpp \
  --command="make -j4"

CI entegrasyonu (GitHub Actions dışı)

Jenkins örneği:

pipeline {
  stages {
    stage('CodeQL Analysis') {
      steps {
        sh 'codeql database create /tmp/mydb --language=javascript'
        sh 'codeql database analyze /tmp/mydb --format=sarif-latest --output=results.sarif'
        sh '''
          gh code-scanning upload-results \
            --ref=refs/heads/${BRANCH_NAME} \
            --commit=${GIT_COMMIT} \
            --sarif=results.sarif
        '''
      }
    }
  }
}

SARIF upload gereksinimleri

SARIF dosyasını GitHub’a yüklemek için:

  • GitHub Enterprise (private repo’lar için GHAS gerekli)
  • security-events: write izni (GitHub Actions’ta) veya Personal Access Token
  • Commit SHA ve ref bilgisi

Sınavda CLI soruları

  • “GitHub Actions kullanmıyoruz, Jenkins CI var. CodeQL nasıl entegre ederiz?” → CodeQL CLI + SARIF upload API

  • “Local’de custom query test etmek istiyorum” → CodeQL CLI ile database oluştur, sorgu çalıştır, sonuçları SARIF’e dönüştür

  • “Air-gapped ortamda code scanning nasıl yapılır?” → CodeQL CLI + offline database bundle + manuel SARIF upload

Sırada ne var?

Modül 5’te güvenlik operasyonları — alert triaj, önceliklendirme, dismissal ve Copilot Autofix.