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

如何通过GitHub Actions为仓库自动添加工作流生成的deploy key

实现方案

可以通过调用GitHub官方REST API完成工作流内自动添加Deploy Key的操作,具体操作流程如下:

前置准备

  • 生成一个具备repo全权限的个人访问令牌(PAT),GitHub Actions默认提供的GITHUB_TOKEN没有修改仓库部署密钥配置的权限,无法直接使用
  • 将生成的PAT存入当前仓库的Secrets中,命名为REPO_ADMIN_TOKEN

工作流修改说明

你现有的工作流已经完成了SSH密钥对的生成,仅需要在密钥生成步骤后新增调用API添加Deploy Key的步骤即可,读取生成的id_rsa.pub公钥内容作为API请求参数。
注意:如果没有特殊需求,建议删除密钥生成步骤中git add、git commit相关逻辑,避免将私钥直接提交到仓库引发权限泄露风险。

完整修改后的工作流代码

on:
  # 仅在main分支推送时触发工作流
  push:
    branches: [ main ]
  # 支持手动从Actions页面触发工作流
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    if: github.event.repository.name != 'testar-deploy-key'
    steps:
      - uses: actions/checkout@v2
      - name: 生成Deploy Key密钥对
        run: |
          ssh-keygen -m PEM -t rsa -b 4096 -C "mail@mail.com" -o -f id_rsa -N ""
          git config --local user.email "action@github.com"
          git config --local user.name "GitHub Action"
          # 若不需要提交密钥到仓库,可删除下方三行代码
          git add .
          git commit -m "Generate SSH"
      - name: 自动添加Deploy Key到仓库
        run: |
          PUBLIC_KEY=$(cat id_rsa.pub)
          curl -L \
            -X POST \
            -H "Accept: application/vnd.github+json" \
            -H "Authorization: Bearer ${{ secrets.REPO_ADMIN_TOKEN }}" \
            -H "X-GitHub-Api-Version: 2022-11-28" \
            https://api.github.com/repos/${{ github.repository }}/keys \
            -d '{"title":"Action自动生成部署密钥","key":"'"$PUBLIC_KEY"'","read_only":true}'
      - name: 推送变更到仓库
        uses: ad-m/github-push-action@master
        with:
          branch: main
          github_token: ${{ secrets.GITHUB_TOKEN }}

注意事项

  • 重复添加相同内容的公钥会触发API报错,可在调用添加接口前先查询仓库现有Deploy Key列表,判断无重复后再执行添加操作
  • 若需要Deploy Key具备仓库写入权限,将API请求参数中的read_only改为false即可
  • 生成的私钥请妥善保管,不要直接提交到公开可访问的仓库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:15:05