NoteZ_技术博客 NoteZ_技术博客
🏠 首页
  • 📚 Web技术
  • 📋 Npm笔记
  • 📑 Markdown
  • 📄 Git笔记
  • 📝 Nginx文档
  • 📓 Linux文档
  • 📖 技术文档
  • 📜 其他文档
  • 🧊 NodeJs
  • 🎡 Express
  • 🔥 Rust
  • 🎉 Koa2
  • 🍃 MongoDB
  • 🐬 MySql
  • 🥦 Oracle
  • 🍁 Python
  • 🍄 JavaScript
  • 🌰 CSS
  • 🧄 HTML
  • 🥑 Canvas
  • 🌽 Nuxt
  • 🍆 React
  • 🥜 Vue
  • 🧅 TypeScript
  • 🌶️ AI
  • 📘 分类
  • 📗 标签
  • 📙 归档
⚜️ 在线编辑 (opens new window)
  • 📁 站点收藏
  • 📦 前端组件库
  • 📊 数据可视化
  • 🌈 开源插件
  • 🎗️ 关于我
  • 🔗 友情链接
GitHub (opens new window)

NoteZ_技术博客

前端界的小学生
🏠 首页
  • 📚 Web技术
  • 📋 Npm笔记
  • 📑 Markdown
  • 📄 Git笔记
  • 📝 Nginx文档
  • 📓 Linux文档
  • 📖 技术文档
  • 📜 其他文档
  • 🧊 NodeJs
  • 🎡 Express
  • 🔥 Rust
  • 🎉 Koa2
  • 🍃 MongoDB
  • 🐬 MySql
  • 🥦 Oracle
  • 🍁 Python
  • 🍄 JavaScript
  • 🌰 CSS
  • 🧄 HTML
  • 🥑 Canvas
  • 🌽 Nuxt
  • 🍆 React
  • 🥜 Vue
  • 🧅 TypeScript
  • 🌶️ AI
  • 📘 分类
  • 📗 标签
  • 📙 归档
⚜️ 在线编辑 (opens new window)
  • 📁 站点收藏
  • 📦 前端组件库
  • 📊 数据可视化
  • 🌈 开源插件
  • 🎗️ 关于我
  • 🔗 友情链接
GitHub (opens new window)
  • Web技术

  • Git笔记

  • Linux文档

  • Markdown

  • Nginx文档

  • Npm笔记

  • 技术文档

    • axios携带cookie
    • Echarts自定义提示框tooltip样式(包括提示框标题不固定)
    • gitee 仓库初始化
    • GitHub + jsDelivr + TinyPNG+ PicGo 打造稳定快速、高效免费图床
    • GitHub Actions 定时运行代码:每天定时百度链接推送
    • GitHub Actions 实现自动部署静态博客
      • 前言
      • 实现
      • 相关文章
    • GitHub加速下载项目的方法
    • GitHub高级搜索技巧
    • js以当前时间为基础,便捷获取时间(最近2天,最近1周,最近2周,最近1月,最近2月,最近半年,最近一年,本周,本月,本年)
    • JupyterLab二次开发环境配置以及踩的一些坑(笔记)
    • linux 虚拟机 ping 域名时,提示“未知的名称或服务原因分析“
    • Node.js中间件 - Multer详解
    • node.js使用supervisor或nodemon进行调试热更新
    • NodeJs的压缩文件之 - 模块 archiver 用法示例
    • Pdf数据解析
    • sh文件出现错误:Permission denied解决办法
    • vscode命令行以管理员身份运行
    • webpack 的简单使用
    • Web前端Vue离线存储之 - localForage.js使用方法
    • windows 多版本管理工具 nvm-windows
    • windows 如何配置 pip 镜像
    • WX小程序开发总结
    • Xshell 6 提示 “要继续使用此程序,您必须应用最新的更新或使用新版本”
    • yaml语言教程
    • 使用 SwitchHost 修改 host 文件为 GitHub 提速
    • 使用Gitalk实现静态博客无后台评论系统
    • 几款主流好用的富文本编辑器
    • 如何使用 babel 对es6语法进行转码
    • 如何使用 github pages 搭建你的个人站点
    • 如何使用openvscode-server搭建一个vscode代码编辑器
    • 如何配置 GitHub 页面的发布源
    • 如何配置GitHub登录账号密码,进行免密push仓库文件
    • 解决GitHub提交代码成功后并不显示绿格子问题
    • 解决百度无法收录搭建在GitHub上的个人博客的问题
    • VuePress 配置 MarkDown 文件目录.md
    • GitHub无法打开或加载慢的解决方法
    • win10 通过修改 hosts 提升github访问速度
    • Echarts实现自适应
    • gulp项目中ReferenceError_ primordials is not defined报错解决方法
    • 使用libreoffice将word转化成pdf
    • onlyoffice+vue实现在线预览在线编辑
    • Stable-Diffusion-WebUI 搭建使用教程
    • wind10通过安装nvm切换node版本
    • 解决虚拟机中ip地址总是自动变化办法
    • Git配置之邮箱设置
    • Echarts重写tooltip(提示框)代码
    • 使用 frp 实现内网穿透
    • win10 开机自启动 frp 实现内网穿透
    • Express 与 vue3 使用 sse(event-stream)实现消息推送并使用 nginx 转发
    • Linux 中使用 rsync 同步文件目录教程
    • Gitea数据备份与还原
  • 其他文档

  • 前端开发
  • 技术文档
