Total Pageviews

Tuesday, 24 January 2017

把github page作为静态站点的做法

要使用 github page 作为站点,需要这么做:
  • 创建一个名字为username.github.io的仓库, 在本地创建一个空仓库。
    $ mkdir username.github.io/
    $ cd username.github.io/
    $ git init
    $ git commit --allow-empty -m "Create master branch"
    $ git remote add origin git@github.com:username/username.github.io.git
    $ git push -u origin master
使用master作为发布分支。每次博客生成后推到master,但为了偷懒,可以选择使用持续集成服务(CircleCI)完成自动构建推送。

--------------

  • 创建一个orphan分支来管理站点的源代码
    $ git checkout --orphan hakyll
    $ git submodule add git@github.com:username/username.github.io.git _site
    $ git commit -m "Create hakyll branch"
    $ git push -u origin hakyll
    Hakyll 会把站点生成到_site目录中,所以这里把_site目录作为 submodule,把_site中的内容推到master分支。

Hakyll 配置

使用下面命令完成 Hakyll 初始化,编译。
$ hakyll-init .
$ stack init
$ stack build
之后可以使用下面三条命令:
$ stack exec site build  // 生成站点
$ stack exec site watch  // 在 localhost:8000 查看站点
$ stack exec site clean  // 删除缓存,站点
在你完成配置,修改模板样式后,提交一次。记得在gitignore中添加_site,_cache和其他Haskell 忽略文件
$ git add --all
$ git commit -m "Configure Hakyll"
$ git push origin hakyll

CircleCI 配置

CircleCI 提供了持续集成服务,对 Haskell 的支持较好。配置文件如下:
machine:
  ghc:
    version: 7.10.1

dependencies:
  cache_directories:
    - "~/.stack"
    - ".stack-work"
  pre:
    - curl -L https://github.com/commercialhaskell/stack/releases/download/v1.1.2/stack-1.1.2-linux-x86_64.tar.gz | tar zx -C /tmp
    - sudo mv /tmp/stack-1.1.2-linux-x86_64/stack /usr/bin
  override:
    - stack setup
    - stack build

test:
  override:
    - echo "skip test command"
  post:
    - git submodule init
    - git submodule update
    - cd _site/ && git checkout master
    - stack exec site build

deployment:

  production:
    branch: hakyll
    commands:
      - git config --global user.email circleci@circleci
      - git config --global user.name CircleCI
      - cd _site/ && git status
      - cd _site/ && git add --all
      - cd _site/ && git commit -m "Update (`date '+%F %T %Z'`) [ci skip]"
      - cd _site/ && git push origin master
配置有以下几点:
  • 由于 CircleCI 默认使用 cabal,并没有安装 stack,所以需要把 stack 的安装写进去。
  • 需要把 stack 安装的包和 hakyll 编译的文件缓存下来,添加缓存目录~/.stack.stack-work
  • 跳过测试,把站点生成到_site
  • 通过[ci skip]在推到master时跳过 ci。
CircleCI 配置完成后,提交到hakyll分支。
$ git add circle.yml
$ git commit -m "Configure CircleCI"
$ git push origin hakyll
CircleCI 第一次构建要花大约30分钟,之后你就可以访问你的站点了.

from http://birdgg.me/posts/2016-09-11-hakyll.html

相关帖子:http://briteming.blogspot.com/2017/01/create-github-page-with-hakyll-and.html

No comments:

Post a Comment