GitHub Action 通过SSH 自动部署到云服务器上
准备
正式开始之前,你需要掌握 GitHub Action 的基础语法:
- workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
- name: 工作流的名称。
- on: 指定次工作流的触发器。push 表示只要有人将更改推送到仓库就会触发工作流运行。(点击这里了解如何指定特定分支,路径或标签)
- jobs: 将工作流运行的所有作业组合到一起。
- build-and-deploy: 定义的作业的名称。
- runs-on: 将作业配置为在最新版本的 Ubuntu Linux 上运行。这意味着作业将在 GitHub 托管的新虚拟机上执行。有关使用其他运行器的语法示例,请参阅 GitHub 操作的工作流语法。
- steps: 将作业中运行的所有步骤组合在一起。嵌套在此部分下的每个项都是一个单独的操作或 shell 脚本。
- uses: 指定需要运行的 action。
- env: 指定运行 action 时需要用到的环境变量的值。
一、密钥准备
为了方便运行GitHub Actions时登录GitHub账号,我们使用SSH方式登录。就是要把设备的私钥交给GitHub Actions,公钥交给GitHub,需要去Settings里去配置。
使用ssh-keygen生成一组公私秘钥对
ssh-keygen -t rsa -C "Github 的邮箱地址"如 ssh-keygen -t rsa -C "123@gmail.com"
- 配置公钥,配置路径:github你的首页–>Settings–>SSH and GPG keys
- 配置私钥,项目私有仓库的Settings->Secrets里添加私钥,名称为PRIVATE_KEY

二、新建项目仓库
在仓库的Actions选项卡下点击新建.github/workflow/blank.yml,名称默认或者自定义修改,配置如下:
# This is a basic workflow to help you get started with Actionsname: Deploy My Serveron:push:branches: [ master ]# Allows you to run this workflow manually from the Actions tabworkflow_dispatch:# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:# This workflow contains a single job called "build"build:# The type of runner that the job will run onruns-on: ubuntu-latest# Steps represent a sequence of tasks that will be executed as part of the jobsteps:# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it- uses: actions/checkout@v2- name: use Node.js# 使用action库 actions/setup-node安装nodeuses: actions/setup-node@v1with:node-version: 16.x# 安装依赖- name: npm installrun: npm install# 打包- name: npm buildrun: npm run build# 部署到服务器- name: deployuses: easingthemes/ssh-deploy@v2.1.1env:# 本地.ssh文件下的私钥id_rsa,存在secrets的PRIVATE_KEY中SSH_PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}# 复制操作的参数。"-avzr --delete"意味部署时清空服务器目标目录下的文件ARGS: "-avzr --delete" # 源目录,相对于$GITHUB_WORKSPACE根目录的路径SOURCE: "./public/"# 服务器域名/IPREMOTE_HOST: ${{ secrets.HOST }}# 服务器默认用户名为rootREMOTE_USER: "root"# 目标目录TARGET: '/usr/local/xxx/dist'# 排除目录EXCLUDE: "/node_modules/"
参数项:
- 部署到云服务器上需要用到 easingthemes/ssh-deploy@main
- SSH_PRIVATE_KEY: 是在服务器上生成的 SSH 私钥,可以使用命令 ssh-keygen -m PEM -t rsa -b 4096 生成,并配置到仓库的 Secrets 中。
- ARGS: 默认即可。
- SOURCE: 需要上传到服务器上的文件的目录。
- REMOTE_HOST: 服务器公网 IP 或域名。
- REMOTE_USER: 服务器 SSH 用户名。
- TARGET: 文件上传到服务器上保存的目录。
- EXCLUDE: 可指定部分文件不上传。
文件同步原理请参考rsync教程
三、push分支到仓库
push内容到仓库后,Action会自动执行工作流,此时你再看看你配置的TARGET服务器目录,就会发现文件dist被拷贝过去了