NoteZ
2019-09-10
目录

GitHub Actions 实现自动部署静态博客

# GitHub Actions 实现自动部署静态博客

# 前言

我使用vuepress搭建了一个静态博客,挂在了Github pages和Coding pages (opens new window)上面。

coding pages在国内的访问速度比github pages要快很多,而且还可以被百度收录。

一开始的部署方式是使用sh部署脚本 (opens new window)把代码提交到这两个平台的仓库分支,虽然已经很方便了,但是我还想把博客未打包的源码提交到Github主分支上。这就需要我操作两次命令,我就想能不能只需要一次操作就可以同时把源码、部署代码一次性提交到两个平台呢?

# 实现

在了解GitHub Actions最近(2019.12)刚正式发布了之后,尝试使用它发现能够满足我的需求。GitHub Actions 入门教程 (opens new window)

首先,需要获取token,后面会用到。获取方法:github获取token官方文档 (opens new window)、coding获取token官方文档 (opens new window)。

然后,将这两个token同时储存到github仓库的Settings/Secrets里面。变量名可以随便取,但是注意要和后面的ci.yml文件内的变量名一致,这里取的是ACCESS_TOKEN和CODING_TOKEN。

token设置

GitHub Actions 的配置文件叫做 workflow 文件,存放在代码仓库的.github/workflows目录。

workflow 文件采用 YAML 格式 (opens new window),文件名可以任意取,但是后缀名统一为.yml,比如ci.yml。一个库可以有多个 workflow 文件。GitHub 只要发现.github/workflows目录里面有.yml文件,就会自动运行该文件。

我的ci.yml文件:

name: CI

# 在master分支发生push事件时触发。
on: 
  push:
    branches:
      - master
jobs: # 工作流
  build:
    runs-on: ubuntu-latest #运行在虚拟机环境ubuntu-latest

    strategy:
      matrix:
        node-version: [10.x]

    steps: 
      - name: Checkout # 步骤1
        uses: actions/checkout@v1 # 使用的动作。格式:userName/repoName。作用:检出仓库,获取源码。 官方actions库:https://github.com/actions
      - name: Use Node.js ${{ matrix.node-version }} # 步骤2
        uses: actions/setup-node@v1 # 作用:安装nodejs
        with:
          node-version: ${{ matrix.node-version }} # 版本
      - name: run deploy.sh # 步骤3 (同时部署到github和coding)
        env: # 设置环境变量
          GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} # toKen私密变量
          CODING_TOKEN: ${{ secrets.CODING_TOKEN }} # 腾讯云开发者平台(coding)私密token
        run: npm install && npm run deploy # 执行的命令  
        # package.json 中添加 "deploy": "bash deploy.sh"
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

