nik*_*eem 5 .net c# azure azure-functions github-actions
我正在尝试使用 GitHub Actions 工作流程将带有 .NET 7 的 Azure Function(隔离)部署到 MS Azure。一切似乎运行良好,但由于某种原因,当我将其部署到云时,该功能未加载。当我运行本地主机功能时,一切都很好(在我的机器上工作),但部署后就不行了。
public class DemoFunction
{
private readonly ILogger _logger;
public DemoFunction(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<DemoFunction>();
}
[Function("DemoFunction")]
public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req)
{
var response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
response.WriteString("Demo function works!");
return response;
}
}
Run Code Online (Sandbox Code Playgroud)
Function App 仅包含一个具有 HTTP 绑定的函数(无需身份验证,允许匿名请求)。我使用 Bicep 部署基础设施,使用 GH Actions 部署 Function App。日志分析显示了这一点:
因此,由于某种原因,它确实找到了该函数,但没有加载它。如果我导航到 Azure 门户中的“功能”边栏选项卡,我看不到任何功能。该项目只是一个 POC 项目,可在https://github.com/nikneem/function-deployment-with-gh-actions上公开托管
有任何想法吗?
哇哦,我在部署过程中找到了答案。在我的 GitHub Actions 工作流程中,我将dotnet publish
Azure Functions 项目复制到输出文件夹中。我压缩了输出文件夹的内容并将该 zip 文件发布为工作流程工件。
然后在部署中,我下载了工作流工件(例如该 zip 文件)并使用该 zip 文件进行了 Zip 部署。
现在显然,这个 zip 文件出了问题,所以我删除了手动 zip 操作,主要是因为我发现当您传递包含所有已发布文件的文件夹时,GitHub 操作中的部署步骤也有效。
因此,我的 GH Actions 工作流程中的发布步骤现在如下所示:
publish-functions:
runs-on: ubuntu-latest
needs: versionize
steps:
- uses: actions/checkout@v3
- uses: actions/setup-dotnet@v3
with:
dotnet-version: "7.0.x"
- name: Restore packages
working-directory: src
run: dotnet restore
- name: Publish functions app
working-directory: src
run: dotnet publish $FUNCTIONS_PATH/$FUNCTIONS_PROJECT -c Release --no-restore -o functionsout /p:Version=${{needs.versionize.outputs.semver}}
- name: Upload functions artifact
uses: actions/upload-artifact@v3
with:
name: player-functions
path: src/functionsout/*
Run Code Online (Sandbox Code Playgroud)
部署步骤如下所示:
deploy-function-app:
runs-on: ubuntu-latest
needs: [publish-functions, deploy-infrastructure-prod]
steps:
- uses: actions/download-artifact@v3
with:
name: player-functions
path: function
- uses: azure/login@v1
with:
creds: ${{secrets.AZURE_PROD}}
- name: Deploy Azure Functions app
uses: Azure/functions-action@v1
with:
app-name: ${{needs.deploy-infrastructure-prod.outputs.functionResourceName}}
package: function
Run Code Online (Sandbox Code Playgroud)
查看部署过程生成的日志,它仍然会创建一个 zip 文件并部署它。但这是一个与我手动创建的不同的 zip 文件。现在一切正常;)
归档时间: |
|
查看次数: |
2488 次 |
最近记录: |