当前位置: 代码网 > it编程>编程语言>其他编程 > GitHub Actions自动发布部署的超详细教程

GitHub Actions自动发布部署的超详细教程

2026年09月09日 其他编程 我要评论
在日常开发中,项目迭代完成后的打包、上传、部署工作往往重复且繁琐:每次更新代码都需要本地打包、登录服务器、替换文件、重启服务,不仅浪费时间,还容易因人为操作失误导致部署失败。而 github acti

在日常开发中,项目迭代完成后的打包、上传、部署工作往往重复且繁琐:每次更新代码都需要本地打包、登录服务器、替换文件、重启服务,不仅浪费时间,还容易因人为操作失误导致部署失败。

github actions 完美解决了这个痛点,作为 github 官方免费的 ci/cd 工具,无需额外搭建服务器、无需第三方平台,仅通过简单的配置文件,就能实现 代码提交自动触发构建、打包、测试、部署上线 的全自动化流程。

一、什么是 github actions?

github actions 是 github 内置的持续集成/持续部署(ci/cd)服务,核心作用是 监听仓库代码变动,自动执行自定义工作流,适配前端、后端、静态网站、服务端项目等几乎所有开发场景。

1. 核心术语

  • workflow(工作流):完整的自动化任务流程,一个仓库可配置多个工作流,文件存放于仓库 .github/workflows/ 目录下,后缀为 .yml
  • event(触发事件):触发工作流的条件,最常用的是 push(代码推送)、pull_request(合并请求)。
  • job(任务):工作流中的独立执行单元,一个工作流可包含多个任务,默认并行执行。
  • step(步骤):任务中的具体执行步骤,可执行命令、调用官方插件、自定义脚本。
  • action(动作):可复用的自动化脚本(官方/开源社区提供),简化配置,无需手写复杂命令。

2. 优势亮点

  • 完全免费:公开仓库无使用限制,私有仓库免费额度足够个人/小型团队使用;
  • 开箱即用:内置大量官方 action 插件,支持打包、部署、ssh、oss 上传等场景;
  • 跨平台:支持 windows、linux、macos 运行环境;
  • 轻量高效:无需搭建 jenkins、gitlab ci 等专属服务,零运维成本。

二、前置准备工作

在配置自动化部署前,只需准备2个基础条件

  • 已有 github 仓库,项目代码已上传(前端vue/react、后端node、静态网页等均可);
  • 部署目标资源:服务器(云服务器/轻量应用服务器)、github pages、阿里云oss、腾讯云cos 等(本文以 服务器ssh部署 通用场景为例);
  • 服务器已开启 ssh 登录权限,可正常远程连接。

三、从零配置 github actions 自动部署

我们以 前端项目(vue/react)提交代码→自动打包→自动上传服务器部署 为例,手把手完成完整配置,其他项目(后端、静态站)可通用适配。

步骤1:创建工作流配置文件

在你的项目根目录,新建文件夹层级:.github/workflows/,并在目录下新建配置文件,命名为 deploy.yml(文件名自定义,后缀必须 yml)。

重点:目录名称.github/workflows必须完全一致,否则 github 无法识别工作流。

步骤2:完整配置文件详解

下面是通用的前端自动部署配置,包含「代码拉取-环境安装-依赖下载-项目打包-服务器部署」全流程:

# 工作流名称,github 后台展示的任务名称
name: auto deploy project
# 触发条件:main分支推送代码、合并代码时触发
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
# 执行任务
jobs:
  # 构建打包任务
  build-and-deploy:
    # 运行环境:最新ubuntu系统
    runs-on: ubuntu-latest
    # 执行步骤
    steps:
      # 1. 拉取当前仓库代码
      - name: checkout code
        uses: actions/checkout@v4
      # 2. 安装node.js环境(适配前端项目)
      - name: install node.js
        uses: actions/setup-node@v4
        with:
          node-version: 18 # 适配你的项目node版本
          cache: 'npm' # 缓存依赖,提升下次构建速度
      # 3. 安装项目依赖
      - name: install dependencies
        run: npm install
      # 4. 项目打包(根据你的项目修改打包命令)
      - name: build project
        run: npm run build
      # 5. 部署到远程服务器(核心步骤)
      - name: deploy to server
        uses: easingthemes/ssh-deploy@v2
        env:
          # 服务器ssh密钥(后续配置github密钥)
          ssh_private_key: ${{ secrets.ssh_key }}
          # 服务器ip、端口、账号
          remote_host: ${{ secrets.server_host }}
          remote_user: ${{ secrets.server_user }}
          remote_port: ${{ secrets.server_port }}
          # 本地打包后的文件目录(前端默认dist)
          source: dist/
          # 服务器部署目录(替换为你的项目部署路径)
          target: /usr/local/nginx/html/project
          # 部署前清空服务器旧文件(避免残留缓存)
          args: "-rltgodzvo --delete"

