基于GitLab和GitHub个人博客自动化部署及发布(CI/CD)

今天看了业界比较知名的个人博主左耳朵耗子-陈浩在极客时间专栏的博文深有感触,其中对于自己写博如何将文章写得“独一份”,这是你需要思考和追求的,与其你不断优化站点的SEO,不如让你的文章更加与众不同,观点是别人少有研究,或者你的观点更鲜明,你就能被别人搜索到。

基于这个理念,我觉得对这两个月折腾的个人建站最有价值的部分,有必要好好写写,分享给想通过自动化的方式部署及发布你的博文的朋友。

在这篇文章中,我主要分享如何借助外部工具实现你的博文自动部署及更新发布站点,其中涉及的主要技术有:

  • docker
  • git

借助的第三方平台时Gitlab,可能很多朋友听说或是用过Github,但对前者熟悉度不高。其实我也是在最近搞自动化部署站点的时候,才了解这个工具的。它的优势在于,不仅同样提供Pages功能,而且能够支持将资源push到仓库后,自动触发Gitlab的CI/CD模块,这样能够按照你设定的方式进行构建和部署发布。

ci-cd-test-deploy-illustration

就如同下面这张图中,你的资源更新和自动化部署是可以迭代更新的,运用到我们持续集成我们的文章,持续发布我们的站点,同样是可以的。

ci-cd-devops-loop

下面我详细说一下我们站点的自动化部署及发布需要进行的准备工作:

  1. 首先你需要创建一个gitlab的项目仓库,这里gitlab比github更nice的地方是支持免费的私有仓库服务,见创建资源仓库
  2. 然后编写gitlab能够自动部署的脚本命令 .gitlab-ci.yml
  3. 在编写上一步yml文件时,可以模仿这个gitlab hexo page
    这里我将我项目中用的yml文件贴出来,供大家参考:
# longsl/hexo2simiki
image: $你的docker-image镜像,如:longsl/hexo2simiki

pages:
  cache:
    paths:
    - /builds/longshilin/longshilindotcom/blog/node_modules
  script:
    - HOME=`pwd`
    - REMOTE_PROJECT=longshilindotcom
    - git config --global user.email "583297550@qq.com"
    - git config --global user.name "longsl"
    # 构建hexo
    - cd $HOME/blog
    - npm install
    - hexo g
    - cp -r blog $HOME/public
    # 构建simiki
    - cd $HOME/wiki
    - simiki g
    - cp -r wiki $HOME/public
    # 同步静态网页到国内git.dev.tencent.com仓库
    - cd ~; git clone git@git.dev.tencent.com:yilong0722/longshilindotcom.git;
    - rm -rf $REMOTE_PROJECT/*; cp -rf $HOME/public/* $REMOTE_PROJECT; cd $REMOTE_PROJECT
    - git add *; git commit -a -m "Site updated:`date`"; git push -f
  artifacts:
    paths:
    - public
  only:
  - master

在你的新增资源push到gitlab的代码仓库中,会自动触发CI/CD程序,即运行这个默认脚本。最终上面的artifacts中表示的是你要发布的静态资源。默认情况下它是可以通过gitlab page来访问,如果你觉得gitlab pages对国内的访问速度不够快的话,你还可以将public下的静态资源再推送到国内同样支持pages功能的coding.net,ps:最近coding.net被腾讯开发者平台收购了,成为了腾讯开发者平台的资源仓库。

  1. 在gitlab pages或者coding pages上绑定你的域名,可以参考gitlab绑定域名,并设置国内和国外的分区访问和DNS解析。实现国内国外对资源的加载速度的优化。下面是我的域名在腾讯云控制台中的设置详情。

这样能够使得国内用户和海外用户能相对快读的加载你的静态资源网页。

2019-01-09 更新
目前直接是通过将静态网站部署在github上,并开启page功能向全网同步。 资源CI/CD依然是gitlab,弃用国内的coding.net 因为在我使用期间经常出现域名解析出问题,访问不了的情况。

隐藏边栏