不想阅读Github Action厚重的文档,用预配置好的NPM Action折腾了半天,终以失败告终。由于不熟悉NPM和Node.js,最后爆出的错误摸不到头脑,就此作罢。
寻找另一个方法,在 https://github.com/user/repo/actions/new
中选择了跳过,自己设置一个空白的Workflow。
为了避免Action重新推送仓库后循环触发Action(不知Github有没有对这种情况进行特殊处理)添加路径过滤器,仅当 /source
目录存在更新时才触发 Workflow
在仓库的 Settings->Deploy keys
里设置Github Action push时使用的SSH公钥,并赋予写权限,Settings->Secrets
里设置私钥的 Base64 编码。
私钥会通过环境变量传入Action的shell,base64 -d
即可解码,base64编码是为了避免潜在的回车换行符问题(环境变量里出现的换行符似乎不能正确地写入文件)
注意工作目录的问题,别瞎跑,目录会丢掉的
~/.ssh/id_rsa
文件注意设定权限 0600
默认的权限过于宽松,SSH会不读取。
~/.ssh/config
里需写入
1 2
| Host * StrictHostKeyChecking no
|
否则可能会弹出要求确认SSH fingerprint的交互消息。
记得设定 git config --global user.name/email
否则无法提交
如果使用了自定义的域名,注意 CNAME
文件是否在 hexo clean
后被删除,可能需要自己写回去。
注意部分Hexo主题可能以 git submodule 方式引入, Github Action 克隆仓库时不会自动克隆子模块,导致生成的所有页面空白,Hexo只会给出警告而不是错误。
附上自己写的workflow(糊成一坨,凑合能用)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| name: Generate Hexo
on: push: paths: - 'source/**'
jobs: build: name: Refresh runs-on: ubuntu-latest steps: - name: Install Node.js and NPM run: | sudo apt-get install curl -y curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo apt-get install nodejs -y echo '=====Show NPM version=====' npm -v echo '=====Show Node.js version=====' node -v - name: Install Hexo run: | sudo npm install -g hexo-cli echo '=====Show HEXO version=====' hexo -v - name: Prepare Key and SSH config run: | mkdir ~/.ssh echo $DEPLOY_PRIVKEY | base64 -d > ~/.ssh/id_rsa chmod 0600 ~/.ssh/id_rsa echo 'Host *' >> ~/.ssh/config echo ' StrictHostKeyChecking no' >> ~/.ssh/config chmod 0600 ~/.ssh/config env: DEPLOY_PRIVKEY: ${{ secrets.DEPLOY_PRIVKEY }} - name: Clone git repo run: | cd ~ echo '=====Show work path=====' pwd git clone git@github.com:cpdyj/blog.git cd blog ls echo '=====Show work path=====' pwd cat ./package.json npm install npm audit fix hexo clean hexo g echo "blog.iseki.space" > ./docs/CNAME git config --global user.name "User name" git config --global user.email "Email@example.com" git add docs git commit -am "Auto generate on Github Action at `date`" git push
|