相关文章:
GitHub Action 通过SSH 自动部署到云服务器上
准备 正式开始之前,你需要掌握 GitHub Action 的基础语法: workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。name: 工作流的名称。on: 指定次工作流的触发器。push 表示只要有人将更改推…...
【AOP系列】7.数据校验
在Java中,我们可以使用Spring AOP(面向切面编程)和自定义注解来做数据校验。以下是一个简单的示例: 首先,我们创建一个自定义注解,用于标记需要进行数据校验的方法: import java.lang.annotat…...
黑马JVM总结(三十七)
(1)synchronized-轻量级锁-无竞争 (2)synchronized-轻量级锁-锁膨胀 重量级锁就是我们前面介绍过的Monitor enter (3)synchronized-重量级锁-自旋 (4)synchronized-偏向锁 轻量级锁…...
企业如何通过媒体宣传扩大自身影响力
传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 企业可以通过媒体宣传来扩大自身的影响力。可以通过以下的方法。 1. 制定媒体宣传战略: - 首先,制定一份清晰的媒体宣传战略,明确您的宣传目标、目标…...
处理vue直接引入图片地址时显示不出来的问题 src=“[object Module]“
在webpack中使用vue-loader编译template之后,发现图片加载不出来了,开发人员工具中显示src“[object Module]” 这是因为当vue-loader编译template块之后,会将所有的资源url转换为webpack模块请求 这是因为vue使用的是commonjs语法规范&…...
vue3 v-md-editor markdown编辑器(VMdEditor)和预览组件(VMdPreview )的使用
vue3 v-md-editor markdown编辑器和预览组件的使用 概述安装支持vue3版本使用1.使用markdown编辑器 VMdEditor2.markdown文本格式前端渲染 VMdPreview 例子效果代码部分 完整代码 概述 v-md-editor 是基于 Vue 开发的 markdown 编辑器组件 轻量版编辑器 轻量版编辑器左侧编辑…...
java正则表达式 及应用场景爬虫,捕获分组非捕获分组
正则表达式 通常用于校验 比如说qq号 看输入的是否符合规则就可以用这个 public class regex {public static void main(String[] args) {//正则表达式判断qq号是否正确//规则 6位及20位以内 0不能再开头 必须全是数子String qq"1234567890";System.out.println(qq…...
基于 Debian 稳定分支发行版的Zephix 7 发布
Zephix 是一个基于 Debian 稳定版的实时 Linux 操作系统。它可以完全从可移动媒介上运行,而不触及用户系统磁盘上存储的任何文件。 Zephix 是一个基于 Debian 稳定版的实时 Linux 操作系统。它可以完全从可移动媒介上运行,而不触及用户系统磁盘上存储的…...
MBR20100CT-ASEMI肖特基MBR20100CT参数、规格、尺寸
编辑:ll MBR20100CT-ASEMI肖特基MBR20100CT参数、规格、尺寸 型号:MBR20100CT 品牌:ASEMI 芯片个数:2 封装:TO-220 恢复时间:>50ns 工作温度:-65C~175C 浪涌电流:…...
修炼k8s+flink+hdfs+dlink(五:安装dockers,cri-docker,harbor仓库)
一:安装docker。(所有服务器都要安装) 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2添加软件源信息 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/cent…...
github: kex_exchange_identification: Connection closed by remote host
问题描述 (base) ➜ test git:(dev) git pull kex_exchange_identification: Connection closed by remote host Connection closed by 192.30.255.113 port 22 致命错误:无法读取远程仓库。解决方案 参照下边文档 https://docs.github.com/en/authentication/tr…...
AWS香港Web3方案日,防御云安全实践案例受关注
9月26日,AWS合作伙伴之Web3解决方案日在香港举办。来自人工智能、Web3等领域的创业公司、技术专家、风险投资商,就元宇宙时代未来发展进行了深入交流。现场展示了顶象防御云在金融与Web3领域的安全实践案例。 Web3为互联网体系架构的一个整体演进和升级&…...
QT 集成MQTT过程
1 编译库文件 Qt QtMqtt官方源码编译教程_“qtmqtt/qmqttglobal.h”: no such file or directory-CSDN博客 2 参考文献 Qt开发MQTT(一) 之Qt官方Qt MQTT-CSDN博客 QTMQTT 使用MQTT官方库_qt mqtt 官方库-CSDN博客...
GeoServer改造Springboot启动五(解决接口返回xml而不是json)
请求接口返回的是xml,而不是我们常用的json,问题呈现如下图 40 图 40请求接口返回XML 在RequestMapping注解上增加produces {MediaType.APPLICATION_JSON_UTF8_VALUE} 图 41增加produces...
在unity中给游戏物体一个标记
标记 方便识别! 标签(Tag) 引擎内部会对物体的标签建立了索引。通过标签查找物体,要比通过名字查找物体快得多。标签最多只能有 32个。前几个是常用标签,具有特定含义,例如玩家( Player)、主摄摄像机 (Mai…...
【黑马程序员】机器学习
(一)机器学习概述 一、机器学习算法分类 1、监督学习: (1)目标值是类别:分类问题 k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归 (2)目标值是连续型的数据:回归…...
flutter card 使用示例
Card组件是卡片组件,内容可以由列表的widget组成,Card组件具有阴影圆角的功能。 常用属性: 属性 说明 margin 外边距elevation 阴影值的深度child 子元素 import package:flutter/material.dart;void main() > runApp(MyApp());class M…...
推荐算法:是否对用户判断能力有影响!!!
首先认识几种常见的推荐算法:推荐算法是一种在信息推送和个性化服务领域常用的技术。它通过分析用户的兴趣、行为和偏好,提供个性化的建议和推荐,以满足用户的需求。以下是对几种常见推荐算法的重新排版,并探讨了它们的作用、影响…...
【OpenVINO】OpenVINO C# API 常用 API 详解与演示
OpenVINO C# API 常用 API 详解与演示 1 安装OpenVINO C# API2 导入程序集 3 初始化OpenVINO 运行时内核4 加载并获取模型信息4.1 加载模型4.2 获取模型信息 5 编译模型并创建推理请求6 张量Tensor6.1 张量的获取与设置6.2 张量的信息获取与设置 7 加载推理数据7.1 获取输入张量…...
django无法导入第三方库
引子 有的人可能会很困惑,为什么自己在pip中安装了某个包,但是在django中死活无法导入。 在cmd中能够导入。 启动django,总是无法导入。 本文将会用一分钟解决你的困惑。 正文 那么本文以上述的第三方库dj_db_conn_pool为例,…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章 摘要: 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...
