惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
T
Threatpost
T
Tor Project blog
S
Schneier on Security
Project Zero
Project Zero
Know Your Adversary
Know Your Adversary
P
Proofpoint News Feed
K
Kaspersky official blog
P
Privacy International News Feed
Latest news
Latest news
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
The Hacker News
The Hacker News
D
Docker
aimingoo的专栏
aimingoo的专栏
S
Securelist
C
Cyber Attacks, Cyber Crime and Cyber Security
Spread Privacy
Spread Privacy
TaoSecurity Blog
TaoSecurity Blog
T
The Blog of Author Tim Ferriss
T
Threat Research - Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
Security Latest
Security Latest
V
Visual Studio Blog
WordPress大学
WordPress大学
J
Java Code Geeks
O
OpenAI News
T
Tailwind CSS Blog
S
Secure Thoughts
G
Google Developers Blog
博客园_首页
The Cloudflare Blog
The Register - Security
The Register - Security
A
Arctic Wolf
Y
Y Combinator Blog
阮一峰的网络日志
阮一峰的网络日志
B
Blog RSS Feed
IT之家
IT之家
美团技术团队
D
Darknet – Hacking Tools, Hacker News & Cyber Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
G
GRAHAM CLULEY
S
Security Affairs
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Application and Cybersecurity Blog
Application and Cybersecurity Blog
P
Palo Alto Networks Blog
C
CERT Recently Published Vulnerability Notes
W
WeLiveSecurity

十二的编程笔记

26 年新年前 vibe coding 感慨 - 随便写写 社区驱动型流量的转化效能与质量特征分析 - AI - 计算机科学 ClawdBot 祛魅 2 小时安装 + 实际体验 还需再练练 - AI - 计算机科学 golang 标准库源码解析 - runtime2 GMP - Lib - GO - 计算机科学 BCTF2025-AI - BCTF2025 - CTF - 计算机科学 BCTF2025-MISC-01~08 - BCTF2025 - CTF - 计算机科学 golang 标准库源码解析 - channel - Lib - GO - 计算机科学 golang 标准库源码解析 - Context - Lib - GO - 计算机科学 golang 多版本环境控制 - GO - 计算机科学 cloudflare connect 踩坑记录 - Project - 计算机科学 BCTF2024-WEB-01~08 - BCTF2024 - CTF - 计算机科学 BCTF2024-MISC - BCTF2024 - CTF - 计算机科学 BCTF2024-IOT - BCTF2024 - CTF - 计算机科学 BCTF2024-REVERSE - BCTF2024 - CTF - 计算机科学 分布式事务 - 高可用 - 计算机科学 分布式 CAP 和 BASE 理论 简介 - 高可用 - 计算机科学 搭建使用 Cloudflare Worker 的 Docker 镜像 - Project - 计算机科学 GitHub Copilot 封号及退款过程 - Project - 计算机科学 记录一次 innodb 全表 update - MySQL - Database - 计算机科学
Hexo 使用 github Action 进行发布 - Project - 计算机科学
本文作者: Twelveeee @十二的编程笔记 · 2024-10-01 · via 十二的编程笔记

# 介绍

Github Actions 可以很方便实现 CI/CD 工作流,类似 Travis 的用法,来帮我们完成一些工作,比如实现自动化测试、打包、部署等操作。当我们运行 Jobs 时,它会创建一个容器 (runner),容器支持:Ubuntu、Windows 和 MacOS 等系统,在容器中我们可以安装软件,利用安装的软件帮我们处理一些数据,然后把处理好的数据推送到某个地方。

本文将介绍利用 Github Actions 实现自动部署 hexo 到 Github Pages 和阿里云 oss

没有 Github Actions 之前,我们需要写完文章执行 hexo d 来进行部署。有了 Github Actions 之后,workflow 会自动部署我们的笔记。

# 前提

# 创建所需仓库

  1. 创建一个 github 仓库用来存放 Hexo 项目,我这边是 Twelveeee/MyNotesBlog 一个 private 的仓库
  2. 创建 your.github.io 仓库用来存放静态博客 github page,我这边是 Twelveeee/Twelveeee.github.io

# 配置 GithubToken

GithubToken 是为了在执行 githubAction 的时候有权限访问仓库

参考 https://blog.51cto.com/u_15069485/3590346

在 github setting 打开 Developer settings

image-20241001233238214

打开 Personal access tokens

image-20241001233409638

点击 Generate new token 按钮

image-20241001233508640

选择对应的仓库

image-20241001233811094

Permissions

Read access to actions variables and secrets

Read and Write access to actions, code, commit statuses, deployments, environments, pages, pull requests, and workflows

获取到 token 记录下来

# 配置 GithubAction 参数

打开项目, Settinngs->Secrets and variables New repository secret

image-20241002000219935

把上面提到的 token 写进去 变量名称需要与下面的 deploy.yml 一致

# 编写 Github Actions

# Workflow 模版

blog 仓库根目录下创建 .github/workflows/deploy.yml 文件,目录结构如下。

blog (repository)
└── .github
    └── workflows
        └── deploy.yml

deploy.yml 文件中粘贴以下内容。并且更改 env 为自己对应的值。

