快速入門:建立安全性掃描 GitHub 工作流程

在本快速入門中,您將了解如何建立 CodeQL GitHub 工作流程,以自動探索 .NET 程式碼基底中的弱點。

在 CodeQL 中,程式碼會被視為資料。 安全性弱點、錯誤 (bug) 和其他錯誤,會模型化為查詢,可針對從程式碼擷取的資料庫執行。

必要條件

  • GitHub 帳戶。
  • .NET 原始程式碼存放庫。

建立工作流程檔案

在 GitHub 存放庫中,將新的 YAML 檔案新增至 .github/workflows 目錄。 選擇有意義的檔案名稱,可清楚指出工作流程要執行的動作的名稱。 如需詳細資訊,請參閱工作流程檔案

重要

GitHub 要求將工作流程組合檔案放在 .github/workflow 目錄內。

工作流程檔案通常會透過 jobs.<job_id>/steps[*] 定義一個或多個 GitHub Actions 的組合。 如需詳細資訊,請參閱 GitHub Actions 的工作流程語法

建立名為 codeql-analysis.yml 的新檔案,將下列 YML 內容複寫並貼上到其中:

name: "CodeQL"

on:
  push:
    branches: [main]
    paths:
    - '**.cs'
    - '**.csproj'
  pull_request:
    branches: [main]
    paths:
    - '**.cs'
    - '**.csproj'
  schedule:
    - cron: '0 8 * * 4'

jobs:
  analyze:

    name: analyze
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        language: ['csharp']

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3
      with:
        fetch-depth: 2

    - run: git checkout HEAD^2
      if: ${{ github.event_name == 'pull_request' }}

    - name: Initialize CodeQL
      uses: github/codeql-action/init@v1
      with:
        languages: ${{ matrix.language }}

    - name: Autobuild
      uses: github/codeql-action/autobuild@v1

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v1

在上述工作流程組合中:

  • name: CodeQL 會定義名稱,"CodeQL" 會出現在工作流程狀態徽章中。

    name: "CodeQL"
    
  • on 節點表示觸發工作流程的事件:

    on:
      push:
        branches: [main]
        paths:
        - '**.cs'
        - '**.csproj'
      pull_request:
        branches: [main]
        paths:
        - '**.cs'
        - '**.csproj'
      schedule:
        - cron: '0 8 * * 4'
    
    • main 分支上發生 pushpull_request 時觸發,其中任何檔案變更結尾都會是 .cs.csproj 副檔名。
    • 以 cron 作業的形式 (依排程)—每星期四於 8:00 UTC 執行。
  • jobs 節點會建置工作流程進行所需的步驟。

    jobs:
      analyze:
    
        name: analyze
        runs-on: ubuntu-latest
    
        strategy:
          fail-fast: false
          matrix:
            language: ['csharp']
    
        steps:
        - name: Checkout repository
          uses: actions/checkout@v3
          with:
            fetch-depth: 2
    
        - run: git checkout HEAD^2
          if: ${{ github.event_name == 'pull_request' }}
    
        - name: Initialize CodeQL
          uses: github/codeql-action/init@v1
          with:
            languages: ${{ matrix.language }}
    
        - name: Autobuild
          uses: github/codeql-action/autobuild@v1
    
        - name: Perform CodeQL Analysis
          uses: github/codeql-action/analyze@v1
    
    • 有一個名為 analyze 的單一作業將在最新版本的 Ubuntu 上執行。
    • strategy 將 C# 定義為 language
    • github/codeql-action/init@v1 GitHub Actions 可用來初始化 CodeQL。
    • github/codeql-action/autobuild@v1 GitHub Action 會建置 .NET 專案。
    • github/codeql-action/analyze@v1 GitHub Actions 會執行 CodeQL 分析。

如需詳細資訊,請參閱 GitHub Actions:設定程式碼掃描

建立工作流程狀態徽章

GitHub 存放庫的常見命名法是讓存放庫目錄根目錄有一個 README.md 檔案。 同樣地,最好報告各種工作流程的最新狀態。 所有工作流程都可以產生狀態徽章,其在 README.md 檔案內視覺上具有吸引力。 若要新增工作流程狀態徽章:

  1. 從 GitHub 存放庫,選取 [動作] 瀏覽選項。

  2. 所有存放庫工作流程都會顯示在左側,選取所需的工作流程和省略符號 (...) 按鈕。

    • 省略符號 (...) 按鈕會展開所選工作流程的功能表選項。
  3. 選取 [建立狀態徽章] 功能表選項。

    GitHub: Create status badge

  4. 選取 [複製狀態徽章 Markdown] 按鈕。

    GitHub: Copy status badge Markdown

  5. 將 Markdown 貼上到 README.md 檔案,儲存檔案、認可並推送變更。

如需詳細資訊,請參閱新增工作流程狀態徽章

範例 CodeQL 工作流程狀態徽章

通過 失敗 無狀態
GitHub: CodeQL passing badge GitHub: CodeQL failing badge GitHub: CodeQL no-status badge

另請參閱

下一步