如何使用Github的Action实现博客的自动部署

news2024/11/19 19:29:30

如何使用Github的Action实现博客的自动部署

以下是详细的采坑记录,花费了不少时间。

现在的状态是,更新完博客时,需要执行以下的指令:

hexo clean && hexo g && hexo d &&  git add . && git commit -m "deploy" && git push

然后才能完成github上静态博客的更新

缺点是很麻烦!

可以用action来自动化部署:

https://blog.esunr.xyz/2022/06/64163235c30f.html#3-3-%E4%BD%BF%E7%94%A8-hexo-deploy-%E6%8C%87%E4%BB%A4

Github Action 可以实现在一个行为触发之后再执行一些其他的行为,利用这个能力我们就可以实现当我们写完一篇文章后,将代码 Push 到 Github 仓库的这一刻,让 Github 来帮我们完成编译以及部署这个流程,也就是实现持续集成(CI)、持续交付(CD)的这个效果。

关于 Github Action,详细教程可以查看 官方文档。按照文档中所描述的,只要我们在代码中添加一层 .github/workflows 目录,并且在目录下创建一个 yml 文件来描述具体的行为,就可以实现开启 Github Action。

照着来了一遍,好像没啥用啊;

名字没有配置好:

 could not read Username for '[https://github.com](https://github.com/)': No such device or address

https://sanonz.github.io/2020/deploy-a-hexo-blog-from-github-actions/

这个博客写的非常详细:

1、A仓库是,我的私密Blog仓库;

2、B仓库是,public的仓库;

3、需要在github上配置,A对B的访问权限,这个很重要。

遇到的问题:

Permission to XXXX/XXXX.github.io.git denied to github-actions[bot].

秘钥,密匙没有设置好


总结:

1、按照如下的方法,在github上边申请,得到一个HEXO_DEPLOY_PRI

image-20221105215707211

2、然后去A仓库(私人仓库)的Setting里边,把Action变量给配置好

image-20221105215815604

3、在A仓库中的deploy.yml

把相关信息和变量都统一好:HEXO_DEPLOY_PRI变量不要用错了,主题也不要用错了

name: CI

on:
  push:
    branches:
      - master

env:
  GIT_USER: xxxx
  GIT_EMAIL: xxxx@qq.com
  THEME_REPO: xxxx/hexo-theme-next
  THEME_BRANCH: master
  DEPLOY_REPO: xxxx/xxxx.github.io
  DEPLOY_BRANCH: master

jobs:
  build:
    name: Build on node ${{ matrix.node_version }} and ${{ matrix.os }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        os: [ubuntu-latest]
        node_version: [13.14.0]

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Checkout theme repo
        uses: actions/checkout@v2
        with:
          repository: ${{ env.THEME_REPO }}
          ref: ${{ env.THEME_BRANCH }}
          path: themes/next

      - name: Checkout deploy repo
        uses: actions/checkout@v2
        with:
          repository: ${{ env.DEPLOY_REPO }}
          ref: ${{ env.DEPLOY_BRANCH }}
          path: .deploy_git

      - name: Use Node.js ${{ matrix.node_version }}
        uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node_version }}

      - name: Configuration environment
        env:
          HEXO_DEPLOY_PRI: ${{secrets.HEXO_DEPLOY_PRI}}
        run: |
          sudo timedatectl set-timezone "Asia/Shanghai"
          mkdir -p ~/.ssh/
          echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan github.com >> ~/.ssh/known_hosts
          git config --global user.name $GIT_USER
          git config --global user.email $GIT_EMAIL          

      - name: Install dependencies
        run: |
          npm install

      - name: Deploy hexo
        run: |
          npm run deploy

为什么会一直出现这个问题?

Permission to XXXX/XXXX.github.io.git denied to github-actions[bot].

_config.yml里边去把https协议修改成git

# Deployment
deploy:
  type: git
  repo: git@github.com/XXX/xxx.github.io.git
  branch: master #published  
  message: 'hexo blog deploy'

再尝试一下:


还是这个错误:

Permission to xxxx/xxxx.github.io.git denied to github-actions[bot].

The requested URL returned error: 403

终于成功了:

image-20221105234029937

deploy的代码这样写:

最终的CI脚本:

# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the workflow will run
on:
  # Triggers the workflow on push or pull request events but only for the "master" branch
  push:
    branches: [ "master" ]

env:
  GIT_USER: xxxx
  GIT_EMAIL: xxxx@qq.com
  THEME_REPO: xxxx/hexo-theme-next
  THEME_BRANCH: master
  DEPLOY_REPO: xxxx/xxxx.github.io
  DEPLOY_BRANCH: master

# 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:
    name: Build on node ${{ matrix.node_version }} and ${{ matrix.os }}
    # The type of runner that the job will run on
    runs-on: ubuntu-latest
    strategy:
      matrix:
        os: [ubuntu-latest]
        node_version: [13.14.0]    

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Checkout theme repo
        uses: actions/checkout@v3
        with:
          repository: ${{ env.THEME_REPO }}
          ref: ${{ env.THEME_BRANCH }}
          path: themes/next

      - name: Checkout deploy repo
        uses: actions/checkout@v3
        with:
          repository: ${{ env.DEPLOY_REPO }}
          ref: ${{ env.DEPLOY_BRANCH }}
          path: .deploy_git

      - name: Use Node.js ${{ matrix.node_version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node_version }}            

      - name: Install Dependencies
        run: |
          npm install   

      - name: Build
        run: npm run build

      - name: Configuration environment
        env:
          HEXO_DEPLOY_PRI: ${{secrets.HEXO_DEPLOY_PRI}}
        run: |
          sudo timedatectl set-timezone "Asia/Shanghai"
          mkdir -p ~/.ssh/                              
          echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan github.com >> ~/.ssh/known_hosts
          git config --global user.name $GIT_USER
          git config --global user.email $GIT_EMAIL 

      - name: Deploy hexo
        id: deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          deploy_key: ${{ secrets.HEXO_DEPLOY_PRI }}
          publish_dir: ./public

      - name: Get the output
        run: |
          echo "${{ steps.deploy.outputs.notify }}" 

      # Runs a single command using the runners shell
      - name: Run a one-line script
        run: echo Hello, world!

      # Runs a set of commands using the runners shell
      - name: Run a multi-line script
        run: |
          echo Add other actions to build,
          echo test, and deploy your project.

服了,还是没用,blog没有更新


https://blog.zhanganzhi.com/zh-CN/2022/06/0800d76d306e/

再来试一试;

name: Deployment
on: push

jobs:
  deployment:
    runs-on: ubuntu-latest
    name: Deployment

    steps:
      - name: Check Out
        uses: actions/checkout@v3

      - name: Clone Repo
        uses: actions/checkout@v3
        with:
          repository: AAA/GITHUB.IO
          path: .deploy_git

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: 16

      - name: Setup Git
        run: |
          git config --global user.name "Example"
          git config --global user.email "email@example.com"

      - name: Setup SSH Key
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.SSH_DEPLOY_KEY }}" > ~/.ssh/id_ed25519
          chmod 600 ~/.ssh/id_ed25519

      - name: Deploy
        run: |
          npm install --location=global hexo-cli
          npm install
          hexo d

https://wuuconix.link/2022/01/08/actions/

name: Deploy                      # Actions 显示的名字,随意设置
on: [push]                        # 监听到 push 事件后触发
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout              # 拉取当前执行 Actions 仓库的指定分支
      uses: actions/checkout@v2
      with:
        ref: main

    - name: Setup Node            # 使用node 14
      uses: actions/setup-node@v2
      with:
        node-version: "14"

    - name: NPM INSTALL           #安装依赖
      run: |
        npm install hexo-cli -g
        npm install

    - name: Add KEY               #这里需要提供一个ssh私钥,用你平时常用机器里的 ~/.ssh/id_rsa即可
      env:
        SSH_PRIVATE: ${{ secrets.SSH_PRIVATE }}
      run: |
        mkdir -p ~/.ssh/
        echo "$SSH_PRIVATE" > ~/.ssh/id_rsa
        chmod 700 -R ~/.ssh
        ssh-keyscan github.com >> ~/.ssh/known_hosts
        git config --global user.email "输入你的邮箱"
        git config --global user.name "输入你的github名字"

    - name: Hexo Deploy           # hexo deploy 会自动build然后上传到github.io项目中
      run: |
        hexo clean
        hexo deploy

