使用 Visual Studio 17.8.3,我尝试将 .Net8 隔离的 C# Azure Function 项目发布到 Azure,包括使用 Github CI/CD 工作流程将其加载到 API 管理服务。这是发布菜单上的选项之一。
更改后构建阶段可以工作:
DOTNET_CORE_VERSION_INPROC: 6.0.x
到
DOTNET_CORE_VERSION_INPROC: 8.0.x
但是部署阶段失败并显示以下消息:
“登录失败,错误:使用身份验证类型:SERVICE_PRINCIPAL。并非所有值都存在。确保提供“client-id”和“tenant-id”。确保运行程序上安装了“az”。如果“enable” -AzPSSession' 为 true,请确保 'pwsh' 与 Azure PowerShell 模块一起安装在运行器上。仔细检查 'auth-type' 是否正确。”
在 Visual Studio 生成的工作流可以工作之前,似乎需要采取一些步骤。
我错过了什么吗?有详细教程吗?
我的工作流程:
name: Build and deploy .NET Core application to Function App NewKimaAPI with API Management Service KimaAPI-NewKimaAPI
on:
push:
branches:
- master
env:
AZURE_FUNCTIONAPP_NAME: NewKimaAPI
AZURE_FUNCTIONAPP_PACKAGE_PATH: NewKimaAPI
CONFIGURATION: Release
DOTNET_CORE_VERSION: 8.0.x
WORKING_DIRECTORY: NewKimaAPI
DOTNET_CORE_VERSION_INPROC: 8.0.x
AZURE_APIM_RESOURCEGROUP: HeritageBrowserIL
AZURE_APIM_SERVICENAME: KimaAPI
AZURE_APIM_API_ID: NewKimaAPI
AZURE_APIM_RESOURCE_PATH: /
AZURE_APIM_SWAGGERURL: ''
jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET SDK
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_CORE_VERSION }}
- name: Setup .NET Core (for inproc extensions)
uses: actions/setup-dotnet@v1
with:
dotnet-version: ${{ env.DOTNET_CORE_VERSION_INPROC }}
- name: Restore
run: dotnet restore "${{ env.WORKING_DIRECTORY }}"
- name: Build
run: dotnet build "${{ env.WORKING_DIRECTORY }}" --configuration ${{ env.CONFIGURATION }} --no-restore
- name: Publish
run: dotnet publish "${{ env.WORKING_DIRECTORY }}" --configuration ${{ env.CONFIGURATION }} --no-build --output "${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}"
- name: Publish Artifacts
uses: actions/upload-artifact@v3
with:
name: functionapp
path: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
deploy:
runs-on: windows-latest
needs: build
steps:
- name: Download artifact from build job
uses: actions/download-artifact@v3
with:
name: functionapp
path: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
- name: Deploy to Azure Function App
uses: Azure/functions-action@v1
with:
app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
publish-profile: ${{ secrets.NewKimaAPI_AABB }}
package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
- name: Azure Login
uses: azure/login@v1
with:
creds: ${{ secrets.KimaAPI_SPN }}
- name: Import API into Azure API Management
run: az apim api import --path "${{ env.AZURE_APIM_RESOURCE_PATH }}" --resource-group ${{ env.AZURE_APIM_RESOURCEGROUP }} --service-name ${{ env.AZURE_APIM_SERVICENAME }} --api-id ${{ env.AZURE_APIM_API_ID }} --specification-url "${{ env.AZURE_APIM_SWAGGERURL }}" --specification-format OpenApi --subscription-required false
您可以按照以下给出的替代方案来实现您的要求。
我的 GitHub 工作流程将函数部署到 Azure:
on:
push:
branches:
- main
workflow_dispatch:
#set environment variables
env:
AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'
DOTNET_VERSION: '8.0.x'
jobs:
build-and-deploy:
runs-on: windows-latest
steps:
- name: 'Checkout GitHub Action'
uses: actions/checkout@v4
- name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment
uses: actions/setup-dotnet@v1
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
- name: 'Resolve Project Dependencies Using Dotnet'
shell: pwsh
run: |
pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
dotnet build --configuration Release --output ./output
popd
- name: 'Run Azure Functions Action'
uses: Azure/functions-action@v1
id: fa
with:
app-name: '<functionapp_name>'
slot-name: 'Production'
package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output'
publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_C5XXXXX1019 }}
GitHub 中的部署状态:
传送门:
导航至
Function App=>API Management=>Create New APIM and API or select existing ones
。
Go to API management
=>转到API=>创建新API=>选择函数应用程序并提供函数应用程序的详细信息。现有 APIM:
测试导入的函数:
参考资料: