GitHub Actions执行DVC pull时GDrive远程认证失败求助
问题描述
我尝试了多种GitHub Actions工作流变体,但无法从DVC拉取数据。工作流代码如下:
name: auto-testing on: [push] jobs: run: runs-on: [ubuntu-latest] steps: - uses: actions/checkout@v2 - uses: iterative/setup-dvc@v1 - name: Get data run: | echo '---' echo GDRIVE_CREDENTIALS_DATA: $GDRIVE_CREDENTIALS_DATA echo '---' #pip list dvc remote default storage #dvc remote modify storage --local gdrive_use_service_account true #dvc remote modify storage --local gdrive_service_account_json_file_path .dvc/gdrive-access.json dvc pull env: REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} #GDRIVE_CREDENTIALS_DATA : ${{ secrets.GDRIVE_CREDENTIALS_DATA }} - name: Install requirements run: | pip install -r requirements.txt - name: Run tests run: python src/test.py
GDRIVE_CREDENTIALS_DATA已填充从Google下载的JSON文件内容,且该文件已在另外两台电脑上测试可用。尝试过使用环境变量以及将JSON文件添加到仓库的方式,均未成功,始终收到错误:
ERROR: configuration error - Failed to authenticate GDrive remote: name: drive version: v2
ERROR: Failed to authenticate GDrive remote
Learn more about configuration settings at https://man.dvc.org/remote/modify.
Error: Process completed with exit code 251.
修复步骤
正确配置DVC服务账号认证
取消工作流中相关注释,改用gdrive_service_account_json_content直接传入环境变量中的JSON内容,无需创建物理文件,避免路径和权限问题:- name: Get data run: | dvc remote default storage dvc remote modify storage --local gdrive_use_service_account true dvc remote modify storage --local gdrive_service_account_json_content "$GDRIVE_CREDENTIALS_DATA" dvc pull env: GDRIVE_CREDENTIALS_DATA: ${{ secrets.GDRIVE_CREDENTIALS_DATA }}确认服务账号的GDrive权限
即使本地测试可用,GitHub Actions使用的是服务账号身份,需确保:- 将服务账号邮箱(JSON文件中
client_email字段的值)添加到GDrive目标文件夹的共享列表,权限设置为编辑或内容管理者。 - 检查目标文件夹是否存在组织级别的外部访问限制,确保服务账号能正常访问。
- 将服务账号邮箱(JSON文件中
验证DVC远程配置
确认仓库内.dvc/config文件中,storage远程的url格式正确,应为gdrive://<目标文件夹ID>,文件夹ID需准确无误。检查环境变量传递
可临时在run脚本中添加echo "$GDRIVE_CREDENTIALS_DATA"(测试完成后删除,避免泄露敏感信息),确认GDRIVE_CREDENTIALS_DATA已被正确注入环境变量。
内容的提问来源于stack exchange,提问作者Soerendip

