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

推荐订阅源

SecWiki News
SecWiki News
I
InfoQ
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
博客园 - Franky
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
博客园_首页
罗磊的独立博客
V
V2EX
李成银的技术随笔
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
True Tiger Recordings
Vercel News
Vercel News
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
F
Fox-IT International blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
M
Microsoft Research Blog - Microsoft Research
Know Your Adversary
Know Your Adversary
爱范儿
爱范儿
The Register - Security
The Register - Security
G
Google Developers Blog
The Hacker News
The Hacker News
Malwarebytes
Malwarebytes
S
Securelist
博客园 - 三生石上(FineUI控件)
Jina AI
Jina AI
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
S
SegmentFault 最新的问题
博客园 - 叶小钗
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
博客园 - 聂微东
T
Threatpost
博客园 - 【当耐特】
D
Docker
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
V
Visual Studio Blog
C
Cisco Blogs
IT之家
IT之家
S
Security Archives - TechRepublic
Latest news
Latest news
阮一峰的网络日志
阮一峰的网络日志

Razeen`s Blog

Let's Encrypt 推出 Gen Y 根证书架构:揭示 Web PKI 的五大未来趋势 通过 Wi-Fi 自动备份你的 iPhone 到 Nas 管理培训感悟:从技术视角看管理之路 UPS 一拖多:保护你的 NAS 和 Linux 服务器 从影音中心到 AI 助手:我的50款 Homelab 服务清单 从SSL证书有效期将缩短到47天聊开去 部署一个自己的 Running Page 谈谈特斯拉 Model Y 用车一年的感受和费用分析 弃用 Disqus 评论,使用自建 Waline 使用 Prometheus 和 Grafana 搭建你的证书监控面板 服务器迁移记:一次磁盘换板引发的Linux分区与挂载的学习 改善信息来源, 利用 RSS 高效获取资讯 (RSShub + Reeder5 + WeWe RSS) 多种 Docker 镜像拉取解决方案与实践 App分享 | AppCleaner - Mac上的卸载神器 Azure OpenAI API 申请和使用 如何开通 OneKey 虚拟信用卡,并充值消费 如何拥有一个可长期在国内使用的国外手机号码 分享开通 ChatGPT Plus 过程 如何开通 Depay 虚拟信用卡,并充值消费 如何开通欧易Web3钱包, 交易入账 如何5分钟内1块钱注册 ChatGPT 科学上网 如何注册美区的 Apple ID (2023年/无需科学上网) NAS折腾记(11): NASTool3.0体验和降级 NAS折腾记(10): Docker版本的NASTool配置 NAS折腾记(9): NASTool与微信交互,微信发送消息远程下载电影【多图】 NAS折腾记(8):群晖安装 NASTool 实现影音半自动化【多图】 内网穿透(2):Tailscale 组网实现内网穿透,操作简单,无成本 内网穿透(1):总结了11中内网穿透的方式,总有一种适合你 NAS折腾记(7):从零开始设置(黑)群晖系统 NAS折腾记(6):黑群晖系统安装好后怎么洗白? NAS折腾记(5):群晖硬盘休眠设置与分析 NAS折腾记(4): 20分钟手把手带你完美安装 DS918+ 黑群晖7.1.1 NAS折腾记(3):NAS 装机 NAS折腾记(2):B360-ITX 双M.2 双2.5G网口 6 SATA主版 开箱 NAS折腾记(1):328元的4盘位Nas机箱开箱 Openwrt + Clash 全局科学上网 Newifi3 刷入 OpenWrt 固件 v21.02 利用 Markdown 画一些流程图、时序图、甘特图等 Homelab(8): 搭建自用 Gitlab 与 Docker 仓库 Nginx Tcp 转发保留客户端真实 IP (PROXY Protocol) Homelab (7):IPSec VPN(基于证书认证)客户端设置 Homelab (6): 基于自签发证书的 IPSec VPN 搭建 Homelab (5): DDNS 动态域名解析 Homelab (4): Linux 服务器基础环境准备 Homelab (3): 整体网络与基础硬件介绍 Go学习笔记(十)老项目迁移 go module 大型灾难记录 记一次 Nginx DNS 缓存导致转发问题 Homelab (2): 电信悦me网关修改桥接模式,路由器拨号 Homelab (1):5分钟上手黑群晖 NAS 终极 Bash 脚本指南 Typora 自动上传图片到七牛云 Ubuntu 20.04 LTS 有线网卡驱动安装 折腾 Ubuntu 20.04 LTS 开发环境 Go学习笔记(九) 计时器的生命周期[译] 利用 git hook 规范你的代码与 commit message 规范 git commit message 与自动化版本控制 超详细 vim 配置 (with MacVim) Golang 中的 RESTful API 最佳实践 折腾服务器(开篇) 我的第一台个人服务器 Newifi3 实现低成本家庭级科学上网 Go学习笔记(八) | 使用 os/exec 执行命令 如何用 Go 调用 Windows API Mac OS 自动根据 WI-FI 名字改变网络位置 关于 Docker 清理 MIME Types 速查表 Go学习笔记(七) | 理解OAuth 2.0并实现一个客户端 我又又又把博客迁移了 Go学习笔记(六) | 使用swaggo自动生成Restful API文档 Go学习笔记(五) | 使用代码片段(snippets)提高编码效率 书单 - 2018 IPFS 初体验,利用 IPFS 托管你的静态网站 记一次 PostgreSQL LIKE 索引优化,联合字段 LIKE 查询优化。 Disqus 添加有趣的 Reactions 的功能 TLS 1.3 详解 (RFC 8446解读) gRPC在Go中的使用(三)gRPC实现TLS加密通信与流模式 gRPC在Go中的使用(二)gRPC实现简单通讯 gRPC在Go中的使用(一)Protocol Buffers语法与相关使用 CentOS 安装 tshark 抓包工具 Go学习笔记(四) | win上使用VSCode搭建Go开发环境 日常 Postgres 数据库点滴记录 简单了解 PKCS 规范 美食篇 | DIY戚风蛋糕(烤箱做蛋糕) Go学习笔记(三) | 怎么写Go基准测试(性能测试) TLS1.3正式更新,为Nginx添加TLS1.3的支持 一次诡异的数据库删除 GitHub Pages自定义域名开启HTTPS 证书透明度是什么?它是怎么工作的? Go学习笔记(二) | 我对 recover 的一点误解 搭建证书透明度(certificate-transparency)日志服务之从入门到放弃 修复远程登陆 Centos 时,出现 UTF-8 Warning HTTPS篇之SSL握手过程详解 Go学习笔记(一) | postgres与golang点点滴滴 AWS 命令行界面(aws-cli)从安装到快速上手 数字证书分类及怎么区分各类数字证书 常用 linux 命令小结(一)文件目录操作 云服务器搭建 hexo 博客,git hooks自动更新 SSH 免密登陆, SSH Config 配置 Golang CGO Mac 交叉编译 Windows 使用 goose 让数据库迁移更加轻松
Github Actions 初体验之自动化部署 Hexo 博客
2021-06-26 · via Razeen`s Blog

