GitHub Action拉取GitHub私有仓库pub包报公钥权限错误如何解决?
解决方案
方案1:配置SSH密钥(无需修改现有pubspec.yaml,推荐)
这个方案和你本地使用SSH拉取私有包的逻辑一致,不需要改项目原有配置,只需要给CI环境配置对应访问权限即可:
- 本地生成专用的CI SSH密钥对,执行命令:
ssh-keygen -t ed25519 -C "github-action-flutter-ci" -f ci-ssh-key
执行过程中连续按回车跳过密码设置,生成后会得到ci-ssh-key(私钥文件)和ci-ssh-key.pub(公钥文件)。 - 把公钥添加到私有依赖包仓库(也就是你
my_package对应的仓库)的部署密钥中:
进入my_package仓库页面 → 顶部Settings → 左侧菜单找到Deploy keys → 点击Add deploy key,自定义标题后把ci-ssh-key.pub里的所有内容粘贴进去,不需要勾选写权限,直接保存即可。 - 把私钥添加到运行GitHub Action的主项目仓库的机密配置中:
进入你的Flutter主项目仓库页面 → 顶部Settings → 左侧菜单找到Secrets and variables → 选择Actions → 点击New repository secret,名称填SSH_PRIVATE_KEY,值把ci-ssh-key文件里的所有内容原封不动粘贴进去,保存。 - 修改你的GitHub Action配置文件,在安装依赖步骤前添加SSH配置步骤,修改后的完整脚本如下:
name: Flutter on: [pull_request, push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: subosito/flutter-action@v1.5.0 # 新增的SSH配置步骤 - name: 配置SSH访问私有仓库权限 run: | mkdir -p ~/.ssh echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 ssh-keyscan github.com >> ~/.ssh/known_hosts - name: Install Dependencies run: flutter packages get - name: Format run: flutter format --set-exit-if-changed lib test - name: Analyze run: flutter analyze lib test - name: Run tests run: flutter test --no-pub --coverage --test-randomize-ordering-seed random
*注意:不要泄露生成的私钥内容,也不要提交到代码仓库。
方案2:使用PAT个人访问令牌(需要修改pubspec.yaml)
如果你不想用SSH的方式,也可以通过GitHub个人访问令牌走HTTPS协议拉取私有包:
- 生成一个PAT,权限仅勾选repo读权限即可,不要授予多余权限。
- 把PAT添加到主项目的Action机密中,命名为
GH_PAT。 - 修改pubspec.yaml中私有包的地址,使用占位符预留PAT位置:
my_package: git: url: https://GIT_PAT_PLACEHOLDER@github.com/username/my_package.git ref: main - 在Action脚本的安装依赖步骤前添加占位符替换步骤:
- name: 替换私有包访问令牌 run: sed -i "s/GIT_PAT_PLACEHOLDER/${{ secrets.GH_PAT }}/g" pubspec.yaml
这个方案需要处理本地开发时的pubspec适配,相对繁琐,更推荐使用方案1。
内容的提问来源于stack exchange,提问作者Boris Kayi
相关产品推荐
相关产品推荐

