Skip to content

將 Issue 同步到 Google Sheet 甘特圖並生成工作量報表,用於團隊資源分配分析。支援 GitLab,未來可擴展至其他平台。

License

Notifications You must be signed in to change notification settings

timhuang1204/issue-gantt-sync

Repository files navigation

GitLab Issue 到 Google Sheet 甘特圖同步工具

Python Version License Status

專案簡介

本工具專為雲端運維團隊設計,能夠自動從 GitLab 專案中擷取 Issue 資訊,同步至 Google Sheet 並以甘特圖形式呈現,同時生成詳細的雙月工作分析報表。主要用於追蹤團隊成員在不同工作類型的時間分配,協助管理層進行資源規劃與績效評估。

核心功能

  • 📊 自動化甘特圖生成:將 GitLab Issue 轉換為視覺化時間軸
  • 📈 樞紐分析表報表:生成詳細的工作類型分析與趨勢比較
  • 🔄 智能同步機制:避免重複處理,僅同步新增 Issue
  • 👥 多人協作支援:單一 Issue 可由多人共同處理
  • 🎯 靈活專案配置:支援標籤篩選或全開放 Issue 擷取
  • 📅 時間範圍控制:可設定起始日期進行過濾

系統架構

GitLab API ──► 數據處理器 ──► Google Sheet ──► 甘特圖 ──► 樞紐分析表報表
    ↓              ↓              ↓           ↓           ↓
  Issue 擷取    標籤篩選      時間軸生成   進度追蹤    工作分析

模組結構

模組 功能說明
main.py 主程序入口,整合各模組功能
config_handler.py 配置管理,支援欄位定義與用戶角色
gitlab_api_handler.py GitLab API 互動,含重試機制
data_processor.py 數據處理與篩選邏輯
google_sheet_api_handler.py Google Sheet API 操作
worksheet_manager.py 甘特圖工作表管理
report_generator.py 樞紐分析表報表生成
utils.py 日期處理與工具函數
logger.py 系統日誌管理

安裝與設定

1. 系統需求

  • Python 3.6 或更高版本
  • 網路連線至 GitLab 和 Google API
  • GitLab API 存取權限
  • Google API 服務帳號憑證

2. 安裝依賴套件

pip install -r requirements.txt

主要依賴套件:

google-api-python-client==2.79.0
google-auth==2.16.0
python-gitlab==3.13.0
pyyaml==6.0
systemd-python==234
requests==2.28.2

3. Google API 設定

  1. 前往 Google Cloud Console
  2. 創建專案並啟用 Google Sheets API
  3. 創建服務帳號並下載 JSON 憑證檔案
  4. 將 Google Sheet 共享給服務帳號的電子郵件地址
  5. 更新 config.yaml 中的憑證路徑

4. GitLab API 設定

  1. 登入 GitLab 並前往個人設定
  2. 創建具有 api 權限的個人存取權杖
  3. 更新 config.yaml 中的權杖資訊

配置檔案說明

基本配置結構

請參考 config-example.yaml

使用方法

基本操作

# 僅更新甘特圖(不生成報表)
python3 main.py

# 更新甘特圖並生成樞紐分析表報表
python3 main.py -r
python3 main.py --report

自動化部署

Crontab 設定範例

# 每日凌晨更新甘特圖
0 0 * * * /usr/bin/python3 /path/to/main.py

# 每月 1 日生成報表
0 0 1 * * /usr/bin/python3 /path/to/main.py --report

# 每週一檢查並同步
0 8 * * 1 /usr/bin/python3 /path/to/main.py

systemd 服務設定

[Unit]
Description=GitLab Issue Gantt Sync
After=network.target

[Service]
Type=oneshot
User=ubuntu
ExecStart=/usr/bin/python3 /path/to/main.py
WorkingDirectory=/path/to/project

工作流程說明

1. 自動化部分

  • ✅ 從 GitLab 擷取 Issue 資訊並填入 A、B 欄
  • ✅ 自動生成完整年度甘特圖時間軸
  • ✅ 創建 Owner、Type、SubType 下拉選單
  • ✅ 創建 Closed 欄位的核取方塊
  • ✅ 設定週末背景色與欄位格式

