百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

GitHub Actions 自动发布Hexo

bigegpt 2024-08-19 12:12 2 浏览

引言

手动发布Hexo到阿里云ECS非常麻烦,hexo g当文章量多时,较为耗时,并且每次手动上传极为不便,本文通过GitHub Actions 完成自动部署Hexo到阿里云ECS,本文通过FTP的方式上传到阿里云ECS。

在仓库文件夹新建 .github/workflows/deploy-hexo.yml,或者点击 GitHub -> Actions,新建 Action

deploy-hexo.yml 内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
on: push
name:  Deploy website on push
jobs:
  web-deploy:
    name:  Deploy
    runs-on: ubuntu-latest
    steps:
    - name:  Get latest code
      uses: actions/checkout@v2.3.2

    - name: Use Node.js 12
      uses: actions/setup-node@v2-beta
      with:
        node-version: '12'
        
    - name: Install Pandoc
      run: |
        sudo apt-get install pandoc
      
    - name:  Build Project
      run: |
        npm install hexo-cli -g
        npm install
        hexo clean
        hexo generate
    
    - name:  Sync files
      uses: SamKirkland/FTP-Deploy-Action@4.0.0
      with:
        server: ${{ secrets.FTP_SERVER }}
        username: ${{ secrets.FTP_USERNAME }}
        password: ${{ secrets.FTP_PASSWORD }}
        local-dir: ./public/

注意:

local-dir 为本地Hexo生成的部署文件所在文件夹

若Web服务部署路径不是FTP所在根目录,则需指定 server-dir

文档: https://github.com/marketplace/actions/ftp-deploy#settings

添加 Actions secrets

在此仓库 -> Settings -> Secrets 中添加FTP信息

image-20210123155154776

FTP_USERNAME 为FTP用户名

FTP_SERVER 为FTP地址

FTP_PASSWORD 为FTP密码

其 secret value 填相应值

PS:GitHub 会自动将secret名转为大写

git push 触发一次,查看Actions,完成

补充

FTP 连接失败

通过WinSCP 连接FTP失败

image-20210123151942323

解决如下:

  1. 进入高级设置 image-20210123152132698 取消勾选 Passive mode,点击OK image-20210123152314095 点击 Save,再次 Login 即可进入 image-20210123152422019 image-20210123152526034 image-20210123152548733

注意:这方法治标不治本,由于所使用的GitHub Actions FTP包不支持主动模式,仅支持被动模式(passive mode),所以建议不要使用此方法,此方法仅针对本地开发机,如果被动模式无法连接,可尝试放行端口,下面放行被动模式所需要的随机端口。

首先必须在阿里云ECS - 安全组放行 21端口,这是FTP协议默认端口,必须放行,注意:出入方向都要放行

image-20210123193715927

然后,查看 FileZilla Server 的被动模式端口

image-20210123193413705

image-20210123193803558

image-20210123193836214

由上图,发现被动模式端口为 3000-4000,因此需要放行此范围的端口

image-20210123193940928

补充:

3000/4000 代表 <开始端口>/<结束端口>,即 3000到4000,同上,出入方向都要放行

阿里云ECS-添加安全组规则:https://help.aliyun.com/document_detail/25471.html

放行完成后,再次以passive mode连接,连接成功。

GitHub Actions 报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
INFO  Validating config
INFO  Validating config
INFO  Start processing
FATAL {
  err: Error: 
Error: R][hexo-renderer-pandoc] On /home/runner/work/notebook/notebook/source/_posts/2021-miniapp-report.md
Error: R][hexo-renderer-pandoc] pandoc exited with code null.
      at Hexo.pandocRenderer (/home/runner/work/notebook/notebook/node_modules/hexo-renderer-pandoc/index.js:114:11)
      at Hexo.tryCatcher (/home/runner/work/notebook/notebook/node_modules/bluebird/js/release/util.js:16:23)
      at Hexo.<anonymous> (/home/runner/work/notebook/notebook/node_modules/bluebird/js/release/method.js:15:34)
      at /home/runner/work/notebook/notebook/node_modules/hexo/lib/hexo/render.js:75:22
      at tryCatcher (/home/runner/work/notebook/notebook/node_modules/bluebird/js/release/util.js:16:23)
      at Promise._settlePromiseFromHandler (/home/runner/work/notebook/notebook/node_modules/bluebird/js/release/promise.js:547:31)
      at Promise._settlePromise (/home/runner/work/notebook/notebook/node_modules/bluebird/js/release/promise.js:604:18)
      at Promise._settlePromiseCtx (/home/runner/work/notebook/notebook/node_modules/bluebird/js/release/promise.js:641:10)
      at _drainQueueStep (/home/runner/work/notebook/notebook/node_modules/bluebird/js/release/async.js:97:12)
      at _drainQueue (/home/runner/work/notebook/notebook/node_modules/bluebird/js/release/async.js:86:9)
      at Async._drainQueues (/home/runner/work/notebook/notebook/node_modules/bluebird/js/release/async.js:102:5)
      at Immediate.Async.drainQueues [as _onImmediate] (/home/runner/work/notebook/notebook/node_modules/bluebird/js/release/async.js:15:14)
      at processImmediate (internal/timers.js:461:21)
} Something's wrong. Maybe you can find the solution here: %s https://hexo.io/docs/troubleshooting.html
Error: Process completed with exit code 2.

image-20210123155756594

原因:由于需要让Hexo支持 LateX 数学公式渲染,所以使用了 hexo-renderer-pandoc 替换了hexo默认的markdown渲染引擎,而我本地电脑已安装了 pandoc,而 GitHub Actions环境没有 pandoc,所以导致报错。

hexo-deploy.yml 中,此步骤即用于在 Ubuntu 中安装 pandoc

1
2
3
- name: Install Pandoc
      run: |
        sudo apt-get install pandoc

GitHub Actions FTP 上传失败

image-20210123175000395

这是由于此GitHub Actions (FTP-Deploy-Action)使用了被动模式连接,参考上文配置好被动模式连接即可

使用 另一个 FTP GitHub Action

https://github.com/airvzxf/ftp-deployment-action

deploy-hexo.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
on: push
name:  Deploy website on push
jobs:
  web-deploy:
    name:  Deploy
    runs-on: ubuntu-latest
    steps:
    - name:  Get latest code
      uses: actions/checkout@v2.3.2

    - name: Use Node.js 12
      uses: actions/setup-node@v2-beta
      with:
        node-version: '12'
        
    - name: Install Pandoc
      run: |
        sudo apt-get install pandoc
      
    - name:  Build Project
      run: |
        npm install hexo-cli -g
        npm install
        hexo clean
        hexo generate
    
    - name:  Sync files
      uses: airvzxf/ftp-deployment-action@latest
      with:
        server: ${{ secrets.FTP_SERVER }}
        user: ${{ secrets.FTP_USERNAME }}
        password: ${{ secrets.FTP_PASSWORD }}
        local_dir: "./public"
        delete: "true"

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...