使用 GitHub Action 进行 SSH 部署
2024-09-13 03:58:55作者:羿妍玫Ivan
项目介绍
ssh-deploy 是一个 GitHub Action,用于通过 rsync 和 SSH 部署代码。它支持在 rsync 之前或之后执行远程脚本,并且使用 NodeJS 版本比简单的 Docker 版本快一分钟以上。这个 Action 通常在构建/测试步骤之后使用,将可部署的代码(例如 dist 目录)从 GITHUB_WORKSPACE 部署到服务器上的目标目录。
项目快速启动
1. 克隆项目
首先,克隆 ssh-deploy 项目到本地:
git clone https://github.com/easingthemes/ssh-deploy.git
cd ssh-deploy
2. 配置 GitHub Action
在你的 GitHub 仓库中,创建一个新的 GitHub Action 配置文件 .github/workflows/deploy.yml,并添加以下内容:
name: Deploy to Staging server
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: '16.x'
- name: Install npm dependencies
run: npm install
- name: Run build task
run: npm run build --if-present
- name: Deploy to Server
uses: easingthemes/ssh-deploy@main
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-rlgoDzvc -i --delete"
SOURCE: "dist/"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: ${{ secrets.REMOTE_TARGET }}
EXCLUDE: "/dist/ /node_modules/"
SCRIPT_BEFORE: |
whoami
ls -al
SCRIPT_AFTER: |
whoami
ls -al
echo $RSYNC_STDOUT
3. 配置 Secrets
在 GitHub 仓库的 Settings -> Secrets 中添加以下 Secrets:
SSH_PRIVATE_KEY: 你的 SSH 私钥REMOTE_HOST: 远程服务器地址REMOTE_USER: 远程服务器用户名REMOTE_TARGET: 远程服务器目标目录
4. 提交并触发部署
提交并推送你的更改到 main 分支,GitHub Action 将自动触发部署流程。
应用案例和最佳实践
应用案例
ssh-deploy 适用于需要频繁部署代码到远程服务器的场景,例如:
- Web 应用程序的持续集成和部署
- 静态网站的自动部署
- 微服务的自动化部署
最佳实践
- 使用 SSH 密钥对: 为了提高安全性,建议使用 SSH 密钥对进行身份验证,而不是密码。
- 配置 rsync 参数: 根据你的需求配置
ARGS参数,以确保 rsync 的行为符合预期。 - 脚本执行: 在
SCRIPT_BEFORE和SCRIPT_AFTER中添加必要的脚本,以确保在部署前后执行必要的操作。
典型生态项目
ssh-deploy 可以与其他 GitHub Actions 和工具结合使用,形成完整的 CI/CD 流水线。以下是一些典型的生态项目:
- actions/checkout: 用于检出代码库。
- actions/setup-node: 用于设置 Node.js 环境。
- actions/cache: 用于缓存 npm 依赖,加快构建速度。
- actions/upload-artifact: 用于在多个步骤之间共享构建产物。
通过结合这些工具,你可以构建一个高效、自动化的部署流程。
登录后查看全文
热门项目推荐
相关项目推荐
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0238- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
electerm开源终端/ssh/telnet/serialport/RDP/VNC/Spice/sftp/ftp客户端(linux, mac, win)JavaScript00
项目优选
收起
deepin linux kernel
C
27
13
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
632
4.16 K
Ascend Extension for PyTorch
Python
471
567
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
932
835
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.51 K
861
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
383
266
暂无简介
Dart
880
210
昇腾LLM分布式训练框架
Python
138
162
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
123
188
Oohos_react_native
React Native鸿蒙化仓库
JavaScript
327
382