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

如何配置GitHub Actions构建依赖GitHub私有仓库的Azure Static Web App?

报错根因

你碰到的手动git clone能跑通、但yarn拉依赖就报Host key verification failed的情况,本质是三个配置错位导致的:

  • webfactory/ssh-agent 只负责把你配置的私钥加载到临时SSH代理里,默认不会把GitHub的主机公钥写入全局SSH信任列表。非交互式Shell下执行Git操作时,因为没有预先的主机信任记录,会直接弹出交互确认,非交互场景下就直接报主机校验失败
  • Azure Static Web App 官方部署动作的API构建流程,默认在独立的执行上下文运行,不会自动继承当前Runner上配置的SSH代理、全局Git配置,构建时根本感知不到你提前配好的SSH认证信息
  • 你当前用的是部署动作的早期预览版本,构建隔离性更强,跨步骤的环境变量传递兼容性比正式版差很多
落地解决步骤
  1. 先把SSH基础信任配置打全
    在webfactory/ssh-agent步骤执行完成后,新增一个全局配置步骤,消除主机校验类报错:

    - name: 配置GitHub SSH全局规则
      run: |
        mkdir -p -m 700 ~/.ssh
        # 自动拉取GitHub官方主机公钥写入信任列表
        ssh-keyscan -t rsa,ecdsa,ed25519 github.com >> ~/.ssh/known_hosts
        chmod 644 ~/.ssh/known_hosts
        # 强制所有GitHub仓库的HTTPS拉取地址自动替换为SSH格式
        git config --global url."git@github.com:".insteadOf "https://github.com/"
    

    这步配置完成后,非交互式执行Git操作时不会再弹出主机确认的交互提示,也不会因为地址格式问题不走SSH认证通道。

  2. 让SSH代理配置能被后续构建步骤复用
    调整webfactory/ssh-agent的配置,把默认临时生成的SSH代理套接字固定到全局可读的路径,避免跨步骤时路径变化导致环境变量失效:

    - uses: webfactory/ssh-agent@v0.5.1
      with:
        ssh-private-key: ${{ secrets.SSH_PRIVATE }}
        # 固定SSH套接字路径
        ssh-auth-sock: /tmp/ssh-auth.sock
    

    然后在Azure Static Web App的部署步骤里,把这个固定的SSH套接字路径注入到构建环境变量里,让yarn执行依赖安装时能找到加载好私钥的SSH代理:

    - name: Build And Deploy
      id: builddeploy
      uses: Azure/static-web-apps-deploy@v0.0.1-preview
      with:
        azure_static_web_apps_api_token: ${{ secrets.AZURE_TOKEN }}
        repo_token: ${{ secrets.GITHUB_TOKEN }}
        action: "upload"
        app_location: "/"
        api_location: "api"
        output_location: "build"
      # 新增环境变量传递
      env:
        SSH_AUTH_SOCK: /tmp/ssh-auth.sock
    
  3. 极端场景的兜底方案
    *如果调整完上述配置后,构建时还是报主机校验失败,说明当前版本的部署动作完全在远端隔离沙箱内执行API构建,根本接收不到Runner本地的配置。*这时候可以跳过部署动作内置的构建流程,提前在Runner本地把API依赖安装好:

    • 在SWA部署步骤之前,新增一个手动构建API的步骤,进入api目录执行yarn install --prefer-offline --production,把生成的node_modules、构建产物全部在Runner本地准备好
    • 在SWA部署动作的参数里,配置跳过内置的自动构建逻辑,直接上传已经准备好的代码包

    另外还要检查api/package.json里的私有依赖拉取地址,确保是标准的SSH格式:git+ssh://git@github.com/组织名/私有仓库名.git#对应分支或标签,不要用HTTPS格式的地址,否则永远走不通SSH认证通道。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 13:24:03