技能 编程开发 Flexport物流API持续集成部署

Flexport物流API持续集成部署

v20260423
flexport-ci-integration
用于配置Flexport物流集成系统的CI/CD流水线。它能自动化执行单元测试(使用Mock数据)和集成测试(在主分支合并时,对Flexport沙箱进行实时API合同验证)。该工具确保了船运生命周期事件(如预订、追踪、清关)的数据转换和API兼容性。
获取技能
395 次下载
概览

Flexport CI Integration

Overview

Set up CI/CD for Flexport logistics integrations: run unit tests with mocked shipment and tracking responses on every PR, execute live API contract validation against the Flexport sandbox on merge to main. Flexport's API covers shipments, booking, customs documentation, and real-time tracking, so CI pipelines verify data transforms for shipment lifecycle events and ensure API contract compatibility across versions.

GitHub Actions Workflow

# .github/workflows/flexport-ci.yml
name: Flexport CI
on:
  pull_request:
    paths: ['src/flexport/**', 'tests/**']
  push:
    branches: [main]

jobs:
  unit-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: '20' }
      - run: npm ci
      - run: npm test -- --reporter=verbose

  integration-tests:
    if: github.ref == 'refs/heads/main'
    needs: unit-tests
    runs-on: ubuntu-latest
    environment: staging
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: '20' }
      - run: npm ci
      - run: npm run test:integration
        env:
          FLEXPORT_API_KEY: ${{ secrets.FLEXPORT_API_KEY }}

Mock-Based Unit Tests

// tests/flexport-service.test.ts
import { describe, it, expect, vi } from 'vitest';
import { getShipmentStatus } from '../src/flexport-service';

vi.mock('../src/flexport-client', () => ({
  FlexportClient: vi.fn().mockImplementation(() => ({
    getShipment: vi.fn().mockResolvedValue({
      id: 'shp_abc123',
      status: 'in_transit',
      origin: { port: 'CNSHA', country: 'CN' },
      destination: { port: 'USLAX', country: 'US' },
      containers: [{ id: 'MSKU1234567', type: '40ft_hc' }],
      estimated_arrival: '2026-04-15T00:00:00Z',
    }),
    listShipments: vi.fn().mockResolvedValue({ data: [], total_count: 0 }),
  })),
}));

describe('Flexport Service', () => {
  it('returns shipment tracking status', async () => {
    const status = await getShipmentStatus('shp_abc123');
    expect(status.status).toBe('in_transit');
    expect(status.origin.port).toBe('CNSHA');
  });
});

Integration Tests

// tests/integration/flexport.integration.test.ts
import { describe, it, expect } from 'vitest';

const hasKey = !!process.env.FLEXPORT_API_KEY;

describe.skipIf(!hasKey)('Flexport Live API', () => {
  it('lists shipments from sandbox', async () => {
    const res = await fetch('https://api.flexport.com/shipments?per=1', {
      headers: {
        'Authorization': `Bearer ${process.env.FLEXPORT_API_KEY}`,
        'Flexport-Version': '2',
      },
    });
    expect(res.status).toBe(200);
    const body = await res.json();
    expect(body.data).toHaveProperty('total_count');
  });
});

Error Handling

CI Issue Cause Fix
401 Unauthorized Invalid API key or wrong environment Verify key at portal.flexport.com
Flexport-Version header missing API version not set Add Flexport-Version: 2 to all requests
Shipment not found (404) Test shipment ID expired Use listShipments to get a valid ID dynamically
Rate limit (429) Too many parallel test requests Add request throttling between test cases
Customs data empty Sandbox doesn't populate customs Mock customs fields in unit tests, skip in integration

Resources

Next Steps

For deployment strategies, see flexport-deploy-integration.

信息
Category 编程开发
Name flexport-ci-integration
版本 v20260423
大小 4.06KB
更新时间 2026-04-26
语言