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

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
Threatpost
P
Privacy International News Feed
T
Tenable Blog
Know Your Adversary
Know Your Adversary
C
Cisco Blogs
P
Proofpoint News Feed
Spread Privacy
Spread Privacy
G
GRAHAM CLULEY
爱范儿
爱范儿
U
Unit 42
K
Kaspersky official blog
C
Cybersecurity and Infrastructure Security Agency CISA
Jina AI
Jina AI
O
OpenAI News
L
LangChain Blog
PCI Perspectives
PCI Perspectives
P
Privacy & Cybersecurity Law Blog
Latest news
Latest news
Cisco Talos Blog
Cisco Talos Blog
F
Full Disclosure
L
Lohrmann on Cybersecurity
V
V2EX
L
LINUX DO - 热门话题
S
Security Affairs
量子位
Martin Fowler
Martin Fowler
云风的 BLOG
云风的 BLOG
Schneier on Security
Schneier on Security
月光博客
月光博客
MyScale Blog
MyScale Blog
C
CERT Recently Published Vulnerability Notes
AWS News Blog
AWS News Blog
博客园 - 叶小钗
Forbes - Security
Forbes - Security
W
WeLiveSecurity
T
Troy Hunt's Blog
J
Java Code Geeks
Hacker News - Newest:
Hacker News - Newest: "LLM"
Google DeepMind News
Google DeepMind News
Attack and Defense Labs
Attack and Defense Labs
Apple Machine Learning Research
Apple Machine Learning Research
雷峰网
雷峰网
Google Online Security Blog
Google Online Security Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
TaoSecurity Blog
TaoSecurity Blog
H
Help Net Security
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

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 让数据库迁移更加轻松 开始使用Ghost
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 博客