Linux / 自建服务 · 2025年11月8日 0

利用Gitea Actions实现提交后自动拉取仓库至本地

在之前的文章中,我们介绍了如何利用Gitea Actions实现MkDocs更新自动构建。对于一些项目,尤其是脚本型语言项目,我们往往只需要在代码提交后自动更新本地仓库即可。

本文将介绍如何通过Gitea Actions实现代码提交后自动拉取(pull)到本地,以保持本地与远程仓库的同步。

本文采用 SSH 方式进行连接,并通过指定私钥实现免密登录。若使用其他方式,请根据实际需求调整配置。

✅ 准备工作

在开始之前,请确保以下环境与配置已就绪:

  • 已经git clone到本地的仓库
  • 已安装Gitea 1.19.0或以上版本,并启用Actions(启用见此博文
  • 已下载安装act_runner,并成功为仓库注册runner(方法见此博文

🔐 设置SSH免密访问

在实际操作中,我们可能会遇到这样的问题:
在命令行中直接执行git pull一切正常,但当通过act_runner执行相同命令时却卡住不动。

原因在于:runner 无法访问当前 SSH 会话中的密钥。因此,我们需要为 Runner 单独生成一对 SSH 密钥

ssh-keygen -t ed25519 -f ~/.ssh/id_gitea_runner -C "Gitea Runner Key" -N ""

生成密钥后,进入 Gitea:
点击头像 → 设置 → SSH / GPG 密钥 → 管理 SSH 密钥
在“增加密钥”界面中,将公钥(id_gitea_runner.pub)的内容复制进去,并填写必要信息。

完成后,可通过以下命令测试连接:

ssh -i ~/.ssh/id_gitea_runner -T git@<您的gitea实例地址>

若出现以下提示,则说明 SSH 已配置成功:

Hi <user>! You've successfully authenticated...

请记下刚生成的私钥路径,稍后在配置 Actions 时将用到。

🔑 配置Actions密钥

进入目标仓库的:设置 → Actions → 密钥
点击 添加密钥,填写以下内容:

名称
DEPLOY_PATH您仓库目录的位置
DEPLOY_SSH_COMMANDssh -i ~/.ssh/id_gitea_runner -o StrictHostKeyChecking=no -o BatchMode=yes

🛠️ 配置 Gitea Actions 工作流

在仓库根目录下创建或编辑 .gitea/workflows/auto-deploy.yml 文件,内容如下:

name: Auto Deploy

on:
  push:
    branches:
      - main # 更换为您需要的分支名称
    paths:
      - "**"
      - "!.gitignore" # 忽略.gitignore

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Deploy code
        env:
          DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }}
          GIT_SSH_COMMAND: ${{ secrets.DEPLOY_SSH_COMMAND }} # 指定SSH命令以免密
        run: |
          echo "🚀 Starting deployment to $DEPLOY_PATH"
          cd "$DEPLOY_PATH"

          # 检查是不是 git 仓库
          if [ ! -d ".git" ]; then
              echo "❌ $DEPLOY_PATH is not a git repository"
              exit 1
          fi

          # 拉取最新代码
          git fetch origin main --quiet
          git reset --hard origin/main --quiet

          echo "✅ Deployment completed at $(date)"

🎯 运行结果

完成以上配置后,每当你向仓库提交新代码时,
Gitea Actions 会自动触发部署流程:

  • 使用配置好的 SSH 免密访问
  • 自动执行 git fetchgit reset
  • 同步本地仓库代码至最新状态

至此,代码与 Gitea 仓库内容实现自动同步。

心情表态
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0