跳至主要內容

webhooks 自动部署git项目

程序员王天大约 5 分钟

❌ 经过不断尝试,果断放弃webhoooks!不是踩坑太多,而是最终配好后执行太耗时。
💡 自动部署,本质是在服务器执行 git clone ,因受服务器资资源限制、此过程会非常耗时,我20多兆的仓库,整个过程需要半个小时。
✔️过程太慢还浪费服务器宽度,还不如本地写个脚本上传算了

:::success
🔥对webhooks不刚兴趣可直接看最后一章节,通过ssh2-sftp-client 模块实现上传服务器
:::

webhoooks 自动部署 git项目

有什么用?
更直观点讲,有了webhooks,可以实现自动化部署,无需每次手动上传服务器啦
gitee 和 github中都有此功能
1.自动化shell脚本
2.服务端实现
3.配置github webhooks

宝塔
配置环境
宝塔默认是安装好git的
配置公钥
生成 Git 生产环境下的公钥的命令如下所示:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

这个命令将生成一个 RSA 类型的 SSH 密钥对,包括一个私钥和一个公钥。请注意替换 "your_email@example.com" 为你自己的电子邮件地址。
回车三次
生成的密钥对默认存储在用户的 ~/.ssh 目录下,文件名为 id_rsa(私钥)和 id_rsa.pub(公钥)。

生成公钥后,你可以将公钥内容复制并添加到 Git 托管服务(如 GitHub、GitLab 或 Bitbucket)的账户设置中,以便在进行远程操作时进行身份验证和访问控制。
这里添加到github中
首次需配置git
在宝塔面板的终端设置git

git config --global user.name "17638567073@163.com"
git config --global user.email "17638567073@163.com"
git config --global credential.helper store //会生成.gitconfig 的文件
cat .gitconfig   //如果报错: No such file or directory,就用下一行的代码
cat ~/.gitconfig  //显示内容

node实现项目-自动部署

ssh2-sftp-client

ssh2-sftp-client 模块是一个用于在 Node.js 环境中进行 SSH 文件传输协议(SFTP)操作的库
以使用这个模块来实现远程文件的上传、下载或其他文件操作任务。

SSH 文件上传适用于通过 SSH 协议在本地计算机和远程服务器之间建立安全连接进行文件传输

完整上传代码

// ssh2-sftp-client 亲测好用,完全没毛病!
let Client = require('ssh2-sftp-client');
function put(localPath, romotePath) {
    let sftp = new Client();
    sftp.connect({
        host: 'xxx', // 服务器 IP
        port: '22',
        username: "xxx", // 服务器登录用户名
            password: "xxx", // 服务器登录密码
    }).then(() => {
        // 上传文件
        // return sftp.fastPut(localPath, romotePath);
        console.log('上传文件中')
        // 下载文件
        return sftp.uploadDir(localPath, romotePath);
    }).then((data) => {
        // console.log(localPath + "上传完成");
        console.log(data , "上传完成");
        sftp.end();
    }).catch((err) => {
        console.log(err, 'catch error');
    });
}

let srcPath = '/www/wwwroot/itwangtian.com',
    // localPath = path.join(__dirname, 'test.txt'),
    romotePath = './src/.vuepress/dist';

// 上传文件
// 第一个参数是需要上传的文件的本地路径;第二个参数是服务器存放的地址
// put(localPath, romotePath);
// 下载文件
// 第一个参数是需要下载的文件在服务器存放的地址;第二个参数是本地存放的路径
put( romotePath,srcPath);

 

npm 执行多个命令行

场景

这两天用vuepres搭建知识库博客,每次部署到服务器上,都需要执行多个命令行,分别如下:

  1. npm run buld
  2. npm run upbt (运行ssl上传脚本)

在上传代码到服务器前,还需手动打包项目,虽然说多执行一个步骤,但是作为一个程序员来说,最大的兴趣就是将重复的事情自动化。
怎么实现呢?
推荐使用 npm-run-all

npm-run-all

npm-run-all 是一个 npm 包,用于在 package.json 的 scripts 中并行或顺序执行多个命令。它提供了灵活的命令组合和执行方式。

基本使用

先安装 npm-run-all

npm install -g npm-run-all

咱们可以按照以下步骤来使用 npm-run-all:

  1. 首先,在你的项目目录下,确保你已经有一个 package.json 文件。如果没有,请先使用以下命令初始化一个新的 package.json 文件:
npm init
  1. 在 package.json 文件中的 scripts 部分,配置你要执行的命令。你可以使用 npm-run-all 的命令格式,如下:
{
  "scripts": {
    "command1": "your-command-1",
      "command2": "your-command-2",
      "build": "npm-run-all command1 command2"
  }
}

在上面的例子中,command1 和 command2 分别代表你要执行的两个命令,而 build 则是一个包装命令,用于顺序执行 command1 和 command2。

  1. 接下来,你可以打开终端并在项目目录下执行以下命令:
npm run build

这会触发 npm 执行 package.json 中的 build 命令,即 npm-run-all command1 command2。此时,npm-run-all 将按照顺序依次执行 command1 和 command2。

更多用法

  • --parallel:并行运行 npm 脚本。可以将多个脚本命令以空格分隔传递给该参数,npm-run-all 将同时运行它们。示例:npm-run-all --parallel script1 script2 script3
  • --serial:按顺序运行 npm 脚本。可以将多个脚本命令以空格分隔传递给该参数,npm-run-all 将按照顺序运行它们。示例:npm-run-all --serial script1 script2 script3
  • --continue-on-error:即使前一个脚本命令执行失败,也继续执行后续的脚本。示例:npm-run-all --parallel --continue-on-error script1 script2
  • --aggregate-output:将所有脚本的输出合并到一个终端中显示。示例:npm-run-all --serial --aggregate-output script1 script2 script3

读者朋友好呀,我是王天~ 😊

尝试做过很多事情,半路出道的野生程序员、前端讲师、新手作者,最终还是喜欢写代码、乐于用文字记录热衷分享~

如文章有错误或者不严谨的地方,期待给于指正,万分感谢。🙇‍

如果喜欢或者 有所启发,欢迎 star,对作者也是一种鼓励👏

微信:「wangtian3111」,加我进王天唯一的读者群。

个人博客:https://itwangtian.com