github action 与自动化部署
前言
github action 一直都是自动化部署的引领者,今天就介绍一下如何它部署咱们的网站和服务
服务器生成ssh密钥
通过终端(finalshell、xshell)登录到您的 linux 服务器上,执行以下命令
ssh-keygen -m PEM -t rsa -b 4096
执行完成后,默认情况下,会在 root/.ssh内生成公钥(id_rsa.pub)和私钥(id_rsa)两个文件。
copy公钥到authorized_keys
复制 公钥文件 id_rsa.pub内的全部内容 到 同级目录下的 authorized_keys中
copy私钥到github variable
进入 github 的项目仓库里,进入settings>Secrets and variables>Actions,创建这 3 个变量

前两个分别是 你要部署到的目标服务器的 ip 和 (ssh)端口,你根据自己的服务器信息填写进去即可,
最后一个 SSH_PRIVATE_KEY则是你上一步在目标服务器中生成的 私钥文件 id_rsa的内容,将其内容拷贝进去(重点)。
设置目标服务器的ssh允许使用密钥登录
登录服务器,编辑 /etc/ssh/sshd_config
PermitRootLogin yes # 开启root账号
PubkeyAuthentication yes # 允许使用密钥登录(重点)
最后执行重启 sshd 服务命令 systemctl restart sshd
仓库项目配置
需要为项目增加工作流配置文件
不同的项目,可能不仅相同
vue&react等框架型前端项目
vue-demo/.github/workflows/webpack.yml
name: NodeJS with Webpack
on:
push:
branches: ["main"]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 迁出代码
uses: actions/checkout@main
- name: 切换为pnpm
uses: pnpm/action-setup@v4
with:
version: 9
- name: 安装Node
uses: actions/setup-node@main
with:
node-version: "20.x"
- name: 安装依赖
run: pnpm i
- name: 打包
run: npm run build
- name: 发布到服务器
uses: easingthemes/ssh-deploy@main
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-avzr --delete --mkpath"
SOURCE: "dist/"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_PORT: ${{ secrets.REMOTE_PORT }}
REMOTE_USER: root
TARGET: /home/apps-root/my-website
其实核心在 发布到服务器 这一步,这一步主要是使用到了 ssh-deploy这个插件!
常见问题
Permission denied
这一般就是没有按照如上步骤导致,比如没有复制公钥文件到 authorized_keys中,或者没有给 sshd 放开允许密钥方式登录
> Run easingthemes/ssh-deploy@main
[DIR] Creating /home/runner/.ssh dir in workspace root
[DIR] dir created.
[FILE] writing /home/runner/.ssh/known_hosts file ... 0
[SSH] known_hosts file ensured /home/runner/.ssh
[DIR] /home/runner/.ssh dir exist
[FILE] writing /home/runner/.ssh/deploy_key_root_1743137849750 file ... 3244
[SSH] key added to `.ssh` dir /home/runner/.ssh deploy_key_root_1743137849750
rsync version 3.2.7 protocol version 31
Copyright (C) 1996-20*** by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, symlinks, symtimes, hardlinks, hardlink-specials,
hardlink-symlinks, IPv6, atimes, batchfiles, inplace, append, ACLs,
xattrs, optional secluded-args, iconv, prealloc, stop-at, no crtimes
Optimizations:
SIMD-roll, no asm-roll, openssl-crypto, no asm-MD5
Checksum list:
xxh128 xxh3 xxh64 (xxhash) md5 md4 sha1 none
Compress list:
zstd lz4 zlibx zlib none
Daemon auth list:
sha512 sha256 sha1 md5 md4
rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.
️ [CLI] Rsync exists
[Rsync] Starting Rsync Action: /home/runner/work/my-website/my-website/dist/ to root@***:/home/apps-root/my-website
[Rsync] excluding folders
Warning: Permanently added '***' (ED25519) to the list of known hosts.
Permission denied, please try again.
Permission denied, please try again.
root@***: Permission denied (gssapi-keyex,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(232) [sender=3.2.7]
[Rsync] error:
Error: rsync exited with code 255
at ChildProcess.<anonymous> (/home/runner/work/_actions/easingthemes/ssh-deploy/main/dist/index.js:2:2603)
at ChildProcess.emit (node:events:524:28)
at ChildProcess._handle.onexit (node:internal/child_process:293:12) {
code: 255
}
[Rsync] stderr:
Warning: Permanently added '***' (ED25519) to the list of known hosts.
Permission denied, please try again.
Permission denied, please try again.
root@***: Permission denied (gssapi-keyex,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(232) [sender=3.2.7]
️ [Rsync] stdout:
[Rsync] command:
================================================================
================================================================
rsync /home/runner/work/my-website/my-website/dist/ root@***:/home/apps-root/my-website --rsh "ssh -p *** -i /home/runner/.ssh/deploy_key_root_1743137849750 -o StrictHostKeyChecking=no" --recursive --exclude= -avzr --delete --mkpath
Error: R] rsync exited with code 255
Warning: Permanently added '***' (ED25519) to the list of known hosts.
Permission denied, please try again.
Permission denied, please try again.
root@***: Permission denied (gssapi-keyex,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(232) [sender=3.2.7]
github action 与自动化部署的更多相关文章
- 使用GitHub Actions实现自动化部署
前言 大家在工作中想必都是通过自动化部署来进行前端项目的部署的,也就是我们在开发完某个需求时,我们只需要将代码推送到某个分支,然后就能自动完成部署,我们一般不用关心项目是如何build以及如何depl ...
- 云原生之旅 - 13)基于 Github Action 的自动化流水线
前言 GItHub Actions是一个持续集成和持续交付的平台,能够让你自动化你的编译.测试和部署流程.GitHub 提供 Linux.Windows 和 macOS 虚拟机来运行您的工作流程,或者 ...
- 利用 Github 网络钩子实现自动化部署
GitHub 的网络钩子(webhook)功能,可以很方便的实现自动化部署.本文记录了使用 Node.js 的开发部署过程,当项目的 master 分支被推时,将在服务器进行自动部署 添加网路钩子 在 ...
- 编写自己的 GitHub Action,体验自动化部署
本文将介绍如何使用 GitHub Actions 部署前端静态页面,以及如何自己创建一个 Docker 容器 Action. 简介 Actions GitHub Actions 是 GitHub 官方 ...
- 使用 GitHub / GitLab 的 Webhooks 进行网站自动化部署
老早就想写这个话题了,今天正好有机会研究了一下 git 的自动化部署.最终做到的效果就是,每当有新的 commit push 到 master 分支的时候,就自动在测试/生产服务器上进行 git pu ...
- GitHub Action一键部署配置,值得拥有
最近由于自己的个人应用增加,每次都需要在服务器手动发布,觉得特别麻烦,所以想通过代码控制自动发布,直接选择了GitHub Action. GitHub Action持续集成服务,目前已经免费开放使用, ...
- 使用 Github Action 进行前端自动化发布
前言 说起自动化,无论是在公司还是我们个人的项目中,都会用到或者编写一些工具来帮助我们去处理琐碎重复的工作,以节约时间提升效率,尤其是我们做前端开发会涉及诸如构建.部署.单元测试等这些开发工作流中重复 ...
- Azure Terraform(九)GitHub Actions 实现 Infra 资源的自动化部署
思路浅析 使用 Terraform Code 部署 Azure 基础设施资源是特别受欢迎的,我曾经有写文章分享过利用 Azure DevOps 自动部署 Terraform Code 所描述的 Azu ...
- node项目自动化部署--基于Jenkins,Docker,Github(1)安装Jenkins
前言 每次项目代码更新后都要重新部署,如果只有一台服务器还好. 但是如果是分布式系统,动不动就很多台服务器,所以代码的自动部署就显得十分重要了. 这里用几篇文章来记录一下如何使用Jenkins,Doc ...
- 博客 | 基于Travis CI实现Hexo在Github和Coding的同步自动化部署
文章目录 完成Hexo主题安装和配置 基于Travis CI实现同步部署 参考内容 相关链接 待补充 完成Hexo主题安装和配置 如果您还没有安装Hexo环境,请参考Hexo文档安装,也给出这样两篇博 ...
随机推荐
- 使用Python计算汉密尔顿路径
引言 在图论中,汉密尔顿路径(Hamiltonian Path)是一个经典问题,它在很多实际应用中都有广泛的应用,如网络路由.旅行商问题等.今天,我们将一起探讨如何使用 Python 来计算汉密尔顿路 ...
- 在AI大爆发的背景下,企业管理软件有什么冲击
今天与同行开会提到在AI大爆发的背景下,未来企业管理软件究竟有什么冲击? 我和同事对此问题进行了探讨,一些拙见,与大家分享.先直接说观点:在未来的5到10年,制造业的管理软件市场将几乎消失.下面我来聊 ...
- asp.net里cookie、session进一步理解
参照: session+cookie简单讲解以及持久化登录实现_session实现用户登录_AkagiSenpai的博客-CSDN博客 sessionID和cookie - 哈哈呵h - 博客园 (c ...
- python-docx设置标题颜色
from docx import Document from docx.enum.text import WD_PARAGRAPH_ALIGNMENT from docx.shared import ...
- SpringBoot整合JDBC--数据源
目录 1 新建SpringBoot项目 1.1 导入pom依赖文件 2 通过@PropertySource注解读取配置文件 2.1 新建jdbc.properties文件 2.2 新建配置类,加载配置 ...
- 【HUST】网安|计算机网络|计算机网络自顶向下方法(原书第7版)第三章部分习题答案
参考:英文版的原答案. 答案放gitee了,自取. 3-P18. 3.4.4 节我们学习的一般性 SR 协议中,只要报文可用(如果报文在窗口中) ,发送方就会不等待确认而传输报文.假设现在我们要求一个 ...
- Web前端入门第 48 问:纯 CSS 使用 column 属性实现瀑布流布局
什么是瀑布流? 看一张图,以下图片来源于花瓣网截图: 如上图所示,瀑布流就是让内容按列显示,自动填充空白. 使用 column 实现瀑布流 源码: <div class="masonr ...
- 队列-Python 实现
用 Python 来实现 队列和双端队列, 直接上代码理解即可. 队列蛮好理解的, 就是模拟咱生活中的排队. 先进, 先出嘛. """ 队列 - ADT 队列 Queue ...
- linux中部署自己的系统内核
1.计算机是如何将系统起起来的?-- PC机的引导流程 PC机BIOS固件是固化在PC机主板上的ROM芯片中,断电也能保存,PC机上电后的第一条指令就是在BIOS固件中,它负责检测和初始化CPU.内存 ...
- 通过tushare获取k线数据
tushare中get_k_date接口主要目的是获取k线数据,该接口融合了get_hist_data和get_h_data两个接口的功能,即能方便获取日周月的低频数据,也可以获取5.15.30和60 ...