Hugo Automation与Travis-ci和Github页面

时间:2017-03-13 07:27:33

标签: github travis-ci github-pages static-site hugo

我正在使用github托管我的博客并使用静态网站Generator HUGO使其成为可能,但是使其脱机并编译它太繁琐,然后将公共文件夹上传到gh-pages或使其在docs文件夹中可用。

所以我想自动化这个过程,所以每当我在内容中创建一个新的.md文件时,它应该生成静态站点并将公共文件夹复制到gh-pages或以下组合 -

  • “source”分支中的源文件和发布到master [用户和组织页面]的“public”内容
  • 主文件中的源文件,并将“公共”文件夹内容发布到“gh-pages”
  • 您想提出的任何其他方法

注意:我主要想使用Travis-ci,但任何其他自动化平台也会很酷

2 个答案:

答案 0 :(得分:0)

为GitHub Pages建立Hugo博客的一种好方法是使用两个单独的存储库:

  • 第一个存储库包含博客源
  • 第二个存储库包含生成的内容。

命名第二个存储库username.github.io(使用您的GitHub用户名)。 GitHub Pages将自动将其部署到https://username.github.io/

然后将第二个存储库作为git子模块添加到第一个存储库。子模块必须位于./public,Hugo会在该位置生成静态内容。这使您可以轻松地将生成的内容推送到GitHub。

git submodule add \
    https://github.com/username/username.github.io.git \
    public

此过程在Hugo官方教程Hosting on GitHub中有更详细的说明。


持续集成

如果要完全自动化,可以为第一个存储库设置Travis CI。我在此处撰写了有关此设置的详细文章:

  

Hosting a Hugo blog on Github Pages with Travis CI

Travis CI调用Hugo,并将生成的内容推回GitHub,然后由GitHub Pages进行部署。为此,您需要一个.travis.yml文件和一个小的部署脚本:

.travis.yml

---
install:
  - curl -LO https://github.com/gohugoio/hugo/releases/download/v0.55.4/hugo_0.55.4_Linux-64bit.deb
  - sudo dpkg -i hugo_0.55.4_Linux-64bit.deb

script:
  - hugo

deploy:
  - provider: script
    script: ./deploy.sh
    skip_cleanup: true
    on:
      branch: master

deploy.sh

#!/bin/bash

echo -e "\033[0;32mDeploying updates to GitHub...\033[0m"

cd public

if [ -n "$GITHUB_AUTH_SECRET" ]
then
    touch ~/.git-credentials
    chmod 0600 ~/.git-credentials
    echo $GITHUB_AUTH_SECRET > ~/.git-credentials

    git config credential.helper store
    git config user.email "username@users.noreply.github.com"
    git config user.name "username"
fi

git add .
git commit -m "Rebuild site"
git push --force origin HEAD:master

最后,在Travis CI上设置环境变量GITHUB_AUTH_SECRET,以提供对username.github.io存储库的访问。博客文章还介绍了如何为此使用单独的漫游器帐户,从而限制了对username.github.io存储库的CI访问。

答案 1 :(得分:0)

这天(2020年10月),您将不需要使用外部CICD服务(例如Travis-CI)。

GitHub Action Hero · James Ives and “GitHub Pages Deploy” 中的“ Michelle Mannering”所述,您可以使用GitHub Actions。

具体来说,James IvesGitHub Pages Deploy Action

此GitHub Action将自动将您的项目部署到GitHub Pages。
可以对其进行配置,以将生产就绪代码推送到您想要的任何分支中,包括gh-pagesdocs
它还可以处理跨存储库的部署。

示例:

name: Build and Deploy
on: [push]
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout ?️
        uses: actions/checkout@v2.3.1 # If you're using actions/checkout@v2 you must set persist-credentials to false in most cases for the deployment to work correctly.
        with:
          persist-credentials: false

      - name: Install and Build ? # This example project is built using npm and outputs the result to the 'build' folder. Replace with the commands required to build your project, or remove this step entirely if your site is pre-built.
        run: |
          npm install
          npm run build

      - name: Deploy ?
        uses: JamesIves/github-pages-deploy-action@3.6.2
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          BRANCH: gh-pages # The branch the action should deploy to.
          FOLDER: build # The folder the action should deploy.
          CLEAN: true # Automatically remove deleted files from the deploy branch