阅读 108

用github actions部署你的应用(hexo)

之前github pages 一直都是用 travis-ci 部署的,除了慢一点没什么毛病,所以一直没有转向Github Actions的念头。

但是最近又重新买了个服务器,正好趁这个时间学一下 Actions,Actions对比travis有个很大的亮点就是他的生态很好,你要用什么插件搜一下直接就可以用了,减少很多工作。

access token

因为我们构建完需要Push到仓库,所以得有个 Github access token,可以直接点进链接申请,勾选repo的选项 ,然后点击生成Token,这时候先别关闭页面,后面要用到这个token。

secrets

进入要部署的项目的setting,左边有个导航进 secrets,在这里生成Actions需要用到的所有秘钥,只要你觉得有隐私的或者需要保密的全都在这里定义字段,然后配置文件直接使用就好。

我的Secrets总共有四个,如果只是部署到 github pages的话,你只需要token一个就够了

  • token: 存放上一步生成的 access token
  • SSH_PRIVATE: 存放SSH到服务器的私钥
  • USERNAME: 要登录服务器的用户
  • HOST: 要登录的服务器host

Action workflow

点击项目顶部导航进入 Actions,随便点一个模板进去,或者直接 set up workflow yourself新建一个新的

我的workflow基本就是搬 travis 的,按照github actions的格式改了下而已。

大概流程是: 拉取代码,初始化环境,生成静态资源,推送到目标仓库 或 部署到目标服务器

name: Blog deployer # 当前workflow的名字

# 触发的时机 当 master 分支有 push 的操作时执行
on: 
  push:
    branches:
      - master

jobs: # jobs一般都是并行执行
  build: 
    name: Build and publish 
    runs-on: ubuntu-latest # 运行环境

    steps:
      # 使用 actions/checkout 这个插件 用于拉取当前仓库的master分支
      - uses: actions/checkout@master 

      # 使用 actions/setup-node@v1 插件配置node环境
      - name: Use Node.js 10.x
        uses: actions/setup-node@v1
        with:
          node-version: 10.x

      # 安装 hexo-cli 与项目所需的 node_modules
      - name: Setup Hexo env
        run: |
          npm install hexo-cli -g
          npm install
        
      # 生成静态资源
      - name: Generate public files
        run: |
          hexo clean
          hexo g

      # 部署到 Github Pages 这里没有用到 hexo的 Deploy
      - name: Deploy To Github Pages
        env:
          GH_REF: github.com/jsonz1993/jsonz1993.github.io
        run: |
          # 配置本地git
          git config --global user.name "Jsonz1993" 
          git config --global user.email "jsonz@qq.com"
          # 生成 commit message 默认抓取最后一次提交信息
          git log --pretty=format:"CI: %s" --date=short -n 1  > commit-message.log
          git clone https://${GH_REF} .deploy_git
          cd .deploy_git
          git checkout master
          cd ../
          mv .deploy_git/.git/ ./public/
          cd ./public/
          git add .
          git commit -F ../commit-message.log
          git push --force --quiet "https://${{ secrets.token }}/@${GH_REF}" master:master
      
      # 部署到自己的服务器
      - name: Deploy to Private Server
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USERNAME }}
          key: ${{ secrets.SSH_PRIVATE }}
          script: |
            cd ${{ secrets.SERVER_PATH }} && git pull
复制代码

使用 GitHub 操作自动化工作流程

阮一峰 Github Actions