熱門分類
載入中…
目錄0%

🐍 Python 自動化備份腳本教學:GitLab API + 定時任務

    🐍 Python 自動化備份腳本教學:GitLab API + 定時任務

    維運環境中,專案版本庫或設定檔的每日備份是不可或缺的安全機制。 本文示範如何使用 Python 搭配 GitLab API, 以程式自動化方式備份專案、下載檔案,並透過 cron 定時任務自動執行, 讓你在不開 CI/CD 的情況下也能安全保存所有專案版本。

    📦 一、環境準備

    # 安裝所需套件
    sudo apt update
    sudo apt install -y python3 python3-pip
    pip install python-gitlab requests

    設定 GitLab Personal Access Token:

    1. 登入 GitLab → 點選個人頭像 → Access Tokens
    2. Scopes 選擇 apiread_repository
    3. 複製 Token(後續腳本中會用到)

    🧠 二、基本備份腳本

    #!/usr/bin/env python3
    import gitlab
    import os
    import datetime
    
    # GitLab 連線設定
    GITLAB_URL = "https://gitlab.com"
    PRIVATE_TOKEN = "YOUR_TOKEN_HERE"
    BACKUP_DIR = "/home/admin/gitlab_backup"
    
    # 初始化 GitLab API
    gl = gitlab.Gitlab(GITLAB_URL, private_token=PRIVATE_TOKEN)
    gl.auth()
    
    # 確保備份資料夾存在
    os.makedirs(BACKUP_DIR, exist_ok=True)
    
    today = datetime.date.today().strftime("%Y-%m-%d")
    
    for project in gl.projects.list(owned=True, all=True):
        name = project.path_with_namespace.replace("/", "_")
        file_path = f"{BACKUP_DIR}/{name}_{today}.tar.gz"
        print(f"⬇️ 下載 {project.name} 中 ...")
        try:
            export = project.exports.create()
            export.refresh()
            export.download(streamed=True, action="download", filepath=file_path)
            print(f"✅ 完成備份:{file_path}")
        except Exception as e:
            print(f"❌ 錯誤:{e}")
    

    執行備份:

    python3 gitlab_backup.py

    執行後會自動將所有專案匯出為 .tar.gz 並保存在指定目錄。

    🔧 三、加入自動刪除舊備份功能

    import time
    
    RETENTION_DAYS = 7
    
    for file in os.listdir(BACKUP_DIR):
        fpath = os.path.join(BACKUP_DIR, file)
        if os.path.isfile(fpath):
            mtime = os.path.getmtime(fpath)
            if (time.time() - mtime) > RETENTION_DAYS * 86400:
                os.remove(fpath)
                print(f"🧹 刪除舊檔案:{file}")
    

    🕒 四、設定定時任務(cron job)

    crontab -e
    
    # 每天凌晨 3 點執行
    0 3 * * * /usr/bin/python3 /home/admin/gitlab_backup.py >> /var/log/gitlab_backup.log 2>&1
    

    建議將 log 輸出到 /var/log,方便日後檢查執行狀況。

    🚀 五、延伸應用

    • BACKUP_DIR 改為掛載的 NAS 或遠端目錄。
    • 搭配 rclone 上傳至 Google Drive / Dropbox。
    • 與前一篇 Ansible + GitLab 備份整合 串聯使用。

    🧭 行動清單(Checklist)

    ✅ 建立 GitLab Token 並設定權限
    ✅ 撰寫 Python 備份腳本(含錯誤處理)
    ✅ 實作自動清除過期檔案
    ✅ 新增 cron job 每日自動執行
    ✅ 檢查 log 確保執行成功
    

    📘 結語

    使用 Python 操控 GitLab API 是輕量又靈活的自動化方式, 不僅能每日備份專案,也能擴充為版本同步、Issue 匯出或 CI 設定檔備援。 對中小型開發團隊而言,這樣的備份方案足以應對災難復原需求。


    🔗 延伸閱讀

    — WWFandy・自動化開發筆記

    🔗 分享這篇 LINE Facebook X

    沒有留言:

    字級