Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

用github actions部署你的应用(hexo):2019-12-23 #19

Open
jsonz1993 opened this issue Jul 27, 2021 · 0 comments
Open

用github actions部署你的应用(hexo):2019-12-23 #19

jsonz1993 opened this issue Jul 27, 2021 · 0 comments

Comments

@jsonz1993
Copy link
Owner

本文为博客迁移过来,原文链接: 用github actions部署你的应用(hexo):2019-12-23

之前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 "[email protected]"
          # 生成 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant