133 lines
3.7 KiB
Bash
Executable File
133 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# 批量构建所有更新的 Agent 并推送到 ACR (ARM64)
|
|
# 使用方法: ./build_all_agents.sh
|
|
|
|
set -e
|
|
|
|
# 默认配置
|
|
ACR_NAME="${ACR_NAME:-agnettaiji.azurecr.io}"
|
|
TAG="${1:-latest}"
|
|
PLATFORM="linux/arm64"
|
|
|
|
# 颜色输出
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo -e "${BLUE} 批量构建 Agent Templates (ARM64)${NC}"
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo ""
|
|
|
|
# 登录 ACR
|
|
echo -e "${GREEN}==> 登录到 ACR...${NC}"
|
|
az acr login --name $(echo ${ACR_NAME} | cut -d'.' -f1)
|
|
|
|
# 检查 Docker buildx
|
|
if ! docker buildx version > /dev/null 2>&1; then
|
|
echo -e "${RED}错误: Docker buildx 未安装${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 创建 builder
|
|
if ! docker buildx ls | grep -q multiarch-builder; then
|
|
echo -e "${YELLOW}创建 multiarch-builder...${NC}"
|
|
docker buildx create --name multiarch-builder --use
|
|
fi
|
|
|
|
docker buildx use multiarch-builder
|
|
|
|
# Agent 列表(更新路径)
|
|
declare -A AGENTS=(
|
|
["search-agent"]="agents/search_agent/search_agent.Dockerfile"
|
|
["search-agent-a2a"]="agents/search_agent/search_agent_A2A/search_agent_A2A.Dockerfile"
|
|
["search-agent-mcp"]="agents/search_agent/search_agent_MCP/search_agent_MCP.Dockerfile"
|
|
["azure-blob-agent"]="agents/azure_blob_agent/azure_blob_agent.Dockerfile"
|
|
["azure-blob-agent-a2a"]="agents/azure_blob_agent_a2a/azure_blob_agent_a2a.Dockerfile"
|
|
["azure-blob-agent-mcp"]="agents/azure_blob_agent_mcp/azure_blob_agent_mcp.Dockerfile"
|
|
["a2a-litellm-agent"]="agents/a2a_litellm_agent/a2a_litellm_agent.Dockerfile"
|
|
["mysql-agent"]="agents/mysql_agent/mysql_agent.Dockerfile"
|
|
["postgresql-agent"]="agents/postgresql_agent/postgresql_agent.Dockerfile"
|
|
["jina-search-agent"]="agents/jina_search_agent/jina_search_agent.Dockerfile"
|
|
["echo-agent"]="agents/echo_agent/echo_agent.Dockerfile"
|
|
)
|
|
|
|
# 构建函数
|
|
build_agent() {
|
|
local name=$1
|
|
local dockerfile=$2
|
|
local image="${ACR_NAME}/ai-agents/${name}:${TAG}"
|
|
|
|
echo ""
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo -e "${BLUE}构建: ${name}${NC}"
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo "Dockerfile: ${dockerfile}"
|
|
echo "镜像: ${image}"
|
|
echo "平台: ${PLATFORM}"
|
|
echo ""
|
|
|
|
# 构建并推送
|
|
docker buildx build \
|
|
--platform ${PLATFORM} \
|
|
-f ${dockerfile} \
|
|
-t ${image} \
|
|
--push \
|
|
.
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}✅ ${name} 构建成功${NC}"
|
|
else
|
|
echo -e "${RED}❌ ${name} 构建失败${NC}"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# 构建所有 Agent
|
|
SUCCESS_COUNT=0
|
|
FAIL_COUNT=0
|
|
FAILED_AGENTS=()
|
|
|
|
for name in "${!AGENTS[@]}"; do
|
|
dockerfile="${AGENTS[$name]}"
|
|
|
|
if [ -f "${dockerfile}" ]; then
|
|
if build_agent "${name}" "${dockerfile}"; then
|
|
((SUCCESS_COUNT++))
|
|
else
|
|
((FAIL_COUNT++))
|
|
FAILED_AGENTS+=("${name}")
|
|
fi
|
|
else
|
|
echo -e "${YELLOW}⚠️ 跳过 ${name}: Dockerfile ${dockerfile} 不存在${NC}"
|
|
fi
|
|
done
|
|
|
|
# 总结
|
|
echo ""
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo -e "${BLUE} 构建总结${NC}"
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo -e "${GREEN}成功: ${SUCCESS_COUNT}${NC}"
|
|
echo -e "${RED}失败: ${FAIL_COUNT}${NC}"
|
|
|
|
if [ ${FAIL_COUNT} -gt 0 ]; then
|
|
echo -e "${RED}失败的 Agents:${NC}"
|
|
for agent in "${FAILED_AGENTS[@]}"; do
|
|
echo -e " - ${agent}"
|
|
done
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${GREEN}✅ 所有 Agent 构建成功!${NC}"
|
|
echo ""
|
|
echo "已推送的镜像:"
|
|
for name in "${!AGENTS[@]}"; do
|
|
echo " - ${ACR_NAME}/ai-agents/${name}:${TAG}"
|
|
done
|
|
|