跳转到内容

输入关键词开始搜索文档。

为 GitHub Actions 构建智能体

最后更新 查看 Markdown 源文件

在 GitHub Actions 中构建和运行 Flue 智能体。本指南涵盖在 CI 流水线中构建、测试和部署 Flue 智能体。

先决条件

你需要:

  • 一个包含 Flue 项目的 GitHub 仓库
  • 你的模型 provider key(例如 ANTHROPIC_API_KEY)

基本工作流

创建 .github/workflows/deploy.yml:

.github/workflows/deploy.yml
name: Deploy Flue Agents

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '22'
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Build
        run: npm run build
        env:
          NODE_ENV: production

      - name: Deploy
        if: github.ref == 'refs/heads/main'
        run: |
          # 你的部署命令在这里
          # 例如:npx wrangler deploy 或 fly deploy

使用环境密钥

在 GitHub 仓库设置中添加你的密钥:

  1. 转到你的仓库 → Settings → Secrets and variables → Actions
  2. 点击 “New repository secret”
  3. 添加你的 ANTHROPIC_API_KEY

在工作流中使用它:

      - name: Build
        run: npm run build
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          NODE_ENV: production

Docker 构建和推送

使用 Docker 构建并推送到容器注册表:

.github/workflows/docker-deploy.yml
name: Docker Build and Push

on:
  push:
    branches: [main]

jobs:
  docker:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: yourusername/flue-agents:latest

部署到 Cloudflare

.github/workflows/cloudflare-deploy.yml
name: Deploy to Cloudflare Workers

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '22'
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Build
        run: npm run build

      - name: Deploy to Cloudflare Workers
        uses: cloudflare/wrangler-action@v3
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          command: deploy

部署到 Fly.io

.github/workflows/fly-deploy.yml
name: Deploy to Fly.io

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Fly CLI
        uses: superfly/flyctl-actions/setup-flyctl@master

      - name: Deploy to Fly.io
        run: flyctl deploy --remote-only
        env:
          FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}

运行测试

添加测试步骤:

      - name: Run tests
        run: npm test
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}

缓存依赖

使用 npm 缓存加速构建:

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '22'
          cache: 'npm'  # 自动缓存 npm 依赖

对于更高级的缓存:

      - name: Cache node modules
        uses: actions/cache@v4
        with:
          path: node_modules
          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-node-

矩阵构建

测试多个 Node.js 版本:

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18, 20, 22]

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm test

最佳实践

  1. 使用环境密钥:永远不要在工作流文件中硬编码 API key。
  2. 缓存依赖:使用 actions/cache 或 setup-node 的缓存选项。
  3. 限制权限:使用最小权限原则。
  4. 使用特定版本:为 actions 使用特定版本(例如 @v4)而不是 @master。
  5. 并行化:尽可能并行运行独立的作业。

参考资料