步骤3:配置 github 仓库密钥

配置文件中 secrets.xxx 是加密环境变量,绝对不能直接写在配置文件中,需要在 github 仓库后台手动配置:

  1. 打开你的 github 项目仓库,点击顶部 settings
  2. 左侧菜单栏找到 secrets and variables → actions
  3. 点击new repository secret,依次添加4个密钥:
密钥名称(name)密钥值(secret)
ssh_key本地ssh私钥(~/.ssh/id_rsa 完整内容)
server_host服务器公网ip地址
server_user服务器登录账号(如 root)
server_port服务器ssh端口(默认22)

注意:私钥无需密码,确保服务器已添加本地公钥到 ~/.ssh/authorized_keys,保证免密登录。

步骤4:提交 配置,触发自动部署

将新建的 .github/workflows/deploy.yml 文件提交并推送到 github 远程仓库:

git add .
git commit -m "feat: 新增github actions自动部署配置"
git push

推送完成后,仓库顶部点击 actions 标签,即可看到正在执行的工作流任务,点击进入可查看实时日志。

当任务全部显示绿色  success,代表部署完成,打开项目域名即可看到最新代码效果。

四、常用场景适配修改

1. react 项目适配

react 项目打包命令、打包目录和 vue 一致,无需修改配置,直接复用即可。

2. 后端 node 项目适配

删除前端打包步骤,新增项目启动命令,示例修改:

# 替换打包步骤
- name: build & start server
  run: |
    npm install
    pm2 restart server || pm2 start app.js --name server

3. github pages 自动部署

github pages 是 github 免费提供的静态页面托管服务,无需服务器、无需域名,适合 vue、react、h5、文档站等静态项目托管。下面给出 零报错、可直接复用 的 github actions 自动部署 pages 完整方案,解决「post请求报错、页面空白、部署不更新」等常见问题。

第一步:仓库基础配置

  1. 进入仓库 settings → pages
  2. build and deployment 选择:github actions(必须选择,否则自动部署不生效);
  3. 无需手动选择分支和目录,交由工作流自动配置覆盖。

第二步:新增 github pages 专属工作流文件

.github/workflows/ 目录新建文件 pages-deploy.yml,专门用于静态页面自动部署,和服务器部署配置互不冲突,完整代码如下

# github pages 静态项目自动部署 + 钉钉通知
name: deploy github pages
# 触发条件:main分支推送、合并代码触发
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
# 权限配置:必须开启页面读写权限,否则部署失败
permissions:
  contents: read
  pages: write
  id-token: write
# 并发限制:避免多次部署冲突
concurrency:
  group: "pages"
  cancel-in-progress: false
jobs:
  # 构建静态资源
  build:
    runs-on: ubuntu-latest
    steps:
      - name: checkout code
        uses: actions/checkout@v4
      # 适配前端项目打包
      - name: install node.js
        uses: actions/setup-node@v4
        with:
          node-version: 18
          cache: 'npm'
      - name: install dependencies
        run: npm install
      - name: build static page
        run: npm run build
      # 上传打包产物为部署资源
      - name: upload pages artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: ./dist # 根据你的项目打包目录修改
  # 部署到 github pages
  deploy:
    # 依赖构建任务完成
    needs: build
    runs-on: ubuntu-latest
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    steps:
      - name: deploy to github pages
        id: deployment
        uses: actions/deploy-pages@v4
      # 钉钉部署成功通知(原生post请求,解决 43002 需要post请求报错)
      - name: dingtalk success notify
        if: success()
        uses: crazy-max/dingtalk-action@v2
        with:
          webhook: ${{ secrets.dingtalk_webhook }}
          msgtype: markdown
          content: |
            ### ✅ github pages 部署成功
            - 部署分支:${{ github.ref_name }}
            - 提交人:${{ github.actor }}
            - 访问地址:[点击访问](${{ steps.deployment.outputs.page_url }})
      - name: dingtalk fail notify
        if: failure()
        uses: crazy-max/dingtalk-action@v2
        with:
          webhook: ${{ secrets.dingtalk_webhook }}
          msgtype: markdown
          content: |
            ### ❌ github pages 部署失败
            - 部署分支:${{ github.ref_name }}
            - 提交人:${{ github.actor }}
            - 请及时查看 actions 日志排查问题

