GitHub + Coding 实现博客快速自动化部署

背景

最近不是在弄博客嘛,之前活动的时候买的阿里云服务器过期了,现在也没优惠了,淦,搬砖党买不起啊,现在就想搞个服务器把我博客弄上去跑起来~

我主要就是玩下静态博客和nodejs啥的,对服务端没啥需求,dockermysql我也不搞,所以就算搞了服务器也是浪费呀,没必要没必要~

我白嫖党只是单纯的想要个白嫖的机会😎

简单说明下我的需求:

  1. 有个可以部署博客的服务器(当然最好是免费的,这个很重要😆
  2. 可以和GitHub绑定实现自动化部署(我代码都是放在GitHub的,我提交代码的时候希望可以实现博客自动更新)
  3. 要稳定,不能三天两头打不开页面了~那我岂不是很尴尬
  4. 访问速度要跟上,最好有CDN加速服务,不能等了半天页面还在转圈圈~
  5. 支持自定义域名,最好再给个免费SSL证书,咳咳~

这么简单的要求应该不过分吧~

hello

其实类似hexo等开源博客框架有些已经集成了自动部署至GitHubCoding的功能。

GitHub我们自不必多少,懂得都懂😐,开源代码首选,很多框架和库基本都对其做了相关部署支持,其提供的gh-pages服务也非常简单方便(GitHub Pages),可供我们快速部署一个网站,而且终生免费~,我直呼GitHub yyds~

对于静态网站服务,Gitee等也都有提供(Gitee Pages),有兴趣的可以自行探索,这里我们主要围绕Coding的使用做一些介绍

什么是Coding

Coding系腾讯旗下全资子公司, 旗下一站式软件研发管理平台—CODING(https://coding.net/ )是一站式软件研发管理协作平台,提供 Git/SVN 代码托管、项目协同、测试管理、制品库、CI/CD 等一系列在线工具,帮助研发团队快速落地敏捷开发与 DevOps 开发方式,提升研发管理效率,实现研发效能升级。

为什么要用Coding

对于Coding的作用,就我自身使用场景来说,抛开其协作平台能力不谈,其实就类似Gitee一样,属于国内部署,速度提升非常明显,而且还可以被百度收录。由于众所周知的原因,国内访问GitHub速度感人,我也试过一开始直接使用GitHubgh-pages,但是受网络环境影响很大、波动明显,效率很低,如果只是为了开发的demo展示倒也无妨,但毕竟是作为博客使用,还是求稳定,因此最终选择了Coding作为仓库镜像,当然这里换成Gitee也是一样的。

话不多说,开干~

开整

这里就以我的博客举例说明:https://ssscode.com/

生成 GitHub token 与 Coding token

这一步主要是为了给GitHub Action脚本提供token使用权限

Github tokenCoding token

  • GitHub token:执行gh-pages分支推送时需要对应GitHubrepo权限
  • Coding token:执行pushCoding仓库时需要对应Codingrepo权限
  • 为了安全性我们需要设置环境变量供脚本使用

token的配置还是蛮简单的,我们把 repo的权限勾选就行,其他无所谓

我们拿到GitHub生成的token值、与Coding生成的token值,在我们的GitHub仓库下

点击 setting => Secrets => New repository secret

新建秘钥,把值对应粘贴进去,确保 key是一致的: ACCESS_TOKEN/CODING_TOKEN

2

这样,在我们执行脚本的时候就可以获取到环境变量 ACCESS_TOKEN/CODING_TOKEN

创建 GitHub Action 脚本

首先在项目目录下创建文件夹 .github/workflows

然后我们在该目录下创建脚本文件 ci.yml

整体思路如下:

1

简单说明下:

  • ci.yml的主要作用就是在我们提交代码时,监听到我们的提交行为后,执行我们的build打包脚本,然后把生成的dist目录文件同步到Coding仓库,这一步主要是让Coding获取到部署文件。(同时我们也顺便部署了一个gh-pagesGitHub

  • 对于博客的部署,这一部分我们交给Coding处理。

yml语法也比较简单,有不清楚的同学可以查看阮一峰老师的教程 YAML 语言教程

# 流程名称
name: Deploy

# 监听事件
on:
  push: # 监听push事件,在master分支发生push事件时触发。
    branches:
      - master

jobs: # 工作流
  build: # 自定义名称
    name: deploy-site
    runs-on: ubuntu-latest #运行在虚拟机环境ubuntu-latest

    steps: # 步骤
      - name: Checkout # 步骤 1
        uses: actions/checkout@v2 # 作用:检出仓库,获取源码

      - name: Use Node@14.x # 步骤 2
        uses: actions/setup-node@v1 # 作用:安装nodejs环境
        with:
          node-version: 14.x

      - name: Install dependencies # 步骤 3
        run: npm install # 安装依赖

      - name: run deploy.sh # 步骤  3 (同时部署到github和coding)
        env: # 设置环境变量
          GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} # toKen私密变量
          CODING_TOKEN: ${{ secrets.CODING_TOKEN }} # toKen私密变量
        run: npm run deploy # 运行我们自己写的shell脚本

package.json

{
  "scripts": {
    "deploy": "bash deploy.sh"
  }
}

因为逻辑比较多,所以,我单独把部署流程写成独立的脚本抽离出来了,接下来我们切入 deploy.sh

编写部署脚本 deploy.sh

该脚本主要执行以下几个步骤:

  1. npm run build 打包生成 dist
  2. dist 目录 pushGitHub gh-pages 分支
  3. dist 目录 pushCoding master 分支

记得在文件头部指明编译器:#!/usr/bin/env sh

#!/usr/bin/env sh

# 确保脚本抛出遇到的错误
set -e

# 系统当前时间
nowDate=$(date "+%Y-%m-%d %H:%M:%S")

# 生成静态文件
npm run build

# 进入生成的文件夹
cd docs/.vuepress/dist

msg="deploy.sh===>update:${nowDate}"

# 设置 git用户信息
git config --global user.name "JS-banana"
git config --global user.email "sss213018@163.com"

# git commit 
git init
git add -A
git commit -m "${msg}"

# deploy to github
githubUrl=https://JS-banana:${GITHUB_TOKEN}@github.com/JS-banana/vuepress.git
git push -f $githubUrl master:gh-pages # 推送到github

# deploy to coding
#注意!!!这里需要使用coding提供的个人令牌的用户名和token
codingUrl=https://个人令牌的用户名:${CODING_TOKEN}@e.coding.net/ssscode/blog/vuepress.git 
git push -f $codingUrl master # 推送到coding

# 退回开始所在目录
cd -

# 删除 dist
rm -rf docs/.vuepress/dist

ok,至此,GitHub的工作结束~

我们现在去Coding接应一波~

Coding 配置静态博客自动化部署

Coding的配置还是比较友好的,我们只需要点点点,基本完事~

进入我们对应的项目,可以看到仓库已经更新了~

3

接着我们点击左侧菜单进入 持续部署 > 网站托管 页面,点击 新建网站

这里我们的代码来源选择现有仓库,仓库来源选择对应的仓库即可,勾选为静态网站,选择合适节点,等待系统部署即可

4

在部署成功后我们可以查看应用的基本信息

5

这时我们可以看到,系统会默认生成一个可访问的网站地址,如:https://serverless-page-bucket-2zrujpwd-1258454899.cos-website.ap-shanghai.myqcloud.com

不过,这个地址很不友好,看起来长长的一大串,要是让我记这个地址我直接原地裂开好不好~

好在,我们可以通过配置自定义域名设置自己的网站地址,这里比较简单,根据步骤和自定义域名配置文档几分钟基本就搞定了。

然后我们就可以使用自己的域名访问了~起飞:https://ssscode.com

最后就是HTPPS的SSL证书了,我们也可以直接免费开启,很方便,这里需要进入到腾讯云进行一些基本配置,按照按照步骤来即可。

6

OK,大功告成,总的来说还是比较简单的,没什么复杂的逻辑,都是一些基本配置和操作

不过,如果有不明白的地方,也可以花点时间看看文档,应对大多数场景基本没问题~

老实说,白嫖是真滴爽啊😏~

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,757评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,478评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,540评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,593评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,903评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,329评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,659评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,383评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,055评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,337评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,864评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,227评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,820评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,999评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,750评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,365评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,260评论 2 258

推荐阅读更多精彩内容