觊觎了 Github Actions 很久了,昨天尝试将自己的博客用它来部署,总体下来感觉不错。

Github Actions 是 Github 推出的自动化工作流, 就像 Gitlab 的 CI/CD, Travis CI 一样,能帮我们完成一些 CI/CD 的工作流,实现自动化构建、测试、打包、部署等等。

这篇文章主要实现 只需要将文章推送到 Github ,Github Actions 自动完成构建静态文件,以及更新 Github Pages 仓库的流程。

思路

  1. 先创建一个私有仓库,存放我们的 Hexo 主题以及配置;
  2. 在上面仓库中创建一个工作流,每次推送可以触发执行 打包、生成静态文件;
  3. 自动将静态文件推送到 yourname.github.io Github Pages 仓库;

有了思路我们就开始准备工作。

准备

  1. 创建好了你的 yourname.github.io Github Pages 仓库;

  2. 在 Hexo 配置文件config.yaml 中配置好部署配置,如:

    deploy:
      - type: git
        repo: git@github.com:yourname/yourname.github.io.git
        branch: master
    
  3. 创建一个私有仓库,将 Hexo 配置以及主题 文件推送上来;

  4. 然后,我们需要创建一个 SSH 部署密钥(在部署的时候,Github Actions 需要推送文件到 yourname.github.io, 为了安全,我们单独添加一个部署密钥)

     ssh-keygen -f github-page-deploy-key
    

    执行以上命令可以生成 SSH 密钥对,公钥github-page-deploy-key.pub 与 私钥 github-page-deploy-key

  5. 我们将私钥配置到 Hexo 仓库的 Secrets 中。 打开 Settings -> Secrets -> New repository secret, 如下图所示:

通过记事本等打开 github-page-deploy-key 内容,填入 Value 中;

Name 中为该 Secrets 设置一个名字,如 MY_BLOG_DEPLOY_KEY, 后面写 Action 配置文件会用到。

  1. 在 GitHub Pages 仓库中添加公钥github-page-deploy-key.pub, 打开 Settings -> Deploy Keys -> Add deploy key , 如下图所示:

    Key 中粘贴 公钥github-page-deploy-key.pub 内容;

    Title 可以随便取一个名字, **勾选上 Allow write access **。

