1

我用一个 API 函数构建了一个 Azure 静态 Web 应用程序,该函数具有一个依赖项。此依赖项位于 GitHub 上的私有存储库中。在我的本地开发机器上,我可以通过使用 SSH 身份验证下载依赖项来构建 Functions 应用程序。尝试使用 GitHub Actions 部署到 Azure 时出现错误Host key verification failed

我的 GitHub Actions 工作流程类似于 Azure 静态 Web 应用程序生成的默认工作流程,增加了使用webfactory/ssh-agent来促进 GitHub 上的 SSH 身份验证以检索私有存储库Y和一个git clone用于测试目的的运行步骤:

# ... Same as on https://docs.microsoft.com/en-us/azure/static-web-apps/github-actions-workflow

jobs:
  build_and_deploy_job:
    runs-on: ubuntu-latest
    name: Build and Deploy Job
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: true
          persist-credentials: false
      - uses: webfactory/ssh-agent@v0.5.1
        with:
          ssh-private-key: ${{ secrets.SSH_PRIVATE }}
      - run: |
          git clone ssh://git@github.com/X/Y.git Z
          ls -la Z
      - 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"

# ... Same as on https://docs.microsoft.com/en-us/azure/static-web-apps/github-actions-workflow

在我的私有存储库Y中,我添加了与私有密钥关联的公钥secrets.SSH_PRIVATE作为部署密钥。

运行工作流后,它显示git clone命令运行正确,因为该ls -la命令会显示我的私有存储库中的目录和文件。但是,当 yarn 获取包时,我的 API ( ) 的构建过程会yarn install --prefer-offline --production导致错误。Host key verification failed结果,GitHub Actions 无法下载我的私有存储库中的依赖项,也无法构建 API。这以失败的工作流程结束。

4

1 回答 1

1

经过分析Azure/static-web-apps-deploy@v0.0.1-preview,我注意到它使用Oryx为 Azure 静态 Web 应用程序的构建过程启动了一个 Docker 容器。此容器不知道webfactory/ssh-agent在主机 VM 上使用的 ssh-agent 初始化。结果,yarn install触发的Azure/static-web-apps-deploy@v0.0.1-preview无法下载我的私有存储库中的依赖项并且安装失败。

为了避免这种情况,我重构了我的私有依赖项,将其用作git 子模块,因为子模块可以在构建过程之前使用actions/checkout. 这是通过向Azure 静态 Web 应用程序生成的工作流文件仅添加两行额外的行来实现的。# ADDED我在工作流文件的以下片段中突出显示了这两行并带有尾随:

jobs:
  build_and_deploy_job:
    runs-on: ubuntu-latest
    name: Build and Deploy Job
    steps:
      - uses: actions/checkout@v2
        with:
          ssh-known-hosts: "github.com" # ADDED
          ssh-key: ${{ secrets.SSH_PRIVATE }} # ADDED
          submodules: true
      - name: Build And Deploy
        id: builddeploy
        uses: Azure/static-web-apps-deploy@v0.0.1-preview
...
于 2021-04-02T05:46:09.677 回答