【问题标题】:Bundling command-line tool in azure functions using visual studio使用 Visual Studio 在 azure 函数中捆绑命令行工具
【发布时间】:2019-12-05 12:40:33
【问题描述】:
我必须在现有的 Azure 功能中集成第三方命令行工具。我看到了几个问题(如this one)和博客,例如,我们如何通过从 azure 门户上传 exe 文件并从代码执行来从 azure 函数调用 exe。
从门户上传是上传 exe 的唯一方法吗? 这种方法的问题是,每次从 Visual Studio 部署代码后,我都需要手动上传文件,因为所有文件都被删除了。有什么方法可以简单地保持不变或使其成为我项目的一部分,以便 exe 及其依赖文件(不是程序集,而是它引用的内部文件),或者有什么方法可以自动将其复制/上传到 azure 函数。
我正在使用应用服务计划而不是消费计划,据我所知,它对主机具有一定的灵活性和控制权。
【问题讨论】:
标签:
visual-studio
azure-devops
azure-functions
【解决方案1】:
在您的 Azure Pipeline 中,您可以在归档发布文件夹之前简单地将所需的任何文件与函数应用一起复制。
例如,如果您关注official docs,您可以在ArchiveFiles@2 任务之前将您需要的文件复制到发布目录(如果您需要从某处获取它们,甚至可以运行脚本)。
在文档中的示例 azure 管道之上构建,应该这样做
pool:
vmImage: 'VS2017-Win2016'
steps:
- script: |
dotnet restore
dotnet build --configuration Release
- task: DotNetCoreCLI@2
inputs:
command: publish
arguments: '--configuration Release --output publish_output'
projects: '*.csproj'
publishWebProjects: false
modifyOutputPath: true
zipAfterPublish: false
- task: ShellScript@2
inputs:
scriptPath: 'fetch-3rd-party-files.sh'
- task: ArchiveFiles@2
displayName: "Archive files"
inputs:
rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
includeRootFolder: false
archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
name: 'drop'
另外,如果需要,您也可以直接将复制任务集成到您的csproj 文件中。应该这样做(请参阅this answer 了解更多详细信息)
<Project Sdk="Microsoft.NET.Sdk">
...
<Target Name="CopyFiles" AfterTargets="Publish">
<Copy
SourceFiles="random.dat"
DestinationFolder="$(PublishDir)\data_files\"
/>
</Target>
...
</Project>
检查上面使用的reference to the Copy Task 以获取可用选项。