name: Pages
on:
  push:
    branches:
      - main
env:
  GIT_USER: Twelveeee
  GIT_EMAIL: twelveeee12@gmail.com
  THEME_REPO: Twelveeee/hexo-theme-shokaV2
  THEME_BRANCH: master
  THEME_NAME: shoka
  DEPLOY_REPO: Twelveeee/Twelveeee.github.io
  DEPLOY_BRANCH: main
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          token: ${{secrets.PAT_TOKEN}}
          submodules: recursive
      - name: Configuration environment
        run: |
          sudo timedatectl set-timezone "Asia/Shanghai"
          git config --global user.name $GIT_USER
          git config --global user.email $GIT_EMAIL
      - name: Checkout theme repo
        uses: actions/checkout@v4
        with:
          repository: ${{ env.THEME_REPO }}
          ref: ${{ env.THEME_BRANCH }}
          path: themes/${{ env.THEME_NAME }}
          token: ${{ secrets.PAT_TOKEN }}
      - name: Checkout deploy repo
        uses: actions/checkout@v4
        with:
          repository: ${{ env.DEPLOY_REPO }}
          ref: ${{ env.DEPLOY_BRANCH }}
          path: .deploy_git
          token: ${{ secrets.PAT_TOKEN }}
  
      - name: Use Node.js 20
        uses: actions/setup-node@v4
        with:
          node-version: "20"
      - name: Cache NPM dependencies
        uses: actions/cache@v4
        with:
          path: node_modules
          key: ${{ runner.OS }}-npm-cache
          restore-keys: |
            ${{ runner.OS }}-npm-cache
      - name: Install Dependencies
        run: npm install
      - name: Deploy hexo
        env:
          GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}
        run: |
          npm run deploy

# 模版说明

# Workflow Overview

这个工作流名为 Pages ,在 main 分支有新的推送时会被触发。都会自动更新博客的内容。

# Environment Variables

  • GIT_USER: Git 用户名,用于配置 Git 提交。
  • GIT_EMAIL: Git 邮箱地址,用于配置 Git 提交。
  • THEME_REPO: Hexo 主题的仓库地址。
  • THEME_BRANCH: Hexo 主题的分支。
  • THEME_NAME: Hexo 主题的名称。
  • DEPLOY_REPO: 部署的 GitHub Pages 仓库。
  • DEPLOY_BRANCH: 部署的分支。

# Job: build

这个工作流定义了一个名为 build 的作业,运行在最新的 Ubuntu 环境上。

# Steps
  1. Checkout Main Repository:
    • 使用 actions/checkout@v4 来签出触发工作流的主仓库代码。
    • 使用 ${{ secrets.PAT_TOKEN }} 作为身份验证令牌。
    • 递归地签出子模块。
  2. Configuration Environment:
    • 设置时区为 "Asia/Shanghai"。
    • 配置 Git 用户名和邮箱,以便后续的提交操作。
  3. Checkout Theme Repository:
    • 使用 actions/checkout@v4 签出主题仓库。
    • 指定分支和路径为 themes/${{ env.THEME_NAME }}
    • 使用 ${{ secrets.PAT_TOKEN }} 进行身份验证。
  4. Checkout Deploy Repository:
    • 使用 actions/checkout@v4 签出用于部署的仓库。
    • 指定分支和路径为 .deploy_git
    • 使用 ${{ secrets.PAT_TOKEN }} 进行身份验证。
  5. Use Node.js 20:
    • 使用 actions/setup-node@v4 来设置 Node.js 环境,版本为 20。
  6. Cache NPM Dependencies:
    • 使用 actions/cache@v4 缓存 node_modules 目录,以加速后续的构建。
    • 使用 ${{ runner.OS }}-npm-cache 作为缓存键。
  7. Install Dependencies:
    • 运行 npm install 安装项目所需的依赖。
  8. Deploy Hexo:
    • 设置 GITHUB_TOKEN 环境变量,用于身份验证。
    • 运行 npm run deploy ,执行 Hexo 部署脚本,将生成的静态文件推送到 GitHub Pages 仓库。

# 部署注意事项

因为使用到了 npm run deploy 所以 package.json 里面要有 deploy

"scripts": {
    "build": "hexo generate",
    "clean": "hexo clean",
    "deploy": "hexo deploy",
    "server": "hexo server"
  },

使用 hexo deploy

所以需要确保安装了 hexo deploy 服务

npm i hexo-deployer-ali-oss-extend
npm install hexo-deployer-git --save

并且配置了相应的配置

_config.yml

deploy:
- type: ali-oss
  region: oss-cn-beijing
  accessKeyId: ***
  accessKeySecret: ***
  bucket: ***
  cacheControl:
    images: 
    css:
    js:
    html:
    other:
- type: git
  repo: https://github.com/Twelveeee/Twelveeee.github.io
  branch: main

当然,如果没有对应的 type 可以将相应的配置注释掉。

# 执行任务

image-20241002001734778

任务完成之后查看 对应的 github page

https://twelveeee.github.io/

确实有相应的文章

# 参考资料

https://hexo.io/docs/github-pages#One-command-deployment

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

https://github.com/actions/checkout