放弃了,最终也没顺利的更新成功,不知道哪个环节出问题了。。。

哈哈 笑死我了:

image-20221106005343195

这个action,测试一次就需要花费10分钟左右,真是时间黑洞!!!


在本地尝试了一遍,OK的

git clone https://github.com/XXXX/XXXX.git
cd .\XXXX\
git clone https://github.com/XXXX/hexo-theme-next.git themes/next
npm install
npm run deploy

重新写actions的脚本

name: CI

on:
  push:
    branches: [ "master" ]

env:
  GIT_USER: xxxx
  GIT_EMAIL: xxxx@qq.com
  THEME_REPO: xxxx/hexo-theme-next
  THEME_BRANCH: master
  DEPLOY_REPO: xxxx/xxxx.github.io
  DEPLOY_BRANCH: master

jobs:
  build:
    name: Build on node ${{ matrix.node_version }} and ${{ matrix.os }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        os: [ubuntu-latest]
        node_version: [13.14.0]    

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Checkout theme repo
        uses: actions/checkout@v3
        with:
          repository: ${{ env.THEME_REPO }}
          ref: ${{ env.THEME_BRANCH }}
          path: themes/next

      - name: Use Node.js ${{ matrix.node_version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node_version }}            

      - name: Configuration environment
        env:
          HEXO_DEPLOY_PRI: ${{secrets.HEXO_DEPLOY_PRI}}
        run: |
          sudo timedatectl set-timezone "Asia/Shanghai"
          mkdir -p ~/.ssh/                              
          echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan github.com >> ~/.ssh/known_hosts
          git config --global user.name $GIT_USER
          git config --global user.email $GIT_EMAIL 

      - name: Install Dependencies
        run: |
          npm install             

      - name: Deploy hexo
        run: |
          npm run deploy

_config.yml中,修改成git,竟然成功了!!!

image-20221107003203115

但是编译非常花费时间,能不能提速呢?

image-20221107003235458

https://dwye.dev/post/github-action-npm-cache/

尝试一下npm ci,看看速度怎么样:我的天啊,神速啊,只用6秒就可以了!!!

https://segmentfault.com/q/1010000040245798/a-1020000040248108

小插曲:

npm install --package-lock-only

image-20221107003716102

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git分布式版本控制工具

layout: post title: Git分布式版本控制工具 description: Git分布式版本控制工具 tag: 开发工具 文章目录git 基本配置与指令设置用户信息为常用指令设置别名解决gitbash乱码问题基础操作指令:初始化、添加到暂存区、提交到仓库、查看状态、日志版本回退git reset配…

智工教育:一级建造师《公路实务》考前必背知识点

一、路基工程 1.地基表层碾压处理压实度控制标准为:二级及二级以上公路一般土质应不小于90%;三、四级公路应不小于85%。 2.石质路堑施工技术 (1)应逐级开挖,逐级按设计要求进行防护。 (2)施工…

高效工具-局域网服务器访问公网

文章目录任务需求方法1:使用CCproxy代理简单介绍下载安装配置逻辑本机配置客户机配置成功测试方法2:修改MAC地址查询本机MAC地址修改内网服务器MAC地址打开rc-local.service服务添加Install段创建rc.local文件添加核心的修改MAC地址代码创建链接启动服务成功测试参考…

线上超市小程序开发有什么作用_超市小程序有什么功能呢

1。开发超市小程序有什么价值? 1、对于消费者来说:通过超市小程序能够更加直接的购买到想要的产品,消费者无需再到门店寻找商品可以直接通过超市小程序进行在线浏览;通过在线搜索的方式能够更加便捷的搜索到相应的商品&#xff0…

mysql连接池的实现

文章目录前言一、池化技术二、什么是数据库连接池三、为什么使用数据库连接池不使用连接池使用连接池长连接和连接池的区别四、数据库连接池运行机制五、连接池和线程池的关系六、连接池设计要点连接池设计逻辑构造函数初始化请求获取连接归还连接析构连接池前言 本文是mysql连…

模数转换电路

一、Exynos4412 A/D转换器概述 1. 概述 ADC(Analog-to-Digital Converter),就是模数转换器。从字面上看,A我们称为模拟信号(Analog signal),D我们称为数字信号(digital signal)。 模数转换器,在电子技术中即是将模拟信号转换成数字…

[附源码]java毕业设计家乡旅游文化推广系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

教你STM32做USB鼠标、键盘

使用CubeMX软件傻瓜式的配置,一键生成USB的HID驱动。 一、USB鼠标 1、CubeMX配置 ①、选择相对应的芯片 ②、配置时钟和Debug和debug ③、配置USB ④、生成代码 最好把这个也勾上,勾上以后每个外设配置不再都给你塞到main.c里,而是建一个.c…

简单的爬虫架构和网页下载器requests

目录 简单的爬虫架构: 网页下载器: URL管理器: 网页解析器: 网页下载器requests: 发送requests请求: 接收requests请求: requests操作实例: 简单的爬虫架构: 网页下载器: 负责通过URL将网页进行下载…

聊聊Vuex原理

背景 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。Vuex 是专门为 Vue.js 设计的状态管理库,以利用 Vue.js 的细粒度数据响应机制来进行高效的状态更新。如果你已经灵活运用,但是依然好奇它底层实现逻辑,不妨一探究竟。 Vue 组件开发…

docker系统笔记-03镜像的创建管理和发布

镜像的获取 pull from registry (online) 从registry拉取 public(公有)private(私有) build from Dockerfile (online) 从Dockerfile构建load from file (offline) 文件导入 (离线) 镜像的基本操作 dock…

概率 | 【提神醒脑】自用笔记串联二 —— 数字特征、大数定律、统计量

本文总结参考于 kira 2023概率提神醒脑技巧班。 笔记均为自用整理。加油!ヾ(◍∇◍)ノ゙ 第一部分笔记详见 概率 | 【提神醒脑】自用笔记串联一 —— 事件、随机变量及其分布_西皮呦的博客-CSDN博客 一研为定! 四、随机变量的数字特…

cocos2dx 3D物理相关知识点汇总

(一)3D相关基础知识 网格(Mesh) 通常说的网格其实就是3D建模出来的形状。因为模型是由很多三角形组成,所以,就像网格一样。 纹理 纹理的作用就是给网格上色。 怎么上色的? 举个简单的例子。…

m基于GA遗传优化的生产工艺设备布置优化matlab仿真

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB程序 4.完整MATLAB程序 1.算法概述 在设备布置的问题上,本文将作业车间设备布置这个多目标优化问题看成是包含布局面积,物流成本和生产工艺的连续优化的多行设备布置问题,使之更具有实际意义…

如何在 Rocky Linux 上安装 Apache Kafka?

Apache Kafka 是一种分布式数据存储,用于实时处理流数据,它由 Apache Software Foundation 开发,使用 Java 和 Scala 编写,Apache Kafka 用于构建实时流式数据管道和适应数据流的应用程序,特别适用于企业级应用程序和关…

robots.txt漏洞

robots.txt漏洞描述: 搜索引擎可以通过robots文件可以获知哪些页面可以爬取,哪些页面不可以爬取。Robots协议是网站国际互联网界通行的道德规范,其目的是保护网站数据和敏感信息、确保用户个人信息和隐私不被侵犯,如果robots.txt文件编辑的太过详细,反而会泄露网站的敏感…

[附源码]java毕业设计基于学生信息管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Delphi中关于PChar、Char数组、string[](ShortString)及结构体长度及占用空间的一些特性说明和测试

关于特性 1,string和Char数组都是一块内存, 其中存放连续的字符. string保存具体字符的内存对用户 是透明的, 由Delphi管理它的分配, 复制和释放, 用户不能干预2,关于ShortString,内存中用第一个字节来表示字符串的长度。FF255,所以这个特性…

【MySQL】MySQL复制与高可用水平扩展架构实战(MySQL专栏启动)

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

天王刘德华走红毯,到哪他都是最耀眼的明星

第三十五届金鸡奖,已经在福建厦门落下帷幕,如果要说本届金鸡奖谁收获最大,无疑是天王刘德华。在金鸡奖颁奖典礼现场,功夫巨星吴京登上热搜,然而热搜的主角却不是他,而是天王刘德华。 在本届金鸡奖颁奖典礼现…