我在使用jenkins实现hexo博客自动发布中介绍了可以使用jenkins实现博客自动发布,其实还有一种更简单的方法,就是GitHub提供的持续集成服务:GitHub Actions。下面就来介绍一下如何使用GitHub Actions来实现将hexo博客自动编译及发布到GitHub Pages和Gitee pages上。

目录

  • GitHub Actions 简介
  • 环境准备
    • 博客仓库
    • GitHub Token配置
    • Gitee Token配置
  • 配置workflow文件
  • 验证
  • 总结

GitHub Actions 简介

GitHub Actions把代码拉取,打包,触发测试,发布等操作当成一个个的actions,持续集成就是将这些actions组合起来,jenkins也类似。

在项目的.github/workflows 目录中创建一个yaml格式的workflow 文件来编写GitHub Actions 工作流程,GitHub会自动运行该文件。workflow语法可参考:https://docs.github.com/cn/actions/learn-github-actions/workflow-syntax-for-github-actions

开发者可以将actions放到代码仓库供其他开发者引用,可以到官网搜索开源的actions:https://github.com/marketplace?type=actions

可以使用GitHub Actions实现博客自动发布,将静态博客页面部署到多个服务器上,比如GitHub Pages,Gitee pages以及云服务器上。本文使用GitHub Actions实现将Hexo博客自动编译并发布到GitHub Pages 和 Gitee pages上,并且实现Gitee pages自动更新。

下面介绍具体的配置流程。

环境准备

博客仓库

我的个人博客是使用 hexo 框架搭建的,搭建方法可参考Hexo+Github/Gitee 搭建个人博客。

主要包括3个仓库:

  • 私有仓库Blog:存储 Hexo 项目文章以及源代码
  • 公共仓库hiyongz.github.io:存储编译之后的静态页面。
  • Gitee公共仓库:内容和hiyongz.github.io一样,只是使用的服务不同。

使用GitHub Actions要实现的是当Blog仓库指定目录有更新时,触发自动编译并部署博客到hiyongz.github.io仓库中,并将hiyongz.github.io仓库同步到Gitee公共仓库,同步完成后,更新Gitee Pages。

GitHub Token配置

配置发布秘钥,用于将生成的静态博客文件 push 至 GitHub Pages 所在的仓库hiyongz.github.io:

1、生成秘钥

执行如下命令生成公钥和私钥,替换邮件地址为你的github邮箱地址,其实也可以不使用邮箱,这里只是为了便于辨识。

ssh-keygen -f hexo-deploy-key -t rsa -C "username@example.com"

命令执行后会生成两个文件:hexo-deploy-keyhexo-deploy-key.pub

2、将公钥添加到Github Pages仓库中

步骤:hiyongz.github.io仓库 -> Settings -> Deploy keys -> Add deploy key

  • Title设置为 HEXO_DEPLOY_PUB (可以根据自己喜好设置)
  • Key填写 github-deploy-key.pub 文件内容
  • 勾选 Allow write access 选项

3、将私钥添加到博客源码仓库中

步骤:博客仓库 -> Settings -> Secrets -> New repository secret

  • Name 填写 HEXO_DEPLOY_KEY
  • Value 填写 github-deploy-key 文件内容。

Gitee Token配置

Gitee Token配置和Github类似。

秘钥不需要重新生成,直接使用前面生成的秘钥。

1、将公钥添加到Gitee Pages仓库中

步骤:gitee pages仓库 -> 管理 -> 公钥管理 -> 添加部署公钥

和github一样需要对仓库有写权限,点击【添加个人公钥】

复制粘贴文件 github-deploy-key.pub 中的内容

2、将私钥添加到Github的博客源码仓库中

不需要重新创建,直接使用 HEXO_DEPLOY_KEY 就行。

3、配置Gitee 帐号的密码

步骤:Github博客仓库 -> Settings -> Secrets -> New repository secret

  • Name 填写 GITEE_PASSWORD
  • Value 填写Gitee 帐号的密码。

配置workflow文件

下面来配置 Github Actions,编写workflow文件。

在博客仓库根目录下创建 .github/workflows/deploy.yml 文件,yaml文件名可以随意设置。

下面是我的workflow文件(参考了Hexo Action和Gitee Pages Action提供的例子):

