为什么“ dotnet lambda部署功能”无法从Azure DevOps工件提要中提取软件包?

时间:2019-02-02 18:13:18

标签: aws-lambda azure-devops azure-pipelines

我正在Azure DevOps中使用AWS deploy lambda任务。在部署的lambda函数中,设置为从同一Azure DevOps回购/安装中的工件提要中提取软件包。

如果我在部署的上一步中运行NuGet restore,则可以很好地访问该程序包,但是当它到达AWS Lambda .NET Core Deployment步骤时,尝试从同一提要中读取时将得到401。

有人知道我如何配置lambda发布步骤以成功读取自定义供稿吗?

具体错误是:

  

响应状态代码不表示成功:401

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,但希望我可以对此提出一些新的看法。

我们不是使用AWS deploy lambda运行,而是打包了lambda并将其推送到S3以允许CloudFormation部署它们。这使用AWS dotnet toolkit来构造部署包(这是aws deploy lambda在后台执行的操作)。执行此操作的powershell步骤如下所示:

dotnet lambda package

然后通常在项目下面的bin / release文件夹内生成结果包。

然后,您要做的就是将参数--msbuild-parameters "--no-restore"添加到打包过程中,这不会触发自动还原步骤。在Azure DevOps生成管道内部,可以设置要还原的所有解决方案或csproj文件的构建步骤,以自动针对源进行身份验证。我们还设置了组件的版本号,我想摆脱一个令人讨厌的警告,因此此调用的当前版本如下:

dotnet lambda package ("/p:Version=" + $VersionNumber) "/p:PreserveCompilationContext=false" --msbuild-parameters "--no-restore"

我现在遇到的问题是,传递msbuild-parameters似乎会将框架设置为以Red Hat Linux(rhel.7.2-x64)为目标,从而导致以下错误:

publish: C:\Program Files\dotnet\sdk\2.1.500\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(198,5): error NETSDK1047: Assets file 'C:\Agent\_work\1\s\Kiosk.Microservice.User.Lambda.Command\obj\project.assets.json' doesn't have a target for '.NETCoreApp,Version=v2.0/rhel.7.2-x64'. Ensure that restore has run and that you have included 'netcoreapp2.0' in the TargetFrameworks for your project. You may also need to include 'rhel.7.2-x64' in your project's RuntimeIdentifiers. [C:\Agent\_work\1\s\Kiosk.Microservice.User.Lambda.Command\Kiosk.Microservice.User.Lambda.Command.csproj]

我非常明确地希望它为dotnetcore2.0构建,因此我实际上并不想为Red Hat Linux构建。

这是我目前遇到的问题,好像我不使用该标志来停止未经身份验证的nuget恢复步骤一样,我得到了未经授权的错误,并且似乎无法将dotnet.exe传递给我的供稿凭据。如果我确实使用了该标志,那么它就不会出于一致的原因而为Red Hat Linux构建。希望这至少可以使您走得更远!

更新:我现在正在处理我的东西。我去找了dotnet lambda publish实际上在the git repository for the toolset中使用的dotnet cli包装器,并在没有中间人的情况下重复了其步骤。因为不再使用msbuild-parameters标志,所以它没有尝试在Red Hat Linux中构建它。之后,我也确实必须创建zip文件,但这相当琐碎。以下是在没有aws dotnet工具集的情况下生成新软件包的powershell:

# Run the build that will generate the proper files
dotnet publish --no-restore -f netcoreapp2.0 -c Release

# Create the path to the zip file
$PathToZip = $PathToCSProj + "\bin\Release\netcoreapp2.0\publish"

# Create the zip file
Compress-Archive -Path $PathToZip -DestinationPath ($PathToZip + $csproj[0].Name.trim(".csproj") + ".zip")

我希望这会有所帮助!