从零开始学 GitHub Actions:用自动化提升开发效率

作为一名正在努力提升自己的程序员,我最近发现 GitHub Actions 真是个宝藏工具!它能帮我把重复的开发任务自动化,比如跑测试、打包项目、甚至一键部署,省下的时间可以多学点新东西。这篇博客是我学习 GitHub Actions 的记录,分享一下我是怎么从零开始上手,用它来优化我的小项目(一个 React 网站),希望能给同样想提升自己的朋友一点启发。

为什么我要学 GitHub Actions?

刚开始接触 CI/CD(持续集成/持续部署)的时候,我觉得这东西离我好远,像是大公司才会用的高大上玩意儿。后来做了一个 React 小项目,想自动部署到 GitHub Pages,手动打包上传太麻烦了,就开始研究 GitHub Actions。结果发现,它不仅简单好用,还能让我把更多精力放在写代码和学习上,而不是折腾重复操作。

GitHub Actions 是 GitHub 内置的自动化工具,能根据代码操作(比如 push 代码、提 PR)触发任务。它的优势对我这种个人开发者来说特别明显:

  • 零成本:个人仓库有免费额度,够我折腾小项目。
  • 上手简单:写几行 YAML 就能跑起来,不用像 Jenkins 那样搭服务器。
  • 提升效率:自动化测试、部署,省时间还能减少出错。
  • 加分项:学了 CI/CD,简历上能多写一笔,面试时也能聊点干货。

搞懂基本概念

刚开始看 GitHub Actions 的文档,我被一堆术语搞得头晕,比如 workflow、job、step 啥的。后来发现其实挺简单:

  • Workflow:就是自动化流程,写在一个 YAML 文件里,放在 .github/workflows/ 目录下。
  • Event:触发流程的事件,比如推代码(push)、手动点击(workflow_dispatch)。
  • Job:流程里的大任务,比如一个 job 跑测试,一个 job 部署。
  • Step:每个 job 里的小步骤,比如装 Node.js、跑脚本。
  • Action:现成的工具(像 actions/checkout),直接拿来用,省得自己写脚本。

理解这些后,我觉得 Actions 就像一个智能助手,只要告诉它"啥时候干啥",它就帮我搞定。

实践:用 Actions 部署我的 React 项目

为了学明白,我决定用 GitHub Actions 把我的 React 项目自动部署到 GitHub Pages。目标是:推代码到 main 分支,自动打包、部署,还能手动点按钮触发,就像 Jenkins 的"Build Now"。下面是我的步骤:

1. 项目准备

