Почему «dotnet lambda deploy-function» не может извлечь пакет из фида артефактов DevOps Azure? - PullRequest
0 голосов
/ 02 февраля 2019

Я использую задачу AWS deploy lambda в DevOps Azure.В развернутой лямбда-функции она настроена на извлечение пакета из потока артефактов в том же репо / установке Azure DevOps.

Если я запускаю NuGet restore на предыдущем этапе развертывания, тогда пакет можетполучить доступ к нему нормально, однако, когда он достигает шага AWS Lambda .NET Core Deployment, он получает 401 при попытке чтения из того же канала.

Кто-нибудь знает, как я могу настроить шаг выпуска лямбды для успешного чтения из пользовательского канала?

Конкретная ошибка:

Код состояния ответа не указывает на успех: 401

1 Ответ

0 голосов
/ 08 февраля 2019

У меня та же проблема, но, надеюсь, я могу предложить немного нового взгляда на нее.

Вместо того, чтобы использовать AWS deploy lambda, мы упаковываем наши лямбды и отправляем их на S3, чтобы CloudFormation мог их развернуть.При этом используется инструментарий AWS dotnet для создания пакета развертывания (что и делает aws deploy lambda в фоновом режиме).Шаг PowerShell, который выполняет это, выглядит следующим образом:

dotnet lambda package

Результирующий пакет обычно генерируется в папке bin / release под вашим проектом.

Затем вы можете добавить параметры --msbuild-parameters "--no-restore" в процесс упаковки, который не вызовет этап автоматического восстановления.Внутри Azure DevOps Build Pipelines вы можете задать шаг сборки до того, как он будет восстановлен для всех решений или файлов csproj, которые будут автоматически аутентифицироваться на вашем фиде.Мы также установили номер версии сборок, и я хотел избавиться от раздражающего предупреждения, чтобы наша текущая версия этого вызова выглядела так:

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

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что передача вmsbuild-параметры, кажется, устанавливают платформу, чтобы предназначаться для Linux Red Hat (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 cli, который dotnet lambda publish фактически использует в репозитории git для набора инструментов , и продублировал его шаги без посредника.Поскольку флаг msbuild-parameters больше не использовался, он не пытался встроить его в Red Hat Linux.Я также должен был создать почтовый файл впоследствии, но это довольно тривиально.Ниже приведен PowerShell, создающий новые пакеты без набора инструментов aws dotnet:

# 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")

Надеюсь, это поможет!

...