这个配置文件会在我push提交代码到主分支时触发工作,运行环境是ubuntu-latest,工作步骤:

  • 一,获取仓库源码

  • 二,安装nodejs,打包项目有用到nodejs

  • 三,把token设置到环境变量,安装项目依赖,并运行deploy.sh文件,

ACCESS_TOKE 和 CODING_TOKEN 都是保存在github仓库的Settings/Secrets位置的私密变量,仓库代码中可以通过<secrets.变量名>来获取,保证了token的私密性。

再来看看将要被运行的deploy.sh部署代码:

#!/usr/bin/env sh
# 确保脚本抛出遇到的错误
set -e
npm run build # 生成静态文件
cd docs/.vuepress/dist # 进入生成的文件夹

# deploy to github
echo 'blog.NoteZ.com' > CNAME
if [ -z "$GITHUB_TOKEN" ]; then
  msg='deploy'
  githubUrl=git@github.com:NoteZ/blog.git
else
  msg='来自github action的自动部署'
  githubUrl=https://NoteZ:${GITHUB_TOKEN}@github.com/NoteZ/blog.git
  git config --global user.name "NoteZ"
  git config --global user.email "894072666@qq.com"
fi
git init
git add -A
git commit -m "${msg}"
git push -f $githubUrl master:gh-pages # 推送到github

# deploy to coding
echo 'www.NoteZ.com\nNoteZ.com' > CNAME  # 自定义域名
if [ -z "$CODING_TOKEN" ]; then  # -z 字符串 长度为0则为true;$CODING_TOKEN来自于github仓库`Settings/Secrets`设置的私密环境变量
  codingUrl=git@git.dev.tencent.com:NoteZ/NoteZ.git
else
  codingUrl=https://NoteZ:${CODING_TOKEN}@git.dev.tencent.com/NoteZ/NoteZ.git
fi
git add -A
git commit -m "${msg}"
git push -f $codingUrl master # 推送到coding

cd -
rm -rf docs/.vuepress/dist
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
35

这个文件使用Shell命令 (opens new window)写的,它会先运行打包命令,进入打包好的文件,创建一个自定义域名的CNAME文件(如果你没有自定义域名可去掉这个命令),判断是否有token环境变量,如果没有说明是在本地自己的电脑上运行的部署,使用ssh代码仓库地址,如果有token环境变量,说明是GitHub Actions自动触发的部署,此时使用的是可以通过toKen来获取代码提交权限的提交地址。最后通过git命令提交到各自的仓库,完成部署。

提示:

  • Shell 可以获取到环境变量。

  • 我想给两个平台上部署的博客不一样的自定义域名,因此做了分开创建CNAME文件,分开提交。

至此,我前面提到的需求就实现啦,只需要把源码push到github仓库这一个步骤,后面的博客打包、部署到github和coding等工作都由GitHub Actions来自动完成。

如下你想查看部署日志,你可以到github仓库的Actions这一项查看。

部署日志

# 相关文章

《GitHub Actions 定时运行代码:每天定时百度链接推送》 (opens new window)

#GitHub
上次更新: 2024/01/30, 00:35:17
GitHub Actions 定时运行代码:每天定时百度链接推送
GitHub加速下载项目的方法

← GitHub Actions 定时运行代码:每天定时百度链接推送 GitHub加速下载项目的方法→

最近更新
01
Gitea数据备份与还原
03-10
02
Linux 中使用 rsync 同步文件目录教程
03-10
03
Linux 使用 rsync 互相传输同步文件的简单步骤
03-08
更多文章>
Theme by Vdoing | Copyright © 2019-2025 NoteZ,All rights reserved | 冀ICP备2021027292号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式