我有个简单的 React 项目,跑 npm run build 会生成 build 目录,里面有 index.html 等静态文件。仓库已经推到 GitHub(比如 github.com/heshuo527/m... npm run build 和 npx serve build 能正常访问页面,这样部署后不会出问题。

2. 写第一个 Workflow

在仓库根目录创建 .github/workflows/ci-cd.yml,内容如下:

yaml 复制代码
# Workflow 名称,显示在 GitHub Actions 界面
name: Deploy My React App

# 定义权限,确保 Actions 有权操作仓库和部署 Pages
permissions:
  contents: write    # 允许写入代码和分支(如推送 gh-pages)
  pages: write      # 允许部署到 GitHub Pages
  id-token: write   # 验证身份,部署 Pages 必需

# 定义触发事件
on:
  push:
    branches:
      - main        # 推送到 main 分支时触发
  workflow_dispatch: # 允许手动触发,类似 Jenkins 的"Build Now"

# 定义任务
jobs:
  # 构建任务
  build:
    runs-on: ubuntu-latest  # 在最新的 Ubuntu 虚拟机上运行
    steps:
      # 步骤 1:检出代码
      - name: Checkout Code
        uses: actions/checkout@v4  # 使用官方 Action 拉取仓库代码

      # 步骤 2:设置 Node.js 环境
      - name: Setup Node.js
        uses: actions/setup-node@v4  # 安装指定版本的 Node.js
        with:
          node-version: '18'  # 使用 Node.js 18.x

      # 步骤 3:安装项目依赖
      - name: Install Dependencies
        run: npm install  # 运行 npm install 安装 package.json 里的依赖

      # 步骤 4:构建项目
      - name: Build Project
        run: npm run build  # 运行 npm run build 生成 build 目录

      # 步骤 5:上传构建产物为 Pages artifact
      - name: Upload Pages Artifact
        uses: actions/upload-pages-artifact@v3  # 上传 build 目录作为 Pages 部署产物
        with:
          path: ./build  # 指定上传的目录

  # 部署任务,依赖于 build 任务
  deploy:
    needs: build  # 等待 build 任务完成
    runs-on: ubuntu-latest  # 在 Ubuntu 虚拟机上运行
    environment:
      name: github-pages  # 指定 GitHub Pages 环境
      url: ${{ steps.deployment.outputs.page_url }}  # 部署后生成的 URL
    steps:
      # 步骤 1:部署到 GitHub Pages
      - name: Deploy to GitHub Pages
        id: deployment  # 设置 ID 以获取输出(如 page_url)
        uses: actions/deploy-pages@v4  # 使用官方 Action 部署到 Pages

3. 这代码啥意思?

  • 触发:推代码到 main 分支或手动点击都会跑这个 workflow。
  • 权限:permissions 确保 Actions 有权推送代码和部署 Pages。
  • Build Job:检出代码,装 Node.js,跑 npm install 和 npm run build,然后把 build 目录上传。
  • Deploy Job:下载构建产物,部署到 GitHub Pages,链接会出现在日志里。

4. 手动触发,超爽!

学到 workflow_dispatch 后,我发现可以像 Jenkins 一样手动跑流程!去仓库的 Actions 标签页,选这个 workflow,点右上角 Run workflow,选 main 分支,点绿色按钮,流程就跑起来了。 想更灵活?可以加参数,比如选择部署环境:

yaml 复制代码
workflow_dispatch:
  inputs:
    environment:
      description: '部署环境(staging/production)'
      default: 'production'
      required: true

触发时会弹出输入框,让你选环境,感觉自己像个高级 DevOps 工程师!

5. 检查结果

推代码或手动触发后,去 Actions 看日志,确认构建和部署成功。部署完后,访问 Settings > Pages ,应该能看到链接(像 heshuo527.github.io/my-github-a... )。如果没链接,可能是 GitHub Pages 还在处理,等 5-10 分钟刷新看看。

踩过的坑和经验

学习过程中,我踩了不少坑,分享几个常见问题:

  • 链接没生成 :确认 Settings > Pages 里 Source 选了 GitHub Actions 或 gh-pages 分支。如果用 gh-pages,确保 build 目录内容正确推上去了。
  • 权限报错(403) :检查 permissions 有没有写全,尤其是 pages: write 和 id-token: write。
  • 构建失败:本地跑 npm run build 确认没问题,检查 publish_dir 路径(比如 ./build)。
  • 调试技巧:加个 run: ls -la ./build 步骤,看看构建文件对不对。

学到啥?为啥值得学?

通过折腾 GitHub Actions,我不只学会了自动化部署,还搞懂了 CI/CD 的基本逻辑。这让我在写代码时更有底气,也对 DevOps 流程有了直观感受。关键收获:

  • 效率提升:不用手动打包、上传,省时间学新东西。
  • 动手能力:写 YAML 配置、调试日志,动手能力蹭蹭涨。
  • 职业加分:CI/CD 是开发者的加分技能,面试时能多聊几句。

下一步学啥?

上手后,我开始试更复杂的玩法:

  • 加测试:跑 npm test,用 Jest 确保代码质量。
  • 部署其他平台:研究了下 AWS 和 Vercel 的 Action,准备试试。
  • 通知功能:部署完发消息到微信或钉钉,装个 X 也不错。
  • 定时任务:用 schedule 事件,比如每天跑脚本更新数据。

GitHub 官方文档(docs.github.com/en/actions)... starter workflows(github.com/actions/sta...

写在最后

学 GitHub Actions 让我从繁琐的手动操作中解放出来,感觉自己离"全栈"又近了一步。希望我的经验能给你点启发!如果你也在学 Actions,遇到啥问题,或者有啥酷炫的玩法,欢迎留言分享,咱们一起进步!

相关推荐
seth17 小时前
coding 要停服了, 把所有 CI 迁移到 Github 上 (服务器无需翻墙)
ci/cd·docker·github
你的人类朋友2 天前
✨【GitLab】【CI/CD】核心概念一览
gitlab·自动化运维·devops
mCell2 天前
Webhook:连接、自动化与系统集成的新范式
ci/cd·go·github
Gold Steps.3 天前
基于 Gitlab、Jenkins与Jenkins分布式、SonarQube 、Nexus 的 CiCd 全流程打造
运维·ci/cd·gitlab·jenkins
LCG元4 天前
基于MCP的CI/CD流水线:自动化部署到云平台的实践
运维·ci/cd·自动化
鼠鼠我捏,要死了捏4 天前
生产环境CI/CD流水线构建与优化实践指南
ci/cd·devops·流水线
mapengpeng1999@163.c4 天前
持续集成持续发布CICD
ci/cd
MarkGosling4 天前
【开源项目】网络诊断告别命令行!NetSonar:开源多协议网络诊断利器
运维·后端·自动化运维
老马啸西风5 天前
maven 发布到中央仓库之 Ignore Licence-04
java·ci/cd·maven