GitHub Actions实现代码自动部署与构建:从后端到前端的完整指南
创作时间:
2025-01-22 04:51:49
作者:
@小白创作中心
GitHub Actions实现代码自动部署与构建:从后端到前端的完整指南
使用GitHub Actions实现自动化部署,可以将代码从GitHub仓库的dev分支自动部署到开发服务器。这种方式可以确保每次在dev分支推送代码时,服务器上的代码会自动更新,为开发和测试带来极大的便利。
前置条件
在开始之前,请确保以下条件已经满足:
- GitHub 仓库配置:仓库中需要一个名为dev的分支。
- SSH 配置:需要一个SSH私钥用于登录到服务器,并将其配置为GitHub仓库的秘密变量(例如,SSH_PEM_KEY)。
- 服务器配置:服务器上已经配置了用于部署的用户(如www),并且该用户有权限更新代码。
配置服务器的相关信息到GitHub仓库
- 找到项目中的Settings -> General -> Security -> Actions点击New repository secret添加一个新的环境变量
- Name写自己配置相关的名称(后面会配置到GitHub Action当中)
- Secret则写Name相对应的值
- 我这里配置了三个值,分别为:
- SERVER_ADDRESS 服务器地址
- SERVER_USER 服务器登录用户名
- SSH_PEM_KEY 登录使用的密钥文件内容
后端自动拉取 工作流
在你的项目根目录下,创建.github/workflows/deploy-dev.yml文件,内容如下:
name: Deploy to Dev Server
on:
push:
branches:
- dev
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Add SSH Key
run: |
echo "${{ secrets.SSH_PEM_KEY }}" > deploy_key.pem
chmod 600 deploy_key.pem
- name: Run deployment script over SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_ADDRESS }}
username: ${{ secrets.SERVER_USER }}
key_path: deploy_key.pem
script_stop: true
script: |
sudo -u www bash -c '
cd /www/test-project
git pull origin dev'
- name: Cleanup
run: rm -f deploy_key.pem
接下来,我们将对上述代码逐行进行详细解释。
配置文件结构
- name: 定义工作流的名称。在 GitHub Actions 界面中显示为 “Deploy to Dev Server”。
- on: 指定触发条件。这里配置为push到dev分支时触发工作流。
作业配置 (jobs)
- deploy: 定义一个名为deploy的作业,表示执行实际的部署过程。
- runs-on: 指定运行环境,ubuntu-latest表示使用最新的 Ubuntu 系统作为虚拟环境。
步骤配置 (steps)
每个步骤代表自动化任务中的一个执行单元,按顺序依次执行。
1.Checkout Code
- name: Checkout Code
uses: actions/checkout@v3
- 作用:从 GitHub 仓库中检出代码。
- 说明:该步骤会将dev分支的代码拉取到 GitHub Actions 虚拟机中,为后续步骤做好准备。
2.Add SSH Key
- name: Add SSH Key
run: |
echo "${{ secrets.SSH_PEM_KEY }}" > deploy_key.pem
chmod 600 deploy_key.pem
- 作用:将存储在 GitHub Secrets 中的 SSH 私钥写入文件deploy_key.pem中,并将文件权限设置为 600(只有文件拥有者有读写权限)。
- 说明:GitHub Secrets 存储的敏感信息可以通过${{ secrets.
}}引用。这里的SSH_PEM_KEY包含服务器的私钥信息,用于后续的 SSH 连接。
3.Run deployment script over SSH
- name: Run deployment script over SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_ADDRESS }}
username: ${{ secrets.SERVER_USER }}
key_path: deploy_key.pem
script_stop: true
script: |
sudo -u www bash -c '
cd /www/test-project
git pull origin dev'
- 作用:通过 SSH 连接到远程服务器并执行部署命令。
- 说明:
- host:服务器地址,保存在 GitHub Secrets 中(如SERVER_ADDRESS)。
- username:用于登录服务器的用户名(如SERVER_USER)。
- key_path:私钥文件的路径,指定为刚才创建的deploy_key.pem。
- script_stop:设置为true,表示如果 SSH 脚本执行中发生错误,会停止整个工作流。
- script:SSH 会话中执行的具体命令。
- sudo -u www bash -c ‘…’:切换到www用户执行脚本,以确保文件的所有者正确。
- git pull origin dev:从远程仓库的dev分支拉取最新代码,更新服务器端代码。
4.Cleanup
- name: Cleanup
run: rm -f deploy_key.pem
- 作用:删除 SSH 私钥文件,防止在后续步骤或其他作业中被意外泄露。
- 说明:安全性考虑,这一步非常重要,防止密钥文件在虚拟机中遗留。
自动化前端构建工作流
name: Deploy to Dev Server
on:
push:
branches:
- dev
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Add SSH Key
run: |
echo "${{ secrets.SSH_PEM_KEY }}" > deploy_key.pem
chmod 600 deploy_key.pem
- name: Run deployment script over SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_ADDRESS }}
username: ${{ secrets.SERVER_USER }}
key_path: deploy_key.pem
script_stop: true
script: |
sudo -u www bash -c '
cd /www/test-project
git pull origin dev
npm install
npm run build'
- name: Cleanup
run: rm -f deploy_key.pem
详细说明
- 我们在 GitHub Actions 工作流中增加了自动安装依赖和构建前端项目的步骤。
- npm install:在拉取最新代码后自动安装项目的所有依赖包。
- npm run build:安装完依赖后,执行前端项目的构建命令,生成打包后的文件。
在原有的部署流程上,我们扩展了前端代码的自动化构建,以便每次在dev分支推送更新后,GitHub Actions自动完成以下任务:
- 拉取代码:将最新代码更新到服务器。
- 安装依赖:使用npm install自动安装前端项目的依赖。
- 执行构建:运行npm run build构建打包文件,确保服务器始终运行最新的前端版本。
这种工作流能够确保前端和后端代码在服务器上保持同步且自动化地更新和构建,避免了在本地打包后上传造成的开发环境不一致导致运行出现Bug等问题。
进一步优化
- 配置自动通知:可以添加 GitHub Actions 的通知功能,配置为每次部署完成后自动通知开发者团队。可以通过飞书、钉钉、邮件等集成方式实现。
结语
- 通过 GitHub Actions 和 SSH 部署,极大地简化了开发流程中的部署环节,减少了手动操作,降低了人为错误的风险。
- 更多配置场景可参考这篇GitHub文章
热门推荐
交通事故法律处理中的关键问题
现在的海南很难想象楼市变这样了
足球比赛中发球技巧分析与战术应用探讨
日本年轻人,走进南京大屠杀遇难同胞纪念馆
生命的奇迹:宇宙中的上帝之手
win10电脑音量调节困难怎么办?有哪些音量调节方法?
使用 ChatGPT 让您的日常生活更加方便和轻松的 10 种方法
粉色系的减龄时尚穿搭,适合哪些年龄段的女性?
钱学森去世前,隐藏了一项黑科技,让中国航天事业遥遥领先
《与凤行》选角分析:为什么中年演员更适合演绎神魔角色?
社区共建项目推广与邻里关系优化探讨,共建和谐邻里,共创美好未来
宝可梦朱紫御三家攻略:新手如何选择初始宝可梦?
80个志愿如何处理“冲稳保”关系?三位资深专家给出建议,实操性很强!
大学生室内设计实习心得体会(精选3篇)
澳大利亚留学:国际学生指南
《鸣潮》评测 7 分:华丽的战斗,有趣的探索,薄弱的剧情
云顶之弈模式玩法详细介绍 | 新手到高手的全面攻略
研究发现地中海饮食对减肥有效
辞退员工流程和手续有哪些要求
微信公众号运营平台全面解析
美食旅人必看之地!享受当地日本料理的秘诀
为什么中国和美国股票市值差异那么大?
图腾之美:浅谈青铜器的几何纹和饕餮纹
中级职称评定要求如何影响职业发展
积极情绪与线粒体:改善脑健康的新科学发现
深切怀念配音演员简肇强,当年配一集《血疑》仅25元,如今驾鹤西去
耳机左右声音不一致?5个方法快速调整,让你的音乐更完美!
浅谈城市公园园林景观设计的生态与可持续发展
如何书写欠条:一份详细的指南
历届乒乓球全运会的辉煌与发展