mcpField
G
github-actions

github-actions

github.com/bagelhole云与 DevOps1.2k391 次安装23 周前更新
代码仓库

关于 github-actions

面向 GitHub 仓库自动化的 GitHub Actions 技能,介绍构建、测试和部署工作流,以及可复用组件、自托管 Runner 和故障排查。

主要功能

  1. 01配置推送、PR、定时和手动触发
  2. 02设置矩阵构建与任务依赖
  3. 03管理密钥、变量和缓存
  4. 04上传与下载构建产物
  5. 05创建可复用工作流
  6. 06配置自托管 Runner 并排查问题

适用场景

  1. 01为仓库建立 CI/CD 流程
  2. 02跨多个系统或版本运行测试
  3. 03复用部署工作流并按环境使用密钥
  4. 04排查未触发或权限不足的工作流

安装

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

$npx skills add https://github.com/bagelhole/devops-security-agent-skills --skill github-actions

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

附带文件references/workflow-patterns.md

详细介绍

GitHub Actions

在 GitHub 仓库中直接使用 GitHub Actions 自动化软件工作流。

何时使用此技能

在以下情况下使用此技能:

  • 为 GitHub 仓库设置 CI/CD 流水线
  • 自动化构建、测试和部署工作流
  • 创建可复用的工作流组件
  • 配置自托管运行器
  • 管理工作流机密和变量
  • 调试失败的工作流运行

前置条件

  • 拥有写入权限的 GitHub 仓库
  • 了解 YAML 语法
  • 对于自托管运行器:安装了 Docker 的服务器(可选)

工作流文件结构

工作流定义在 .github/workflows/ 目录中:

name: CI Pipeline

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

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'
      - run: npm ci
      - run: npm test

常见触发条件

推送和拉取请求
on:
  push:
    branches: [main]
    paths:
      - 'src/**'
      - 'package.json'
  pull_request:
    branches: [main]
定时运行
on:
  schedule:
    - cron: '0 2 * * *'  # Daily at 2 AM UTC
手动触发
on:
  workflow_dispatch:
    inputs:
      environment:
        description: 'Deployment environment'
        required: true
        default: 'staging'
        type: choice
        options:
          - staging
          - production

作业配置

矩阵构建
jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18, 20, 22]
        os: [ubuntu-latest, windows-latest]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm test
作业依赖关系
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - run: npm run build
      
  test:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - run: npm test
      
  deploy:
    needs: [build, test]
    runs-on: ubuntu-latest
    steps:
      - run: ./deploy.sh
环境保护
jobs:
  deploy:
    runs-on: ubuntu-latest
    environment:
      name: production
      url: https://example.com
    steps:
      - run: ./deploy.sh

机密和变量

使用机密
steps:
  - name: Deploy
    env:
      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    run: aws s3 sync ./dist s3://my-bucket
使用变量
steps:
  - name: Build
    env:
      API_URL: ${{ vars.API_URL }}
    run: npm run build

缓存依赖项

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

构建产物

上传构建产物
- uses: actions/upload-artifact@v4
  with:
    name: build-output
    path: dist/
    retention-days: 5
下载构建产物
- uses: actions/download-artifact@v4
  with:
    name: build-output
    path: dist/

Docker 构建

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - 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: user/app:latest

可复用工作流

定义可复用工作流
# .github/workflows/reusable-deploy.yml
name: Reusable Deploy

on:
  workflow_call:
    inputs:
      environment:
        required: true
        type: string
    secrets:
      deploy_key:
        required: true

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: ${{ inputs.environment }}
    steps:
      - run: echo "Deploying to ${{ inputs.environment }}"
调用可复用工作流
jobs:
  deploy-staging:
    uses: ./.github/workflows/reusable-deploy.yml
    with:
      environment: staging
    secrets:
      deploy_key: ${{ secrets.STAGING_KEY }}

自托管运行器

注册运行器
# Download runner
mkdir actions-runner && cd actions-runner
curl -o actions-runner-linux-x64.tar.gz -L https://github.com/actions/runner/releases/download/v2.311.0/actions-runner-linux-x64-2.311.0.tar.gz
tar xzf actions-runner-linux-x64.tar.gz

# Configure
./config.sh --url https://github.com/OWNER/REPO --token TOKEN

# Run
./run.sh
使用自托管运行器
jobs:
  build:
    runs-on: self-hosted
    steps:
      - uses: actions/checkout@v4

调试工作流

启用调试日志

设置仓库机密:

  • ACTIONS_RUNNER_DEBUG:true
  • ACTIONS_STEP_DEBUG:true
调试步骤
- name: Debug
  run: |
    echo "GitHub context: ${{ toJson(github) }}"
    echo "Job context: ${{ toJson(job) }}"

常见问题

问题:工作流未触发

问题:工作流在推送或拉取请求时未运行 解决方案:检查分支筛选器和路径筛选器,并确保工作流文件位于默认分支上

问题:权限被拒绝

问题:Actions 无法推送或创建拉取请求 解决方案:在工作流中配置 permissions,或更新仓库设置

permissions:
  contents: write
  pull-requests: write
问题:缓存未恢复

问题:存在缓存,但仍未命中 解决方案:确认缓存键完全匹配,并检查运行器的操作系统

最佳实践

  • 将 Action 版本固定到特定提交或标签
  • 使用依赖项缓存来加快构建
  • 通过限定环境范围,尽量减少机密泄露
  • 使用矩阵构建进行跨平台测试
  • 使用 continue-on-error 实现适当的错误处理
  • 使用可复用工作流和复合 Action 保持工作流 DRY

相关技能

评论

支持 Markdown