name: Hexo deployon: push:paths-ignore:- 'source/_drafts/**'- '.github/**'
jobs:build:runs-on: ubuntu-latestname: A job to deploy blog.steps:- name: Checkoutuses: actions/checkout@v1with:submodules: true- name: Cache node modulesuses: actions/cache@v1id: cachewith:path: node_moduleskey: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}restore-keys: |${{ runner.os }}-node-- name: Install Dependenciesif: steps.cache.outputs.cache-hit != 'true'run: npm ci# Deploy hexo blog website.- name: Deployid: deployuses: sma11black/hexo-action@v1.0.3with:deploy_key: ${{ secrets.HEXO_DEPLOY_KEY }}user_name: github用户名user_email: github邮箱commit_msg: ${{ github.event.head_commit.message }}ion)- name: Get the outputrun: |echo "${{ steps.deploy.outputs.notify }}"sync:needs: buildruns-on: ubuntu-lateststeps:- name: Sync to Giteeuses: wearerequired/git-mirror-action@masterenv:SSH_PRIVATE_KEY: ${{ secrets.HEXO_DEPLOY_KEY }}with:# 源仓库source-repo: git@github.com:hiyongz/hiyongz.github.io.git# 目标仓库destination-repo: git@gitee.com:hiyong/hiyong.gitreload-pages:needs: syncruns-on: ubuntu-lateststeps:- name: Build Gitee Pagesuses: yanglbme/gitee-pages-action@mainwith:gitee-username: hiyonggitee-password: ${{ secrets.GITEE_PASSWORD }}gitee-repo: hiyong/hiyongbranch: master

部分字段解释:

1、name:workflow 名称

2、on:触发 workflow 的事件

  • push:push事件
  • paths-ignore:忽略指定的目录,也就是在忽略路径外的其它目录文件改动时才触发。
  • 还可以设置多种触发条件,比如支持cron语法实现定时触发,参考这里。

3、jobs:执行任务

  • build:博客编译和发布,发布到Github Pages
  • sync:将更新后的hiyongz.github.io仓库同步到Gitee
  • reload-pages:自动更新 Pages,因为Gitee Pages不像GitHub Pages 那样提交代码就自动更新。
  • runs-on:运行环境,支持windows,Ubuntu和macOS
  • steps:指定每个 Job 的运行步骤
  • sma11black/hexo-action@v1.0.3:博客构建发布,引用了Hexo Action:
  • wearerequired/git-mirror-action@master:仓库同步,引用了git-mirror-action
  • yanglbme/gitee-pages-action@main:自动更新Gitee Pages,引用了Gitee Pages Action

更多workflow语法可参考 Workflow syntax for GitHub Actions 。

验证

更新文章后push到博客仓库,如果满足条件,博客仓库中的Actions会自动触发:

有可能报如下错误信息:

Error: Need phone captcha validation, please follow wechat official account "Gitee" to bind account to turn off authentication.

微信公众号关注Gitee,绑定Gitee账号就可以了。

查看hiyongz.github.io和Gitee仓库可以发现有新的更新,并且博客也更新了,这样实现了博客的自动发布,只要将文章写好push到博客仓库就什么也不用管了。

如果Actions执行失败会收到一个邮件。

总结

除了GitHub Actions外,还可以使用Travis CI实现持续集成,它可以绑定Github 上的项目。

使用这些持续集成工具能有效提升效率,比如每次文章更新上传后,GitHub Actions会自动触发编译发布操作,只专注写文章就行了。

参考文档:

  1. GitHub Actions 快速入门:https://docs.github.com/cn/actions/quickstart

  2. GitHub Actions:https://github.com/actions

  3. Gitee Pages Action:https://github.com/marketplace/actions/gitee-pages-action

  4. git-mirror-action:https://github.com/marketplace/actions/git-mirror-action

  5. Hexo Action:https://github.com/marketplace/actions/hexo-action

  6. awesome-actions:awesome-actions

  7. https://github.com/marketplace?type=actions

  8. workflow语法: https://docs.github.com/cn/actions/learn-github-actions/workflow-syntax-for-github-actions

--THE END--

