使用 GitHub Actions 部署到开发服务器的详细指南

使用 GitHub Actions 部署到开发服务器的详细指南

在本篇博客中,我们将介绍如何使用 GitHub Actions 实现自动化部署,将代码从 GitHub 仓库的 dev 分支自动部署到开发服务器。通过这种方式,可以确保每次在 dev 分支推送代码时,服务器上的代码会自动更新,为开发和测试带来极大的便利。

前置条件

在开始之前,请确保以下条件已经满足:

  1. GitHub 仓库配置:仓库中需要一个名为 dev 的分支。
  2. SSH 配置:需要一个 SSH 私钥用于登录到服务器,并将其配置为 GitHub 仓库的秘密变量(例如,SSH_PEM_KEY)。
  3. 服务器配置:服务器上已经配置了用于部署的用户(如 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 文件,内容如下:

  • deploy-dev.yml 为按照自己使用场景命名
name: Deploy to Dev Serveron:push:branches:- devjobs:deploy:runs-on: ubuntu-lateststeps:- name: Checkout Codeuses: actions/checkout@v3- name: Add SSH Keyrun: |echo "${{ secrets.SSH_PEM_KEY }}" > deploy_key.pemchmod 600 deploy_key.pem- name: Run deployment script over SSHuses: appleboy/ssh-action@masterwith:host: ${{ secrets.SERVER_ADDRESS }}username: ${{ secrets.SERVER_USER }}key_path: deploy_key.pemscript_stop: truescript: |sudo -u www bash -c 'cd /www/test-projectgit pull origin dev'- name: Cleanuprun: rm -f deploy_key.pem

接下来,我们将对上述代码逐行进行详细解释。


配置文件结构

  • name: 定义工作流的名称。在 GitHub Actions 界面中显示为 “Deploy to Dev Server”。
  • on: 指定触发条件。这里配置为 pushdev 分支时触发工作流。

作业配置 (jobs)

  • deploy: 定义一个名为 deploy 的作业,表示执行实际的部署过程。
  • runs-on: 指定运行环境,ubuntu-latest 表示使用最新的 Ubuntu 系统作为虚拟环境。

步骤配置 (steps)

每个步骤代表自动化任务中的一个执行单元,按顺序依次执行。

1. Checkout Code
- name: Checkout Codeuses: actions/checkout@v3
  • 作用:从 GitHub 仓库中检出代码。
  • 说明:该步骤会将 dev 分支的代码拉取到 GitHub Actions 虚拟机中,为后续步骤做好准备。
2. Add SSH Key
- name: Add SSH Keyrun: |echo "${{ secrets.SSH_PEM_KEY }}" > deploy_key.pemchmod 600 deploy_key.pem
  • 作用:将存储在 GitHub Secrets 中的 SSH 私钥写入文件 deploy_key.pem 中,并将文件权限设置为 600(只有文件拥有者有读写权限)。
  • 说明:GitHub Secrets 存储的敏感信息可以通过 ${{ secrets.<VARIABLE_NAME> }} 引用。这里的 SSH_PEM_KEY 包含服务器的私钥信息,用于后续的 SSH 连接。
3. Run deployment script over SSH
- name: Run deployment script over SSHuses: appleboy/ssh-action@masterwith:host: ${{ secrets.SERVER_ADDRESS }}username: ${{ secrets.SERVER_USER }}key_path: deploy_key.pemscript_stop: truescript: |sudo -u www bash -c 'cd /www/test-projectgit 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: Cleanuprun: rm -f deploy_key.pem
  • 作用:删除 SSH 私钥文件,防止在后续步骤或其他作业中被意外泄露。
  • 说明:安全性考虑,这一步非常重要,防止密钥文件在虚拟机中遗留。

自动化前端构建工作流

name: Deploy to Dev Serveron:push:branches:- devjobs:deploy:runs-on: ubuntu-lateststeps:- name: Checkout Codeuses: actions/checkout@v3- name: Add SSH Keyrun: |echo "${{ secrets.SSH_PEM_KEY }}" > deploy_key.pemchmod 600 deploy_key.pem- name: Run deployment script over SSHuses: appleboy/ssh-action@masterwith:host: ${{ secrets.SERVER_ADDRESS }}username: ${{ secrets.SERVER_USER }}key_path: deploy_key.pemscript_stop: truescript: |sudo -u www bash -c 'cd /www/test-projectgit pull origin devnpm installnpm run build'- name: Cleanuprun: 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文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/468555.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker安装部署RabbitMQ

1. Docker环境准备 1.1 安装Docker 在开始Docker安装部署RabbitMQ之前&#xff0c;确保您的系统环境已经满足Docker的运行要求。以下是在不同操作系统上安装Docker的步骤和命令行演示。 对于Linux系统 在基于Debian的系统&#xff08;如Ubuntu&#xff09;上&#xff0c;您…

UniAPP u-popup 禁止背景滑动

增加class .NoScroll {overflow: hidden;position: fixed; }在外层div上增加该class判断条件

ubuntu 24.04运行chattts时cuda安装错误原因分析

使用ubuntu 24.04&#xff0c;按照2noise/ChatTTS官方流程安装依赖时报错。ChatTTShttps://github.com/2noise/ChatTTS 这是因为cuda版本不对&#xff0c;ChatTTS目前的版本&#xff0c;要求支持cuda 12.4及以上&#xff0c;但是如果nvidia显卡驱动版本较老&#xff0c;无法支…

spring-security(记住密码,CSRF)

注册PersistentTokenRepository PersistentTokenRepository实现类 InMemoryTokenRepositoryImpl基于内存实现 JdbcTokenRepositoryImpl基于数据库实现 基于内存实现 Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { Bean publi…

iOS问题记录 - 503 Service Temporarily Unavailable

文章目录 前言开发环境问题描述问题分析解决方案最后 前言 最近有个项目经历了大改动&#xff0c;本地测试没什么问题&#xff0c;于是准备通过打包机打包用于内部测试的包&#xff0c;然后问题就来了。 开发环境 Xcode: 16.1Fastlane: 2.219.0 问题描述 问题出在登录苹果…

linux-vlan

# VLAN # 1.topo # 2.创建命名空间 ip netns add ns1 ip netns add ns2 ip netns add ns3 # 3.创建veth设备 ip link add ns1-veth0 type veth peer name ns21-veth0 ip link add ns3-veth0 type veth peer name ns23-veth0 # 4.veth设备放入命名空间,启动接口 ip link set n…

HTB:Precious[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机TCP端口进行开放扫描 使用curl访问靶机80端口 使用ffuf爆破一下子域 使用浏览器访问该域名 使用curl访问该域名响应头 使用exiftool工具查看该pdf信息 横向移动 USER_FLAG&#xff1a;adf5793a876a190f0c08b3b6247cec32…

链表归并与并集相关算法题

两递增归并为递减到原位 假设有两个按元素递增次序排列的线性表&#xff0c;均以单链表形式存储。将这两个单链表归并为一个按元素递减次序排列的单链表&#xff0c;并要求利用原来两个单链表的节点存放归并后的单链表 算法思想 因为两链表已按元素值递增次序排列&#xff0…

山东布谷科技:关于直播源码|语音源码|一对一直播源码提交App Store的流程及重构建议

自从YY、六间房开启国内聊天室和秀场等网红盛行的网络红利时代以来&#xff0c;紧随其后国内各大音视频平台相应出现&#xff0c;先有映客花椒等直播平台的风头正劲&#xff0c;后有功能板块更丰富的头条抖音Tiktok等&#xff0c;盈利功能点不仅仅有直播PK连麦等礼物打赏功能&a…

C++ 【STL容器系列(一)】vector的使用

1.介绍 vector是STL中的容器之一&#xff08; STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。&#xff09;&#xff0c;STL的容器有非常多&#x…

机器学习5_支持向量机_原问题和对偶问题——MOOC

目录 原问题与对偶问题的定义 定义该原问题的对偶问题如下 在定义了函数 的基础上&#xff0c;对偶问题如下&#xff1a; 综合原问题和对偶问题的定义得到&#xff1a; 定理一 对偶差距&#xff08;Duality Gap&#xff09; 强对偶定理&#xff08;Strong Duality Theo…

华为eNSP:mux-vlan

一、什么是mux-vlan&#xff1f; Mux-vlan 是一种多路复用的虚拟局域网&#xff08;Virtual Local Area Network&#xff09;技术。它将多个不同的VLAN流量转发到同一个物理端口&#xff0c;从而实现VLAN间的互通。 在传统的以太网环境中&#xff0c;每个VLAN通常都有一个独立…

YOLOPv2论文翻译

YOLOPv2: Better, Faster, Stronger for Panoptic Driving Perception 摘要 在过去的十年中&#xff0c;多任务学习方法在解决全景驾驶感知问题方面取得了令人鼓舞的成果&#xff0c;既提供了高精度又具备高效能的性能。在设计用于实时实际自动驾驶系统的网络时&#xff0c;这…

【C/C++】memcpy函数的使用

零.导言 当我们学习了strcpy和strncpy函数后&#xff0c;也许会疑惑整形数组要如何拷贝&#xff0c;而今天我将讲解的memcpy函数便可以拷贝整形数组。 一.memcpy函数的使用 memcpy函数是一种C语言内存函数&#xff0c;可以按字节拷贝任意类型的数组&#xff0c;比如整形数组。 …

Matlab轻松烟雾检测

小编经验分享&#xff1a;如何使用Matlab进行烟雾检测 烟雾检测是一项重要的安全技术&#xff0c;它可以帮助我们及时发现火灾风险并采取相应的措施。在这篇文章中&#xff0c;小编将和大家分享如何使用Matlab进行烟雾检测的经验。希望这些经验对大家在实际应用中能够有所帮助…

【Linux系统编程】基础IO--内存文件

目录 前言&#xff1a; stdin&& stdout && stderr Linux文件操作之系统调用 打开文件 关闭文件 写入文件 读取文件 文件描述符fd fd的分配规则与重定向原理 理解用户级缓冲区 前言&#xff1a; 在往期博客《Linux基础概念》中&#xff0c;我们聊…

Python urllib

Python urllib 库用于操作网页 URL&#xff0c;并对网页的内容进行抓取处理。 本文主要介绍 Python3 的 urllib。 urllib 包 包含以下几个模块&#xff1a; urllib.request - 打开和读取 URL。urllib.error - 包含 urllib.request 抛出的异常。urllib.parse - 解析 URL。url…

数据结构 —— 红黑树

目录 1. 初识红黑树 1.1 红黑树的概念 1.2 红⿊树的规则 1.3 红黑树如何确保最长路径不超过最短路径的2倍 1.4 红黑树的效率:O(logN) 2. 红黑树的实现 2.1 红黑树的基础结构框架 2.2 红黑树的插⼊ 2.2.1 情况1&#xff1a;变色 2.2.2 情况2&#xff1a;单旋变色 2.2…

丹摩征文活动|AIGC实践-基于丹摩算力和CogVideoX-2b实现文生视频

一、CogVideoX简介 CogVideoX 是由智谱AI开源的新一代视频生成模型&#xff0c;属于大型语言模型在多模态应用中的重要突破。CogVideoX-2b 版本在参数规模和推理速度上进行了优化&#xff0c;支持视频从文本描述生成&#xff0c;并进一步提升了视频的分辨率和流畅度。相比于上…

麦当劳自助点餐机——实现

餐厅自助点餐优点 1. 降低服务成本&#xff1a; - 减少了对服务员数量的需求&#xff0c;降低了人力成本。 - 减轻了服务员的工作负担&#xff0c;使其能够更专注于提供优质的服务&#xff0c;如解决顾客的特殊需求和处理复杂问题。 2. 提升点餐效率和准确性&#xf…