使用GithubAction自动编译部署博客

使用GithubAction实现全自动编译部署博客到服务器上(FREE!!!)

使用GithubAction自动编译部署博客

最近准备考试,更新有点慢哈

起因

我管理3个博客站,三种风格,太累了,而且用的是虚拟机编译并且push,效率确实很低,就想了下,要不利用GithubAction来进行远程编译,并且自动部署到网站服务器。

于是就有了这期。

实现过程

前置要求

  • Github可以使用Action的账号(基本你不作死就不会被BAN)
  • HEXO程序(默认你已经完成了配置,并且在本地已经可以运行)

Github配置

创建仓库

首先,你需要前往Github,新建一个仓库,如下面两图

image-20220825224710213

这里注意,最好选择私人仓库

image-20220825224804141

创建完毕后,继续步骤

将本地代码PUSH到github

刚才步骤完成后,你应该能看到这个

image-20220825224929842

我们找到我们的的程序根目录,在目录处打开终端

image-20220825225108007

按照Github上面的要求,初始化仓库并且push

倒数第二步请务必填写你自己的

最后一步可能会弹出登录授权,授权即可。

# 初始化仓库
git init
# 添加所有文件到等待上传区
git add
# 提交一次信息(-m是提交信息)
git commit -m "upload"
# 设置分支为main
git branch -M main
# 添加远程
git remote add origin <填写你自己的>
# 推送到远程
git push -u origin main

image-20220825225543035

push成功后,回到github,应该能看到你的代码了

image-20220825225602835

到这里,就说明配置成功了

配置GithubAction

现在就是我们的重头戏了,配置Action

配置采用yaml格式编写,默认你需要将它存放在.github/workflows目录下

这里我们在刚才上传仓库的目录下,新建文件夹.github/workflows,并且在目录中新建文件``buildBlog.yml`

image-20220825225750127

创建完毕后我们编写文件

第一个代码块中是带有注释的,请勿直接复制使用

name: Hexo deploy  #任务总名次

on: #触发器
  push: #push时触发
    branches: 
      - main #push 到main分支时触发
jobs: #工作流
  install:
    name: initEnv #任务名
    runs-on: ubuntu-20.04 #默认使用环境,请照抄,除非你有特殊需求
    steps:
    - name: install hexo #步骤名
      uses: actions/setup-node@v3 #这里是Action提供的插件,可以帮我们快速拥有一个nodejs环境,省的我们慢慢安装
      with:
        node-version: '16.14' # node版本号
    - name: install hexo and them 
      run: | #执行命令,下面一串都是
        git clone https://${{ secrets.GIT_TOKEN }}@github.com/<你的用户名>/<你自己刚才上传仓库的位置> #克隆你刚才的程序
        cd <你自己刚才上传仓库的位置> #进入程序目录
        npm install hexo-cli -g #安装HEXO
        npm install  #安装你主题带的各类依赖
        hexo generate #生成HTML
        pwd #测试用
    - name: Deploy #步骤名2
      uses: easingthemes/[email protected] #使用ssh远程部署插件
      env:
        SSH_PRIVATE_KEY: ${{ secrets.SERVER_ACCESS_TOKEN }} #你的服务器的ssh私钥
        ARGS: "-rltgoDzvO" #照抄就行,rsync的
        SOURCE: "blog.70m.cc-blogbuild/public/" #上传本地目录
        REMOTE_HOST: ${{ secrets.REMOTE_HOST }} #远程主机地址
        REMOTE_USER: ${{ secrets.REMOTE_USER }} #登录远程主机的用户名
        TARGET: ${{ secrets.TARGET }}  #将文件拷贝在哪里

这个action的步骤大概如下

  • 准备一个ubuntu20的环境
  • 使用node插件安装nodejs环境
  • 执行命令克隆你的HEXO程序(包括文章等)
  • 执行命令安装HEXO主程序
  • 编译你的HEXO博客
  • 将内容上传到指定服务器

这里有几个细节,记得替换自己个github仓库地址,这点很重要,同时有的hexo主题需要额外安装插件记得在执行命令处安装了。

配置完毕后,请保存,但是不要上传,还需要补充一个步骤

获取GithubToken

GithubToken是github的一个机制,他是一种凭证,我们需要他来获取仓库内数据,获取方式具体如下

点击头像,选择setting

image-20220825231657603

滑到最下面,选择Developer setting

image-20220825231744781

点击后选择呢personal access tokens选择new token

image-20220825231825503

这里可能需要要求你输入密码或者两步验证或者密码器,授权即可

image-20220825231902823

授权后,我们按照需要添加权限(看不懂就全部添加)设置有效期看个人,一直用就选不过期(不安全)

关键的就是repo权限和workflow权限,记得勾上,要是报错就加满权限。

image-20220825232022464

保存好秘钥,准备后续使用。

image-20220825232130209

添加机密

github的仓库大多数是开源的,但是有的配置文件需要加密,这些配置文件不希望被别人看到,因此需要你添加机密,机密是一次性的,只能在Action内被读取,一旦写入,没有任何方式可以查看了,因此安全可靠

我们现在就需要把我们的服务器密码和github Token(用于拉取私人仓库)写入到机密中,之后我们系统会自动识别${{ secrets.<变量名> }}这类变量,自动去机密中寻找并填入

PS:这样获取到的变量,你用echo查看都看不到,都是**

我们刚才的yaml共有五个变量,分别如下

  • GIT_TOKEN:刚才我们拿到的Github Token,用于拉取私人仓库
  • REMOTE_HOST:远程服务器的地址(IP/域名)
  • REMOTE_USER:远程服务器用户名
  • SERVER_ACCESS_TOKEN:服务器ssh私钥,用于rsync上传文件到服务器
  • TARGET:服务器存放文件位置,用来确定你要把文件存放到哪里

添加机密的位置如下

image-20220825232602021

点击后,选中右上角新建机密,上面Name填写变量名,下面填写信息(务必变量名和我一致)

image-20220825232620126

服务器秘钥/ip/用户名/部署位置,GithubToken这些信息请自行收集并填写。

上传并启用工作流

完成上面机密的填写后,就可以将我们直接的配置文件上传到Github了,上传后,Github会自动编译并且部署到你的服务器,接下来,就到使用自动化部署的快乐了

git add .
git commit -m "power on Action"
git push origin main

执行代码后,在网页端点击Action选项,就能看到你执行的工作流了

image-20220825232942780

点击可以进去查看具体执行的过程

image-20220825233019644

到这里,就完成全套流程的部署了,之后,你只需要写好文章,然后push上去,剩下的事情就交给Action吧。

时间流逝中|构建版本:40|构建时间:2024-04-23 09:51|Jenkins自动构建正常运行中
Built with Hugo
主题 StackJimmy 设计