使用GitHub Actions实现Hexo博客自动发布相关推荐

  1. 利用官方支持为基于GitHub Pages的Hexo博客启用HTTPS

    HTTP(超文本传输协议),是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准.设计HTTP的初衷是为 ...

  2. 利用Cloudflare为基于GitHub Pages的Hexo博客添加HTTPS支持

    文章目录 ● 前言 ● 注册 Cloudflare ● 添加站点 ● 修改DNS ● 开启 HTTPS ● 重定向强制 HTTPS HTTP(超文本传输协议),是一个基于请求与响应,无状态的,应用层的 ...

  3. Windows下使用GitHub Pages搭建hexo博客详细教程以及Next主题超全配置

    根据下面的教程搭建的博客见这里 前言 马上要进入研究生了,不能再过浑浑噩噩的日子了,搭建一个小网站,用于记录自己所学的东西.其实,之前在腾讯云1元乞丐版上也搭建过博客,但是呢,只用来扯淡了.这次使用 ...

  4. 在github上搭建hexo博客

    cnblog的MarkDown太糟心了,干脆换hexo和github pages用用. 这个随笔给自己当备忘录用的,网上有更详细的教程. hexo官方文档 安装git,安装nodejs windows ...

  5. 利用Github Pages创建Hexo博客

    前言 很多时候身为程序员我们都有搭建自己博客的想法,可是真的着手搭建时候,总觉得事情很繁琐(VPS.LNMP环境.php或者node.js框架.域名.cdn等)而懒得去搞,因此很容易就搁置了自己搭建博 ...

  6. 如何在自己搭建的hexo博客上发布文章

    1.选择一款Markdown编译器编写文章(以下步骤以csdn为例): 2.编写文章:注册账号登录进去,点击:头像-管理博客,进入文章管理页面,点击左上角的"Markdown编辑器" ...

  7. vuepress-theme-reco + Github Actions 构建静态博客,部署到第三方服务器

    最新博客链接 Github链接 查看此文档前应先了解,vuepress基本操作 参考官方文档进行配置: vuepress-theme-reco VuePress SamKirkland / FTP-D ...

  8. 零基础免费通过hexo+github快速搭建个人博客(超详细图解+B站视频讲解资源)

    我的个人博客效果预览​https://furfur-jiang.github.io/ 加载可能会比较慢,因为是挂载到github上的 样式基于hexo-theme-matery主题 ,这个主题我特别喜 ...

  9. mac环境下搭建hexo+github pages+next个人博客

    GitHub Pages Github Pages 是面向用户.组织和项目开放的公共静态页面搭建托管服务,站点可以免费托管在Github上,你可选择试用Github Pages默认提供的域名githu ...

最新文章

  1. java纳税服务_纳税服务系统【总结】
  2. Android SQLite数据库的详细使用
  3. wxWidgets:wxArrayString类用法
  4. (转)WebSphere的web工程中怎么获取数据源
  5. 蓝桥杯基础模块8_1:串口通信收发
  6. android 动态换肤框架,GitHub - ss520k/Android-Skin-Loader: 一个通过动态加载本地皮肤包进行换肤的皮肤框架...
  7. 转:Python中的文件和目录操作
  8. c语言最小点对问题_7.4 图的连通性问题
  9. 解题报告 Toy Bricks
  10. 在gcp终端中使用ssh连接到本地机器
  11. docker运维工具
  12. vue源码之数据侦测
  13. 计算机右边键盘数字无效,巧妙解决电脑键盘右边的数字键失灵问题
  14. 整数乘法的计算机方法,太实用了!小学数学四则运算技巧及简便方法
  15. 微信小程序wx.createInnerAudioContext使用方法
  16. 何谓财务“二上二下”“三上三下”部门预算机制
  17. Microbiome:微生物组名词定义
  18. FCFS,SJF以及PSA进程调度算法效率的比较
  19. TortoiseGit小乌龟基本使用
  20. uniapp 微信小程序发布版本提示珊瑚运营平台、uniAD 有新版本怎么解决?

热门文章

  1. 批量修改文件夹中文件的后缀名
  2. NiFi Processors概述
  3. 软件系统产品线特征及构建过程
  4. 强智教务管理系统爬虫难关1
  5. trim函数 html,trim函数的使用方法(你会用TRIMMEAN 函数吗?)
  6. loj6388 「THUPC2018」赛艇 / Citing
  7. R语言遍历字符串再拼接复原
  8. upload-labs攻略
  9. 禅道 upgrade.php,禅道升级,添加钉钉通知
  10. [代码人生][分享]SQl语句学习专题