使用 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.mzph.cn/diannao/59981.shtml

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

相关文章

反汇编命令学习以及分析越界和空指针问题

1,反汇编命令行 (1)move 语法格式:mov destination, source例如: mov eax,0x1 ;将立即数1复制到eax寄存器。立即数到寄存器mov [ebx],eax ;将eax寄存器的值复制到ebx寄存器指向的内存地址,寄存器到内存mov eax,ebx ;将ebx寄存器的值复制到eax,寄存器到寄存器mov ea…

冒泡选择法(c基础)

适合对象c语言初学者。 冒泡选择法 作用对一个数组进行排序。&#xff08;介绍一下数组(c基础)(详细版)-CSDN博客&#xff09; 核心要点 1: 数组元素个数 sz 2: 比较后的交换。 核心思路 进行&#xff08;sz - 1&#xff09;趟&#xff0c;每一趟把最大数的放到末尾。其…

Shell脚本语法随笔

文章目录 1、编写 Shell 脚本文件1_脚本结构2_示例3_执行脚本 2、变量的定义与使用1_定义变量2_只读变量3_接受用户输入4_删除变量名5_变量作用域 3、字符串处理1_双引号 vs 单引号2_示例 4、条件判断&运算符1_数值比较2_case示例3_算数运算符4_逻辑运算符5_字符串运算符6_…

量子计算及其在密码学中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 量子计算及其在密码学中的应用 量子计算及其在密码学中的应用 量子计算及其在密码学中的应用 引言 量子计算概述 定义与原理 发展…

【论文笔记】Wings: Learning Multimodal LLMs without Text-only Forgetting

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Wings: Learning Multimod…

数据类型底层

计算机的工作原理 CPU 找数据 数据通过地址信息来标记 高级语言:在内存中"分配"空间用变量来标识 所以变量一定是存在地址的 例如: int a10; //a就是变量名用来对地址进行标识 0x100对这个地址标识必备常识:8bit1byte 常见的数据类型: char short int long //…

【Leecode】Leecode刷题之路第45天之跳跃游戏II

题目出处 45-跳跃游戏II-题目出处 题目描述 个人解法 思路&#xff1a; todo代码示例&#xff1a;&#xff08;Java&#xff09; todo复杂度分析 todo官方解法 45-跳跃游戏II-官方解法 这道题是典型的贪心算法&#xff0c;通过局部最优解得到全局最优解。以下两种方法都是…

【Allure】mac下环境配置

安装 1.Mac 可以使用 brew 安装 allure&#xff0c;安装命令如下 brew install allure 2.与 pytest 结合需要安装 allure-pytest 插件&#xff1a; pip install allure-pytest3.查看allure版本 allure --version

conan2 c/c++包管理菜鸟入门

以官网教程为例。 首先下载官网示例&#xff1a; git clone https://github.com/conan-io/examples2.git cd examples2/tutorial/consuming_packages/simple_cmake_project 然后进入该示例教程 先 conan profile detect 检测一下当前编译器环境是否配置&#xff0c; 然后…

20221428欧阳慕蓉 第九周预习报告

AI对学习内容的总结 第九章的内容主要围绕进程和系统调用的概念&#xff0c;以及如何在C程序中使用这些概念来创建和管理进程。以下是本章的主要内容总结&#xff1a; 系统调用&#xff08;System Calls&#xff09;&#xff1a; 系统调用是C程序用来与操作系统内核交互的函数…

C#语言发展历史

前言 C#是微软公司在2000年6月发布的一种新的编程语言&#xff0c;主要由安德斯海尔斯伯格&#xff08;Anders Hejlsberg&#xff09;主持开发&#xff0c;它是第一个面向组件的编程语言&#xff0c;其源码会编译成msil再运行。 C#最初有个更酷的名字&#xff0c;叫做COOL。微软…

证件照尺寸168宽240高,如何手机自拍更换蓝底

在提供学籍照片及一些社会化考试报名时&#xff0c;会要求我们提供尺寸为168*240像素的电子版证件照&#xff0c;本文将介绍如何使用“报名电子照助手”&#xff0c;借助手机拍照功能完成证件照的拍摄和背景更换&#xff0c;特别是如何将照片尺寸调整为168像素宽和240像素高&am…

Kafka生产者如何提高吞吐量?

1、batch.size&#xff1a;批次大小&#xff0c;默认16k 2、linger.ms&#xff1a;等待时间&#xff0c;修改为5-100ms 3、compression.type&#xff1a;压缩snappy 4、 RecordAccumulator&#xff1a;缓冲区大小&#xff0c;修改为64m 测试代码&#xff1a; package com.bigd…

【开源免费】基于SpringBoot+Vue.JS水果购物网站(JAVA毕业设计)

博主说明&#xff1a;本文项目编号 T 065 &#xff0c;文末自助获取源码 \color{red}{T065&#xff0c;文末自助获取源码} T065&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

OAK相机:纯视觉SLAM在夜晚的应用

哈喽&#xff0c;OAK的朋友们&#xff0c;大家好啊&#xff0c;今天这个视频主要想分享一下袁博士团队用我们的OAK相机产出的新成果 在去年过山车SLAM的演示中&#xff0c;袁博士团队就展示了纯视觉SLAM在完全黑暗的环境中的极高鲁棒性。 现在袁博士团队进一步挖掘了纯视觉的潜…

Linux下通过sqlplus连Oracle提示字符是乱码▒▒▒[

先参考https://www.cnblogs.com/wrencai/articles/4374451.html 理解下Oracle编码字符集的概念 如下图,刚开始连上是软吗▒▒▒[ 执行export NLS_LANGJAPANESE_JAPAN.AL32UTF8 (这个仅在当前会话起作用)如果好了,说明字符集是这个,不行在尝试别的字符集 如果要永久设置 vim …

多个NVR同时管理EasyNVR多品牌NVR管理工具/设备:IP常见问题解决方案

随着视频监控技术的不断发展&#xff0c;NVR&#xff08;网络视频录像机&#xff09;已经成为现代安防系统的重要组成部分。而为了更高效地管理多个品牌的NVR设备&#xff0c;EasyNVR这一多品牌NVR管理工具应运而生。然而&#xff0c;在实际使用过程中&#xff0c;尤其是在多个…

【C++】C++的单例模式、跟踪内存分配的简单方法

二十四、C的单例模式、跟踪内存分配的简单方法 1、C的单例模式 本小标题不是讨论C的语言特性&#xff0c;而是一种设计模式&#xff0c;用于确保一个类在任何情况下都只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。即C的单例模式。这种模式常用于资源管理&…

掌握鸿蒙生态的崛起之机:开发者的挑战与机遇

掌握鸿蒙生态的崛起之机&#xff1a;开发者的挑战与机遇 引言 在智能设备领域&#xff0c;鸿蒙系统&#xff08;HarmonyOS&#xff09;正迅速崛起&#xff0c;与安卓、iOS形成三足鼎立之势。作为一名开发者&#xff0c;如何抓住这一机遇&#xff0c;解决开发中的挑战&#xf…

任务中心全新升级,新增分享接口文档功能,MeterSphere开源持续测试工具v3.4版本发布

2024年11月5日&#xff0c;MeterSphere开源持续测试工具正式发布v3.4版本。 在这一版本中&#xff0c;系统设置方面&#xff0c;任务中心支持实时查看系统即时任务与系统后台任务&#xff1b;接口测试方面&#xff0c;新增接口文档分享功能、接口场景导入导出功能&#xff0c;…