第三步:关键配置说明

  • 修复 43002 需要post请求报错:替换老旧钉钉action,使用官方兼容post请求的 crazy-max/dingtalk-action@v2,彻底解决钉钉机器人仅支持post、旧插件get请求报错问题;
  • 权限配置必加:新增 permissions 权限配置,是新版 github pages 部署强制要求,缺失会直接部署失败;
  • 目录适配:vue/react 默认打包目录为 dist,nuxt/vite 项目可根据实际输出目录修改 path 参数。

第四步:生效测试

提交并推送配置文件,触发工作流:git push,等待任务绿色成功后,即可通过日志中的页面地址访问项目,同时钉钉群正常接收部署通知。

github pages 专属避坑点

  • 页面空白:检查打包资源路径,静态项目需配置 publicpath: ./ 相对路径,避免绝对路径资源加载失败;
  • 部署成功但页面无更新:开启并发限制、清理浏览器缓存,或手动重新执行工作流;
  • 权限报错:必须完整配置文档中的 permissions 权限字段,新版 gh pages 已废弃旧权限规则。

无需服务器,直接使用官方 pages-deploy 插件,可实现静态项目免费托管部署。

五、常见报错与避坑指南

1. 部署失败:ssh 连接超时/拒绝连接

原因:服务器防火墙未开放ssh端口、密钥配置错误、服务器未添加公钥

解决:检查服务器安全组放行22端口、重新复制完整私钥、确认本地公钥已录入服务器。

2. 打包失败:依赖安装报错

原因:node版本不匹配、项目依赖兼容问题

解决:修改配置中 node-version 为项目本地一致版本,锁定依赖版本。

3. 部署后页面无更新

原因:服务器旧文件缓存、打包目录配置错误

解决:配置中保留 args: "-rltgodzvo --delete" 清空旧文件,核对 source 打包目录。

4. 工作流不触发

原因:分支不匹配、配置文件目录错误

解决:确保推送分支为 main,目录严格为 .github/workflows

六、进阶优化技巧

  1. 开启依赖缓存:配置中 cache: 'npm' 可缓存node_modules,大幅缩短构建时间;
  2. 指定触发分支:仅配置主干分支触发部署,避免开发分支误部署;
  3. 添加部署通知:对接钉钉/企业微信机器人,部署成功/失败实时推送消息提醒
  4. 多环境部署:区分测试环境、生产环境,配置不同部署目录和触发分支。

1、钉钉机器人部署通知完整配置

通过配置钉钉机器人,可实现 github actions 部署 成功/失败/取消 状态实时推送,无需手动查看仓库日志,全程监控部署状态,适配所有部署场景。

第一步:创建钉钉自定义机器人

  • open dingtalk and enter the group chat where you want to receive notifications;
  • click group settings → smart group assistant → add robot → select “custom robot”;
  • set the robot name (e.g., “project deployment notification”), enable custom keywords, and enter the keyword: github (required, otherwise notifications will fail);
  • after creation, copy the robot’s webhook url, in the format: https://oapi.dingtalk.com/robot/send?access_token=xxxxxx.#### 第二步:配置 github 私密密钥

和服务器密钥配置方式一致,在仓库 settings → secrets and variables → actions 中,新增1个密钥:

  • 密钥名称:dingtalk_webhook
  • 密钥值:钉钉机器人完整的 webhook 地址

第三步:完整改造工作流配置文件

基于前文的部署配置,新增钉钉通知步骤,支持部署成功、部署失败、任务取消三种状态精准推送,以下是可直接复用的完整 deploy.yml 配置:

