部署更轻松了,Github-Action自动化部署Hexo:代码推送,云服务器自动部署

部署更轻松了,Github Action自动化部署Hexo:代码推送,云服务器自动部署

我的博客都部署在阿里云的服务器上,利用nginx做web服务,很麻烦的是,每次我在本地编写完代码,我都要手动在本地打包,再手动把打包后的文件传到服务器上,这个过程重复且枯燥,繁琐。可以说我简直是受够了!!于是我在群里受大佬的指导,发现了Github Action,能够自动化的完成打包,测试,部署等工作,我心里想:这简直太好了啊!那不得研究研究

关于Github Action

官网:https://docs.github.com/zh/actions/learn-github-actions/understanding-github-actions

GitHub Actions 是一种持续集成和持续交付 (CI/CD) 平台,可用于自动执行生成、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。

GitHub Actions 不仅仅是 DevOps,还允许您在存储库中发生其他事件时运行工作流程。 例如,您可以运行工作流程,以便在有人在您的存储库中创建新问题时自动添加相应的标签。

GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行工作流程,或者您可以在自己的数据中心或云基础架构中托管自己的自托管运行器。

简单来说:就是它是Github上类似于持续集成的功能,它允许你在一些节点上(push、tag)等特定时间触发一些操作,我们这里可以利用它实现自动部署应用到自己的服务器

没有使用Github Action,我需要

  • 编辑好文章后,运行hexo clean 清空缓存
  • 运行hexo g 生成html文件
  • 如果使用的是github page服务,需要运行hexo deploy,如果是自己的服务器,还要连上服务器上传打包好的文件

使用Github Action,我需要

  • 提交代码,github自动帮我们打包部署到服务器

内心os:太方便了 我要学我要学!!!

开始设置

1、去Github的自己仓库点击Actions,新建一个workflow工作流,应该会有模版,随便选择一个,反正yml的内容可以改,我们由于是node项目,可以选择node模版

image-20240318234052610

参考我的博客的workflow:

# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs

name: hexo_deploy

on:
  push:
    branches: [ "main" ]
  workflow_dispatch: {}

jobs:
  build:
    runs-on: ubuntu-latest
    steps: 
      - name: checkout
        uses: actions/checkout@master
      - name: use Node 18
        uses: actions/setup-node@v1
        with: 
          node-version: 18
      - name: npm install
        run: |
          npm install -g hexo-cli
          npm install
        env:
         CI: true
      - name: hexo build
        run: |
          hexo clean
          hexo generate
        env:
          CI: true
      - name: Deploy
        uses: easingthemes/ssh-deploy@v2.0.7
        env:
          SSH_PRIVATE_KEY: ${{ secrets.ACCESS_TOKEN }}
          ARGS: "-avz --delete"
          SOURCE: "public/"
          REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
          REMOTE_USER: ${{ secrets.REMOTE_USER }}
          TARGET: ${{ secrets.TARGET }}

文件中#开头的是注释,不用管。

开始的name表示名字,给这个workflow起一个名字,on表示的是在什么阶段触发这个工作流,push就代表在提交代码的时候,并且分支是mainworkflow_dispatch表示的是可以在Github仓库的界面手动执行这个workflow,{}表示的是空参数,一般手动执行可以带一些参数。jobs 表示执行的任务,一个workflow可以有多个job,runs-on表示运行环境,steps是任务中具体的步骤,里面的每一个-代表了一个action,其中action也可以有自己的name,也可以使用uses使用别人写好的action。那怎么看有哪些actions呢?可以看这里,使用别人的action的格式是uses: 用户名/action名称@版本号

上面 的部分就相当于Github在你提交的时候,用一个机器(ubuntu-latest)运行你给的指令。

最重要的就是最后一部分了,下面精讲:

我们发现这里有四个变量ACCESS_TOKENREMOTE_HOSTREMOTE_USERTARGET,分别代表的是服务器Git的私钥,服务器的IP,服务器的用户名,最后打包的服务器的位置,举个栗子:147.0.130.190root/www/root/blog,最关键的是第一个变量,

那么这个值是什么呢?首先去你服务器的~/.ssh目录,此时目录下应该有4个文件,分别是authorized_keysid_rsaid_rsa.pubknown_hosts。如果没有id_rsaid_rsa.pub的,可以使用ssh-keygen来生成,这两个文件就是安装Git时需要生成的私钥和公钥。这个时候你看看authorized_keys里面有没有内容,如果有内容说明你之前设置过,ACCESS_TOKEN的值就是authorized_keys所对应的私钥。如果没有内容的话,你可以直接设置为公钥id_rsa.pub的内容,如执行命令cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys,此时就会把id_rsa.pub的内容写入authorized_keys中,然后把ACCESS_TOKEN的值设置为私钥id_rsa中的内容,你可以运行命令cat ~/.ssh/id_rsa 然后把内容复制一份到ACCESS_TOKEN中,如下:

最后在哪里设置?

image-20240318235441591

注意不要设置到environment secrets了,我之前就设置错了,到这里,就大功告成了!!!

如果你遇到了类似这样的问题:

⚠️ [Rsync] error: rsync exited with code 255

⚠️ [Rsync] stderr:  Warning: Permanently added '***' (RSA) to the list of known hosts.

那说明你的服务器与Github服务器不能ssh通信,或者没有相应的权限,记得开放你的22端口,如果你不放心22端口,可以给Github的IP设置白名单,至此我的Github Action就设置好了。看你的啦!

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以的,Github Actions可以用来自动化前端项目的部署服务器。以下是一个简单的例子: 1. 首先,在你的Github仓库中创建一个`.github/workflows`文件夹,并在该文件夹下创建一个`deploy.yml`文件。 2. 在`deploy.yml`文件中设置触发部署的事件,例如push到master分支。然后设置一个`job`,该`job`会在触发事件后运行。 3. 在该`job`中,使用`actions/checkout` action拉取代码,并使用`actions/setup-node` action安装依赖。 4. 接下来,使用你喜欢的打包工具打包你的前端代码,例如webpack或者parcel。打包后的文件会被存储在一个`dist`文件夹中。 5. 然后,使用`appleboy/ssh-action` action将打包后的文件上传到服务器。该action会使用SSH登录到你的服务器,并将文件复制到服务器上的指定目录。 下面是一个示例的`deploy.yml`文件: ```yml name: Deploy to Cloud Server on: push: branches: - master jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Setup Node uses: actions/setup-node@v1 with: node-version: '12.x' - name: Install dependencies run: npm install - name: Build run: npm run build - name: Deploy to Cloud Server uses: appleboy/ssh-action@master with: host: ${{ secrets.HOST }} username: ${{ secrets.USERNAME }} password: ${{ secrets.PASSWORD }} port: ${{ secrets.PORT }} script: | cd /path/to/your/project rm -rf * scp -r /path/to/your/project/dist/* ./ ``` 这个例子是使用密码登录到服务器的。如果你使用的是SSH Key,你需要相应地修改`deploy.yml`文件。此外,你需要在Github仓库的`Settings`中添加`secrets`,以保存你的服务器信息和登录凭证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值