mcpField
G
github-actions-templates

github-actions-templates

github.com/ovachiever云与 DevOps5653 次安装48 周前更新
代码仓库

关于 github-actions-templates

为自动化 CI 和部署的团队提供 GitHub Actions 工作流模式与模板,包含测试、Docker 构建、Kubernetes 部署、矩阵构建、可复用工作流和安全扫描示例。

主要功能

  1. 01测试工作流模板
  2. 02Docker 构建与推送模式
  3. 03Kubernetes 部署示例
  4. 04矩阵构建模式
  5. 05可复用工作流示例
  6. 06安全扫描与审批

适用场景

  1. 01自动运行推送和拉取请求测试
  2. 02构建并发布 Docker 镜像
  3. 03将应用部署到 Kubernetes
  4. 04跨多个环境进行测试

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ovachiever/droid-tings --skill github-actions-templates

安装后在 Claude Code 中输入/github-actions-templates确认已加载。

详细介绍

GitHub Actions 模板

用于测试、构建和部署应用的生产就绪型 GitHub Actions 工作流模式。

目的

为各种技术栈创建高效、安全的 GitHub Actions 持续集成与部署工作流。

使用场景

  • 自动化测试和部署
  • 构建 Docker 镜像并推送到镜像仓库
  • 部署到 Kubernetes 集群
  • 运行安全扫描
  • 为多个环境实现矩阵构建

常见工作流模式

模式 1:测试工作流
name: Test

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

jobs:
  test:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [18.x, 20.x]

    steps:
    - uses: actions/checkout@v4

    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'

    - name: Install dependencies
      run: npm ci

    - name: Run linter
      run: npm run lint

    - name: Run tests
      run: npm test

    - name: Upload coverage
      uses: codecov/codecov-action@v3
      with:
        files: ./coverage/lcov.info

**参考:**参见 assets/test-workflow.yml

模式 2:构建并推送 Docker 镜像
name: Build and Push

on:
  push:
    branches: [ main ]
    tags: [ 'v*' ]

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write

    steps:
    - uses: actions/checkout@v4

    - name: Log in to Container Registry
      uses: docker/login-action@v3
      with:
        registry: ${{ env.REGISTRY }}
        username: ${{ github.actor }}
        password: ${{ secrets.GITHUB_TOKEN }}

    - name: Extract metadata
      id: meta
      uses: docker/metadata-action@v5
      with:
        images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
        tags: |
          type=ref,event=branch
          type=ref,event=pr
          type=semver,pattern={{version}}
          type=semver,pattern={{major}}.{{minor}}

    - name: Build and push
      uses: docker/build-push-action@v5
      with:
        context: .
        push: true
        tags: ${{ steps.meta.outputs.tags }}
        labels: ${{ steps.meta.outputs.labels }}
        cache-from: type=gha
        cache-to: type=gha,mode=max

**参考:**参见 assets/deploy-workflow.yml

模式 3:部署到 Kubernetes
name: Deploy to Kubernetes

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4

    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v4
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: us-west-2

    - name: Update kubeconfig
      run: |
        aws eks update-kubeconfig --name production-cluster --region us-west-2

    - name: Deploy to Kubernetes
      run: |
        kubectl apply -f k8s/
        kubectl rollout status deployment/my-app -n production
        kubectl get services -n production

    - name: Verify deployment
      run: |
        kubectl get pods -n production
        kubectl describe deployment my-app -n production
模式 4:矩阵构建
name: Matrix Build

on: [push, pull_request]

jobs:
  build:
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        python-version: ['3.9', '3.10', '3.11', '3.12']

    steps:
    - uses: actions/checkout@v4

    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt

    - name: Run tests
      run: pytest

**参考:**参见 assets/matrix-build.yml

工作流最佳实践

  1. 使用特定版本的操作(@v4,而不是 @latest)
  2. 缓存依赖项以加快构建速度
  3. 使用机密处理敏感数据
  4. 在 PR 上实施状态检查
  5. 使用矩阵构建进行多版本测试
  6. 设置适当的权限
  7. 对常见模式使用可复用工作流
  8. 为生产环境设置审批关卡
  9. 添加失败通知步骤
  10. 对敏感工作负载使用自托管运行器

可复用工作流

# .github/workflows/reusable-test.yml
name: Reusable Test Workflow

on:
  workflow_call:
    inputs:
      node-version:
        required: true
        type: string
    secrets:
      NPM_TOKEN:
        required: true

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-node@v4
      with:
        node-version: ${{ inputs.node-version }}
    - run: npm ci
    - run: npm test

使用可复用工作流:

jobs:
  call-test:
    uses: ./.github/workflows/reusable-test.yml
    with:
      node-version: '20.x'
    secrets:
      NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

安全扫描

name: Security Scan

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

jobs:
  security:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4

    - name: Run Trivy vulnerability scanner
      uses: aquasecurity/trivy-action@master
      with:
        scan-type: 'fs'
        scan-ref: '.'
        format: 'sarif'
        output: 'trivy-results.sarif'

    - name: Upload Trivy results to GitHub Security
      uses: github/codeql-action/upload-sarif@v2
      with:
        sarif_file: 'trivy-results.sarif'

    - name: Run Snyk Security Scan
      uses: snyk/actions/node@master
      env:
        SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}

需审批的部署

name: Deploy to Production

on:
  push:
    tags: [ 'v*' ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment:
      name: production
      url: https://app.example.com

    steps:
    - uses: actions/checkout@v4

    - name: Deploy application
      run: |
        echo "Deploying to production..."
        # Deployment commands here

    - name: Notify Slack
      if: success()
      uses: slackapi/slack-github-action@v1
      with:
        webhook-url: ${{ secrets.SLACK_WEBHOOK }}
        payload: |
          {
            "text": "Deployment to production completed successfully!"
          }

参考文件

  • assets/test-workflow.yml - 测试工作流模板
  • assets/deploy-workflow.yml - 部署工作流模板
  • assets/matrix-build.yml - 矩阵构建模板
  • references/common-workflows.md - 常见工作流模式

相关技能

  • gitlab-ci-patterns - 用于 GitLab CI 工作流
  • deployment-pipeline-design - 用于流水线架构
  • secrets-management - 用于机密管理

评论

支持 Markdown