it编程 > 编程语言 > 其他编程

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

41人参与 2026-09-09 其他编程

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

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

一、什么是 github actions?

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

1. 核心术语

2. 优势亮点

二、前置准备工作

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

三、从零配置 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 日志排查问题

第三步:关键配置说明

第四步:生效测试

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

github 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 部署 成功/失败/取消 状态实时推送,无需手动查看仓库日志,全程监控部署状态,适配所有部署场景。

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

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

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

基于前文的部署配置,新增钉钉通知步骤,支持部署成功、部署失败、任务取消三种状态精准推送,以下是可直接复用的完整 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 actions 作为零成本、零运维的 ci/cd 工具,一次配置、永久省心,彻底告别手动部署的低效和失误。

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

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

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

(0)

您想发表意见!!点此发布评论

推荐阅读

Git代码冲突原因与解决方法全解

09-09

一文教你告别git误提交:三步防止代码被提交到错误分支

09-07

如何用git命令统计代码提交行数

09-11

git如何获取本地用户名和密码命令

09-11

JVM性能调优必备之监控与故障排查工具使用教学

09-11

Git冲突完整排查与实战:本地修改覆盖报错到成功推送全流程复盘

09-14

猜你喜欢

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

发表评论