本地推送Github Actions再推送到服务器
发表于更新于
字数总计:1.5k阅读时长:6分钟 郑州市
2024-10-11:修复 Github Actions 部署后导致文章的更新时间错误的问题
1.前提准备
- 服务器*1
- Github账号*1
- 电脑*1
- 勤劳的小手*1/双
本教程是通过 GitHub Actions 实现持续集成和持续部署(CI/CD),自动化生成静态文件并推送到目标仓库,目标仓库触发 Webhooks 通知服务器自动拉取最新代码部署。
建议是一个私人仓库 hexo-blog
,一个公开仓库 JLinmr.Github.io
2.部署到Github
本文不叙述这个了,直接看这个文章
3.使用Github Actions
GitHub Actions 是一个持续集成和持续部署(CI/CD)平台,可以在 GitHub 仓库中配置工作流。当有新的推送到达 GitHub 仓库时,GitHub Actions 会自动触发预定义的工作流。
1.创建工作流
方法一:在你的 GitHub 仓库中创建一个 .github/workflows
目录。然后,在这个目录中创建一个新的 YAML 文件,例如 main.yml
,填入工作流配置⬇️
方法二:在你的Github仓库界面依次点击Actions
➡️set up a workflow yourself
,填入工作流配置⬇️
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 58 59 60 61 62
| name: 自动构建
on: push: branches: - main
jobs: deploy: runs-on: ubuntu-latest env: TZ: Asia/Shanghai steps: - name: 检查源仓库分支 uses: actions/checkout@v3 with: ref: main fetch-depth: 0
- name: 恢复文件修改时间 run: | find source -name '*.md' | while read file; do touch -d "$(git log -1 --format="@%ct" "$file")" "$file" done
- name: 安装 Node.js uses: actions/setup-node@v3 with: node-version: "20.x"
- name: 安装 Hexo run: | npm install -g hexo-cli
- name: 缓存 node 模块 id: cache-node-modules uses: actions/cache@v3 with: path: node_modules key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node-modules-
- name: 安装依赖 if: steps.cache-node-modules.outputs.cache-hit != 'true' run: | npm install --save
- name: 生成静态 run: | hexo generate
- name: 部署推送到目标仓库 uses: peaceiris/actions-gh-pages@v3 with: personal_token: ${{ secrets.PAT }} publish_dir: ./public external_repository: JLinMr/JLinmr.github.io user_name: "github-actions[bot]" user_email: "github-actions[bot]@users.noreply.github.com" full_commit_message: "通过 Github Actions 部署 Hexo 构建" publish_branch: main
|
不管是方法一还是方法二,最终的内容都是这个⬆️,根据自己的仓库信息,修改 目标仓库
1 2 3 4 5 6 7 8 9 10
| - name: 部署推送到目标仓库 uses: peaceiris/actions-gh-pages@v3 with: personal_token: ${{ secrets.PAT }} publish_dir: ./public external_repository: JLinMr/JLinmr.github.io user_name: "github-actions[bot]" user_email: "github-actions[bot]@users.noreply.github.com" full_commit_message: "通过 Github Actions 部署 Hexo 构建" publish_branch: main
|
2.配置访问令牌
最开始我以为同账号下是有权限的,但是试了一下没有权限推送到 JLinMr/JLinmr.github.io
仓库。即使使用 GITHUB_TOKEN
,也只能访问当前仓库,而不能访问其他仓库。所以在这种情况下,选择了配置个人访问令牌来获得足够的权限
1.生成访问令牌
- 进入
Settings
- 点击
Developer settings
- 选择
Personal access tokens
- 点击
Tokens(classic)
- 点击
Generate new token
- 输入令牌的描述,选择需要的权限(
repo
权限),然后点击 Generate token
。 - 复制生成的令牌
2.添加到 Secrets
- 进入你的 GitHub 仓库。
- 点击
Settings
- 选择
Secrets and variables
➡️Actions
- 点击
New repository secret
- 输入
PAT
,粘贴你的个人访问令牌到 Secret *
字段,然后点击 Add secret
3.触发工作流
修改仓库内容触发工作流,首次可能比较慢,因为工作流配置了缓存 Node.js 依赖
4.配置Webhook
本教程使用宝塔面板进行配置Webhook
,其他请自行测试
1.下载WebHook和添加
点击宝塔左侧软件商城,搜索并下载安装宝塔WebHook
点击设置➡️添加Hook,填入名称和下面配置
注意你需要,修改脚本内容为你自己的
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
| #!/bin/bash echo ""
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S" echo "开始"
branch="main" gitPath="/www/wwwroot/blog.bsgun.cn/" gitHttp="https://github.com/JLinMr/JLinmr.GitHub.io.git"
echo "Web站点路径:$gitPath"
init_git_repo() { if [ ! -d ".git" ]; then echo "在该目录下克隆 git" sudo git clone $gitHttp gittemp sudo mv gittemp/.git . sudo rm -rf gittemp fi }
pull_latest_code() { echo "拉取最新的项目文件" git remote add origin $gitHttp git branch --set-upstream-to=origin/$branch $branch sudo git fetch --all sudo git reset --hard origin/$branch sudo git pull --rebase 2>&1 echo "设置目录权限" sudo chown -R www:www $gitPath }
if [ -d "$gitPath" ]; then cd $gitPath init_git_repo pull_latest_code else echo "该项目路径不存在" echo "新建项目目录" mkdir -p $gitPath cd $gitPath init_git_repo pull_latest_code fi
echo "结束" exit 0
|
2.配置密钥
点击查看密钥
复制密钥的内容和蓝色选中的内容
打开你的Github
内公开的仓库,依次点击settings
➡️WebHooks
➡️Add WebHook
按照步骤4的图片进行填写内容,然后点击Add WebHook
(Payload URL
填写蓝色选中内容)(Content type改成Json
)
成功的话会显示为步骤5,第一次是Ping
(如果开启了SSL,且打开验证你有大概率会失败)
可以直接看图片按照图片顺序配置,其他的都是默认
3.一些问题
你可能会出现的问题
问题原因:Git 检测到目录的所有权存在问题,因此拒绝执行某些操作
解决方案:直接复制绿框内的指令在终端执行一下设置权限
5.触发钩子
在你的私人仓库内进行增,删,改,任意操作即可触发GitHub Actions,然后公开仓库触发钩子,服务器进行拉取仓库的最新代码
6.写在最后
因为写这个的时候已经完成了,我也没进行测试这一套流程(但是我就是这样成的),如果有什么问题可以在评论区评论留言