到这里,我们的准备工作就完成了,开始创建并编排工作流。

创建并编排 Github Actions

在 Hexo 仓库中创建 .github/workflows/deploy.yml 文件,如下图所示:

deploy.yml 中添加编排配置,如:

name: deploy_my_blog
on: [push]
jobs:
  build_and_deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: '12'
      - name: Prepare ssh env
        run: |
          mkdir -p ~/.ssh
          echo "$SSH_DEPLOY_KEY" | tr -d '\r' > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan -H 'github.com' >> ~/.ssh/known_hosts          
        env:
          SSH_DEPLOY_KEY: ${{ secrets.MY_BLOG_DEPLOY_KEY }}
      - name: Prepare hexo and npm env
        run: |
          npm install -g hexo-cli
          npm install          
      - name: Prepare git env
        run: |
          git config --global user.email me@razeen.me
          git config --global user.name razeencheng          
      - name: Deploy Blog
        run: | 
          hexo clean
          hexo g
          hexo d

我们来简单看一下这个配置:

  • name: deploy_my_blog: name 定义该工作流的名称为deploy_my_blog

  • on: [push]: on 定义触发条件,push 指我们每次推送的时候触发这个工作流。

  • jobs: 在 jobs 中定义这个工作流执行的所有任务。

    • build_and_deploy : 我给这个任务取的ID

      • runs-on: ubuntu-latest: runs-on 用来指定我们当前这个任务执行的机器。官方给我们几个共享的机器可以使用:

        我们这里用的 Ubuntu 的机器。

      • steps: 在任务中,我们执行的一系列的任务就叫steps

        • - uses: actions/checkout@v2 - uses: actions/setup-node@v2 : 用uses 来指定我们需要调用的 Action。

          我们这里用 actions/checkout@v2 Checkout 到当前的仓库,

          actions/setup-node@v2 来安装 Node.js 到当前的环境中,用with: node-version 来指定 Node.js 的版本。由于我使用了一些较老的插件,和新版本Node.js有兼容问题, 所以Node.js 版本使用的是12, 你可以根据你实际情况来。

        • 经过上面两个步骤,我们就进入了我们 Hexo 主题和配置仓库中,并且准备好了 Node.js 环境。 接下来,写入部署 SSH 密钥。

                - name: Prepare ssh env  # 给我们这部取一个名字,可以省略
                  run: |
                    mkdir -p ~/.ssh
                    echo "$SSH_DEPLOY_KEY" | tr -d '\r' > ~/.ssh/id_rsa
                    chmod 600 ~/.ssh/id_rsa
                    ssh-keyscan -H 'github.com' >> ~/.ssh/known_hosts          
                  env:
                    SSH_DEPLOY_KEY: ${{ secrets.MY_BLOG_DEPLOY_KEY }}
          

          env中读取我们设置的Secrets私钥,并写入环境变量SSH_DEPLOY_KEY.

          run 中,定义了我们该步骤运行的脚本。创建.ssh目录,写入私钥文件,并添加known_hosts.

        • 接下来就是安装 hexo 和 博客需要的插件了。

                - name: Prepare hexo and npm env
                  run: |
                    npm install -g hexo-cli
                    npm install          
          
        • 接下来把 Git 配置好,配置用于推送到 Github Pages 的邮箱和用户,如下,你可以修改成自己的邮箱和用户。

                - name: Prepare git env
                  run: |
                    git config --global user.email me@razeen.me
                    git config --global user.name razeencheng          
          
        • 万事具备,开始部署,这一步就是我们原来手动部署时执行命令,即生成静态文件,并部署。

                - name: Deploy Blog
                  run: | 
                    hexo clean
                    hexo g
                    hexo d
          

这样,我们就编排好了,接下来只需要推送代码就可以触发执行了。

关于更多的 Github Actions 语法可以看官方文档.

触发执行

我们本地将代码推送上去后,可以在 Actions 看到正在执行和历史执行的 Action.

点击每一条 Action,可查看详细日志。

整个流程执行下来一分钟不到,很快。

之后,你可以看下你的 Github Pages, 应该是已经更新了~。

最后

Github Action 整体使用下来,感觉很简单,高效。共享的 2核7G的 Runner 也够我们折腾不少东西了。更爽的是,利用这些自动化的工具,不仅让我节省了几分钟打包的时间,更帮我省去了换个机器写博客需要折腾环境的问题。

同时也希望能够帮到你。

参考

GitHub Actions

利用 Github Actions 自动部署 Hexo 博客