You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Linux服务器以GitHub App身份自动推送代码至GitHub仓库

实现GitHub App身份的自动化仓库推送方案

一、先完成GitHub App的创建与配置

  1. 登录GitHub后台创建新的GitHub App

    • 填写名称、主页URL(任意合法地址即可)
    • 在Repository permissions中,将Contents权限设为Read and write
    • 选择App安装范围(仅当前账号/任意账号,根据仓库归属选择)
    • 创建后记录App ID,并在设置页的"Private keys"生成并下载私钥,保存为github-app.pem
  2. 将App安装到目标仓库所属账号

    • 在App页面点击"Install App",选择目标账号后勾选要操作的公开仓库
    • 从安装后的页面URL中提取Installation ID(例如URL中installations/后的数字)

二、Ubuntu服务器环境配置

安装所需工具:

sudo apt update && sudo apt install -y curl openssl git jq

三、编写令牌自动生成脚本

创建get_installation_token.sh,用于自动生成短期的GitHub App安装令牌(有效期1小时,每次推送前自动获取新令牌):

#!/bin/bash

# 替换为你的实际参数
APP_ID="你的GitHub App ID"
INSTALLATION_ID="你的安装ID"
PRIVATE_KEY_PATH="/绝对路径/github-app.pem"

# 生成JWT签名
JWT_EXPIRATION=$(($(date +%s) + 600))
JWT_HEADER=$(echo -n '{"alg":"RS256","typ":"JWT"}' | base64 | tr -d '\n' | tr '/+' '_-' | tr -d '=')
JWT_PAYLOAD=$(echo -n "{\"iat\":$(date +%s),\"exp\":$JWT_EXPIRATION,\"iss\":\"$APP_ID\"}" | base64 | tr -d '\n' | tr '/+' '_-' | tr -d '=')
JWT_SIGNATURE=$(echo -n "$JWT_HEADER.$JWT_PAYLOAD" | openssl dgst -sha256 -sign "$PRIVATE_KEY_PATH" | base64 | tr -d '\n' | tr '/+' '_-' | tr -d '=')
JWT_TOKEN="$JWT_HEADER.$JWT_PAYLOAD.$JWT_SIGNATURE"

# 获取安装令牌
INSTALLATION_TOKEN=$(curl -s -X POST \
  -H "Authorization: Bearer $JWT_TOKEN" \
  -H "Accept: application/vnd.github.v3+json" \
  "https://api.github.com/app/installations/$INSTALLATION_ID/access_tokens" | jq -r '.token')

echo "$INSTALLATION_TOKEN"

给脚本添加执行权限:

chmod +x get_installation_token.sh

同时确保私钥文件权限安全:

chmod 600 /绝对路径/github-app.pem

四、配置Git提交身份为GitHub App

进入仓库目录(如果还没克隆先跳过这步,后续脚本会处理),设置提交的用户名和邮箱为GitHub App专属身份:

cd repository
git config user.name "你的GitHub App名称[bot]"
git config user.email "你的AppID+你的GitHub App名称@users.noreply.github.com"

五、编写自动化推送脚本

创建auto_push.sh,整合全流程:

#!/bin/bash

# 替换为你的实际参数
REPO_URL="https://github.com/你的用户名/你的仓库名.git"
REPO_FOLDER="repository"
TOKEN_SCRIPT_PATH="/绝对路径/get_installation_token.sh"

# 获取最新令牌
INSTALLATION_TOKEN=$($TOKEN_SCRIPT_PATH)

# 克隆仓库(如果不存在)
if [ ! -d "$REPO_FOLDER" ]; then
  git clone "https://x-access-token:$INSTALLATION_TOKEN@${REPO_URL#https://}" $REPO_FOLDER
fi

cd $REPO_FOLDER

# 执行你的操作:创建文件夹、文件
mkdir -p new_folder
touch new_folder/test.txt

# 提交并推送
git add .
git commit -m "Automated commit via GitHub App"
# 替换main为你的仓库默认分支(如master)
git push "https://x-access-token:$INSTALLATION_TOKEN@${REPO_URL#https://}" HEAD:main

给脚本添加执行权限:

chmod +x auto_push.sh

六、可选:设置定时自动执行

如果需要定期运行,编辑crontab任务:

crontab -e

添加一行(示例为每天凌晨1点执行,日志输出到指定文件):

0 1 * * * /绝对路径/auto_push.sh >> /var/log/auto_push.log 2>&1

内容的提问来源于stack exchange,提问作者Coollector

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:01:24