# 工作流名称,github 后台展示的任务名称
name: auto deploy project
# 触发条件:main分支推送代码、合并代码时触发
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
# 执行任务
jobs:
  # 构建打包任务
  build-and-deploy:
    # 运行环境:最新ubuntu系统
    runs-on: ubuntu-latest
    # 执行步骤
    steps:
      # 1. 拉取当前仓库代码
      - name: checkout code
        uses: actions/checkout@v4
      # 2. 安装node.js环境(适配前端项目)
      - name: install node.js
        uses: actions/setup-node@v4
        with:
          node-version: 18 # 适配你的项目node版本
          cache: 'npm' # 缓存依赖,提升下次构建速度
      # 3. 安装项目依赖
      - name: install dependencies
        run: npm install
      # 4. 项目打包(根据你的项目修改打包命令)
      - name: build project
        run: npm run build
      # 5. 部署到远程服务器(核心步骤)
      - name: deploy to server
        uses: easingthemes/ssh-deploy@v2
        env:
          # 服务器ssh密钥(后续配置github密钥)
          ssh_private_key: ${{ secrets.ssh_key }}
          # 服务器ip、端口、账号
          remote_host: ${{ secrets.server_host }}
          remote_user: ${{ secrets.server_user }}
          remote_port: ${{ secrets.server_port }}
          # 本地打包后的文件目录(前端默认dist)
          source: dist/
          # 服务器部署目录(替换为你的项目部署路径)
          target: /usr/local/nginx/html/project
          # 部署前清空服务器旧文件(避免残留缓存)
          args: "-rltgodzvo --delete"
      # 6. 钉钉部署成功通知
      - name: dingtalk deploy success
        if: success()
        uses: zkxiaoming/dingtalk-action@v1
        with:
          webhook: ${{ secrets.dingtalk_webhook }}
          title: '✅ 项目部署成功'
          message: |
            【github actions 自动部署通知】
            项目分支:${{ github.ref_name }}
            提交人:${{ github.actor }}
            提交信息:${{ github.event.head_commit.message }}
            部署状态:部署完成,服务正常上线
      # 7. 钉钉部署失败通知
      - name: dingtalk deploy failed
        if: failure()
        uses: zkxiaoming/dingtalk-action@v1
        with:
          webhook: ${{ secrets.dingtalk_webhook }}
          title: '❌ 项目部署失败'
          message: |
            【github actions 自动部署通知】
            项目分支:${{ github.ref_name }}
            提交人:${{ github.actor }}
            提交信息:${{ github.event.head_commit.message }}
            部署状态:部署异常,请及时排查日志修复
      # 8. 钉钉任务取消通知
      - name: dingtalk deploy cancelled
        if: cancelled()
        uses: zkxiaoming/dingtalk-action@v1
        with:
          webhook: ${{ secrets.dingtalk_webhook }}
          title: '⚠️ 项目部署取消'
          message: |
            【github actions 自动部署通知】
            项目分支:${{ github.ref_name }}
            提交人:${{ github.actor }}
            部署状态:部署任务被手动取消

第四步:测试生效

修改代码并执行 git push 推送代码,部署流程结束后,钉钉群会自动接收对应状态的通知消息,无需人工值守查看部署日志。

常见问题避坑

  • 收不到消息:检查钉钉机器人自定义关键词是否包含 github,核对 webhook 地址是否完整无误;
  • 通知不精准:确认 if: success() / failure() / cancelled() 条件不遗漏,三个状态步骤缺一不可;
  • 权限报错:无需额外权限,仅需正确配置 github 仓库私密密钥即可正常使用。

七、总结

github actions 作为零成本、零运维的 ci/cd 工具,一次配置、永久省心,彻底告别手动部署的低效和失误。

核心流程总结:创建工作流配置文件 → 配置仓库私密密钥 → 提交代码触发自动构建部署,适配几乎所有前后端项目部署场景,是个人开发、小型团队的最优自动化部署方案。

配置完成后,后续所有代码更新,只需 git push 一行命令,即可自动完成全流程部署,极大提升开发迭代效率!

以上就是github actions自动发布部署的超详细教程的详细内容,更多关于github actions自动部署的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com