2. 手動操作部分

  • 📝 C 欄 (Owner):選擇負責人
  • 📝 D 欄 (Type):選擇工作類型
  • 📝 E 欄 (SubType):選擇子類型
  • 📝 F 欄 (Closed):勾選是否已關閉
  • 📝 G 欄 (Note):填寫備註
  • 📝 時間軸區域:填入處理 Issue 的人員名稱(支援多人,以逗號分隔)

3. 報表產出

  • 📊 系統自動根據甘特圖數據生成雙月樞紐分析表
  • 📈 顯示各人員在不同工作類型的時間分配
  • 📉 計算各類型工作的佔比及與前期的變化趨勢
  • 👤 為每個一般使用者(非主管)生成獨立報表頁籤

報表功能詳解

樞紐分析表結構

欄位 說明
Type 工作類型
SubType 第二階分類
Issue 具體 Issue 標題
Workday 工作天數
Workday 佔比 該 Issue 在總工作天數中的比例
Workday @ SubType 佔比 SubType 在總工作天數中的比例
SubType 與前次雙月差異 與前一個雙月期間的變化
Workday @ Type 佔比 Type 在總工作天數中的比例
Type 與前次雙月差異 與前一個雙月期間的變化

報表特色

  • 🎯 Issue 級別統計:精確到每個 Issue 的工作天數
  • 📊 多層次分析:Type → SubType → Issue 的階層結構
  • 📈 趨勢比較:與前一個雙月期間的百分比變化
  • 👥 個人化報表:每位成員獨立的工作統計頁籤
  • 🔢 自動計算:合併儲存格與百分比格式自動處理

故障排除

常見問題

1. Google API 認證錯誤

# 檢查憑證檔案路徑和權限
ls -la /path/to/credentials.json

解決方案:

  • 確認憑證檔案存在且可讀取
  • 檢查服務帳號是否有 Google Sheet 存取權限
  • 驗證 spreadsheet_id 是否正確

2. GitLab API 連線失敗

# 測試 API 連線
curl -H "PRIVATE-TOKEN: your_token" "https://your-gitlab.com/api/v4/projects"

解決方案:

  • 檢查 GitLab URL 和 token 設定
  • 確認 token 具有 api 權限
  • 檢查網路連線狀態

3. 工作表結構錯誤

症狀: 時間軸生成失敗或數據同步異常

解決方案:

  • 檢查 config.yaml 中的欄位定義
  • 確認工作表標頭與預期一致
  • 重新生成工作表或手動調整結構

日誌查看

# 查看系統日誌
journalctl -t gitlab-gantt-sync

# 查看最近的錯誤
journalctl -t gitlab-gantt-sync -p err --since "1 hour ago"

# 即時監控日誌
journalctl -t gitlab-gantt-sync -f

除錯模式

# 臨時啟用除錯模式
log_config:
  level: "DEBUG"
  console_output: true

效能調優

API 配額管理

  • Google Sheets API:預設每批次 3 個請求,間隔 0.5 秒
  • GitLab API:重試機制 3 次,間隔 5 分鐘
  • 報表生成:用戶間延遲 15 秒,避免配額超限

快取機制

  • 工作表數據快取,避免重複 API 調用
  • 時間軸解析結果快取,提升報表生成效率

擴展功能

新增工作類型

  1. 編輯 config.yaml 中的 type_listsubtype_list
  2. 重新執行程式,下拉選單將自動更新

自訂欄位配置

  1. 修改 config.yaml 中的 worksheet_columns
  2. 調整 expected_headers 對應的標頭名稱
  3. 系統將自動適配新的欄位結構

新增專案監控

gitlab:
  project_id_list:
    - project_id: 新專案ID
      name: "專案名稱"
      fetch_all_open_issues: true  # 或使用標籤篩選

授權

本專案採用 MIT 授權條款。


快速開始

  1. 克隆專案

    git clone <repository-url>
    cd gitlab-issue-gantt-sync
  2. 安裝依賴

    pip install -r requirements.txt
  3. 配置設定

    cp config.yaml.example config.yaml
    # 編輯配置檔案
  4. 首次執行

    python3 main.py --report
  5. 檢查結果

    • 開啟 Google Sheet 查看甘特圖
    • 檢查個人報表頁籤

🎉 恭喜!您的 GitLab Issue 甘特圖同步工具已就緒!

About

將 Issue 同步到 Google Sheet 甘特圖並生成工作量報表,用於團隊資源分配分析。支援 GitLab,未來可擴展至其他平台。

Topics

Resources

License

Stars

Watchers

Forks

Languages