如何配置 GitHub 操作来构建依赖于私有存储库的 Azure 静态 Web 应用程序?
How can I configure GitHub Actions to build my Azure Static Web App with a dependency on a private repository?
我构建了一个 Azure 静态 Web 应用程序,其中包含一个 API 函数,该函数具有一个依赖项。此依赖项位于 GitHub 上的私有存储库中。在我的本地开发机器上,我可以通过使用 SSH 身份验证下载依赖项来构建 Functions 应用程序。尝试使用 GitHub 操作部署到 Azure 时出现错误 Host key verification failed
.
我的 GitHub Actions 工作流程类似于 Azure Static Web App 生成的默认工作流程,增加了使用 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
关联的 public 密钥作为部署密钥。
在 运行 工作流之后,它显示 git clone
命令是 运行 正确的,因为 ls -la
命令导致显示我的私人存储库中的目录和文件。但是,当 yarn 获取包时,我的 API (yarn install --prefer-offline --production
) 的构建过程导致错误 Host key verification failed
。结果,GitHub Actions 无法下载我的私有存储库中的依赖项,也无法构建 API。这以失败的工作流程结束。
分析后 Azure/static-web-apps-deploy@v0.0.1-preview
我注意到它使用 Oryx 启动一个 Docker 容器用于 Azure 静态 Web 应用程序的构建过程。此容器不知道在主机 VM 上使用 webfactory/ssh-agent
初始化的 ssh-agent。结果,在 Azure/static-web-apps-deploy@v0.0.1-preview
中触发的 yarn install
无法下载我的私有存储库中的依赖项,导致安装失败。
为了避免这种情况,我重构了我的私有依赖项以将其用作 git submodule instead, because submodules can be loaded prior to the build process using actions/checkout
. This was achieved by adding only two extra lines to the workflow file that is generated by Azure Static Web Apps。我在我的工作流文件的以下片段中用尾部 # 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
...
我构建了一个 Azure 静态 Web 应用程序,其中包含一个 API 函数,该函数具有一个依赖项。此依赖项位于 GitHub 上的私有存储库中。在我的本地开发机器上,我可以通过使用 SSH 身份验证下载依赖项来构建 Functions 应用程序。尝试使用 GitHub 操作部署到 Azure 时出现错误 Host key verification failed
.
我的 GitHub Actions 工作流程类似于 Azure Static Web App 生成的默认工作流程,增加了使用 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
关联的 public 密钥作为部署密钥。
在 运行 工作流之后,它显示 git clone
命令是 运行 正确的,因为 ls -la
命令导致显示我的私人存储库中的目录和文件。但是,当 yarn 获取包时,我的 API (yarn install --prefer-offline --production
) 的构建过程导致错误 Host key verification failed
。结果,GitHub Actions 无法下载我的私有存储库中的依赖项,也无法构建 API。这以失败的工作流程结束。
分析后 Azure/static-web-apps-deploy@v0.0.1-preview
我注意到它使用 Oryx 启动一个 Docker 容器用于 Azure 静态 Web 应用程序的构建过程。此容器不知道在主机 VM 上使用 webfactory/ssh-agent
初始化的 ssh-agent。结果,在 Azure/static-web-apps-deploy@v0.0.1-preview
中触发的 yarn install
无法下载我的私有存储库中的依赖项,导致安装失败。
为了避免这种情况,我重构了我的私有依赖项以将其用作 git submodule instead, because submodules can be loaded prior to the build process using actions/checkout
. This was achieved by adding only two extra lines to the workflow file that is generated by Azure Static Web Apps。我在我的工作流文件的以下片段中用尾部 # 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
...