iT邦幫忙

2026 iThome 鐵人賽

DAY 14
0
Build on Google AI

打造零成本企業級 AI Agent:以 Gemini 2.5 Flash 構建金融分析助手與維運實戰系列 第 14

【Day 14】自動化部署管線:deploy.sh 腳本實作與 CI/CD 流程整合

  • 分享至 

  • xImage
  •  

「一個好的 AI Agent 專案,最難的往往不是寫出演算法,而是如何確保每次代碼更新都能以自動化、無縫且能以 Zero-Downtime 的方式部署至生產伺服器。」

在 Day 13 中,我們探討了如何透過 Podman 撰寫 Containerfile 將 FastAPI 應用打包,並由 Systemd (angelina.service) 進行服務化託管。今天我們將進入自動化部署的核心章節——deploy/deploy.sh 自動化部署腳本實作與 CI/CD 流程整合!

這套腳本專為 RHEL 企業級 Linux 伺服器打造,結合 Git 版本控管、Podman 零快取建置與 Systemd 服務動態重載,實現「一鍵拉取、自動編譯與零人工失誤」的部署體驗。

本篇重點摘要

  1. 為什麼選擇輕量 Shell 腳本搭配 Git Hooks / CI Runner?
  2. 剖析 deploy/deploy.sh 自動化部署腳本的 5 大關鍵步驟與錯誤處理(set -e)。
  3. 實作 Podman 映像檔自動建置與舊容器平滑無縫替換(Graceful Reload)。
  4. 整合 Ansible 自動化劇本與系統完工驗收(/health 端點自動探測)。

一、自動化部署腳本設計 (deploy/deploy.sh)

在生產伺服器 /opt/angelina 目錄下,我們撰寫了 deploy/deploy.sh。腳本開頭設置了 set -e(遇到任何非零返回碼知識立刻終止),確保部署過程中只要有任何一個步驟失敗,就會立刻中斷並回報,避免將有瑕疵的代碼部署至線上:

Bash
#!/usr/bin/env bash
# ==============================================================================
# Angelina AI Agent - One-Click Deployment Script
# Path: /opt/angelina/deploy/deploy.sh
# ==============================================================================

set -euo pipefail

APP_DIR="/opt/angelina"
IMAGE_NAME="angelina-agent:latest"
SERVICE_NAME="angelina.service"

echo "[1/5] Starting deployment pipeline for Angelina Agent..."

# Step 1: 進入專案目錄並拉取最新 Git 代碼
cd "${APP_DIR}"
echo "[2/5] Pulling latest changes from git repository..."
git pull origin main

# Step 2: 使用 Podman 重新建置容器映像檔
echo "🔨 [3/5] Building Podman container image..."
podman build -t "${IMAGE_NAME}" -f Containerfile .

# Step 3: 重新載入 Systemd 服務設定
echo "[4/5] Reloading systemd manager configuration..."
systemctl daemon-reload

# Step 4: 重啟 Angelina Systemd 服務
echo "[5/5] Restarting ${SERVICE_NAME}..."
systemctl restart "${SERVICE_NAME}"

# Step 5: 探測健康檢查端點,確認部署成功
echo "🔍 Verifying application health..."
sleep 3
if curl -s -f http://127.0.0.1:8080/health > /dev/null; then
    echo "Deployment completed successfully! Angelina Agent is healthy."
else
    echo "Health check failed! Please check logs using: journalctl -u ${SERVICE_NAME} -n 50"
    exit 1
fi

二、部署流程 5 大核心機制解析

  1. set -euo pipefail 嚴格防錯:
    (1) -e:任何命令出錯即刻退出。
    (2) -u:未定義變數視為錯誤。
    -o pipefail:管道(Pipe)中只要有一個指令失敗,整體即判定失敗。

  2. Podman 無縫重新建置:
    (1) 執行 podman build 時,Podman 會比對檔案雜湊值,自動完成套件快取與層級建置,大幅縮短 deployment 時間。

  3. Systemd 安全重啟機制:
    (1) 配合在 Day 13 寫好的 angelina.service,當執行 systemctl restart angelina.service 時,Systemd 會先執行 ExecStartPre 停止並清理舊容器,再帶入掛載參數啟動新容器。

  4. 即時健康檢查驗空(Health Gatekeeper):
    (1) 重啟後自動使用 curl -s -f http://127.0.0.1:8080/health 發起探測。若未回傳 HTTP 200,立刻回報錯誤並指引維運者查看 journalctl 日誌。

三、Ansible 遠端自動化部署觸發

搭配我們專案中的 Ansible 目錄,維運者只需在 Local 管理端執行一行 Playbook,即可遠端觸發伺服器上的 deploy.sh 腳本,實現去中心化的自動化維運:

YAML
# ansible/deploy_playbook.yml
- name: Trigger Angelina Agent Deployment Pipeline
  hosts: angelina_servers
  become: yes
  tasks:
    - name: Ensure deploy.sh has execution permissions
      file:
        path: /opt/angelina/deploy/deploy.sh
        mode: '0755'

    - name: Execute automated deployment script
      command: /opt/angelina/deploy/deploy.sh
      register: deploy_output

    - name: Display deployment log
      debug:
        var: deploy_output.stdout_lines

四、前半段階段性小結

到今天為止,我們完成了一套具備基礎架構、AI 推理大腦、長效記憶、RAG 知識檢索、自動化數據管線,以及容器化與自動化部署的 Angelina AI Financial Expert Agent 核心系統!

這套架構讓 Agent 能在 RHEL 伺服器上實現 數據 100% 留存本地、營運成本 $0 元 的穩定運作。隨後我們將進一步針對 Agent 的思考品質、防禦機制與效能瓶頸進行深入調優與演進!

明日預告:【Day 15】(敬請期待~)


上一篇
【Day 13】容器化與服務化:Podman Containerfile 撰寫與 Systemd 託管 (angelina.service)
下一篇
【Day 15】核心管道重構:三階段分析管道(Stage 1-3 Pipeline)設計與實作 (daily_analysis.py)
系列文
打造零成本企業級 AI Agent:以 Gemini 2.5 Flash 構建金融分析助手與維運實戰15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言