понедельник, 16 июля 2018 г.

TFS 2015 и Azure PowerShell Task. Проблема с импортированием модуля AzureRM


Сегодня столкнулся с проблемой - перестали запускаться задачи Azure PowerShell на новом билд агенте. При этом ошибка была странная, для которой Google выдал несколько вариантов решения но, к сожалению, они мне не подошли.


В логах TFS 2015 ошибка выглядит следующим образом:

2018-07-16T00:22:19.6712362Z Importing AzureRM Powershell module.
2018-07-16T00:22:19.8118677Z ##[error]The following error occurred while loading the extended type data file: 
2018-07-16T00:22:19.8118677Z ##[error]Error in TypeData "Microsoft.Azure.Commands.Common.Authentication.Abstractions.IAzureContextContainer": The TypeConverter was ignored because it already occurs.
2018-07-16T00:22:19.8118677Z ##[error]Error in TypeData "Microsoft.Azure.Commands.Common.Authentication.Abstractions.IAzureContextContainer": The member SerializationDepth is already present.
2018-07-16T00:22:19.8274952Z ##[error]Error in TypeData "Microsoft.Azure.Commands.Common.Authentication.ProtectedFileTokenCache": The member PropertySerializationSet is already present.
2018-07-16T00:22:19.8274952Z ##[error]Error in TypeData "Microsoft.Azure.Commands.Common.Authentication.ProtectedFileTokenCache": The member SerializationMethod is already present.
2018-07-16T00:22:19.8274952Z ##[error]Error in TypeData "Microsoft.Azure.Commands.Common.Authentication.AuthenticationStoreTokenCache": The member PropertySerializationSet is already present.
2018-07-16T00:22:19.8274952Z ##[error]Error in TypeData "Microsoft.Azure.Commands.Common.Authentication.AuthenticationStoreTokenCache": The member SerializationMethod is already present.
2018-07-16T00:22:19.8274952Z ##[error]Error in TypeData "Microsoft.Azure.Commands.Profile.Models.PSAzureContext": The member SerializationDepth is already present.
2018-07-16T00:22:19.8274952Z ##[error]Error in TypeData "Microsoft.Azure.Commands.Profile.Models.PSAzureProfile": The member SerializationDepth is already present.
2018-07-16T00:22:25.3277045Z AzurePSCmdletsVersion= 5.7.0

Теперь попробуем импортировать модуль AzureRM локально в PowerShell. И тут мы видим ошибку, аналогичную той, что выделена красным цветом выше. Но под ней есть дополнительная информация:

At C:\Program Files\WindowsPowerShell\Modules\azurerm\5.7.0\AzureRM.psm1:12 char:1
+ Import-Module AzureRM.Profile -RequiredVersion 4.6.0 -Global

Посмотрим, установлен ли у нас этот модуль:

> get-module AzureRM.Profile -ListAvailable | Select Version, Name

Version Name
------- ----
5.3.2   AzureRM.profile
5.3.1   AzureRM.profile
4.6.0   AzureRM.profile
4.3.0   AzureRM.profile
4.2.0   AzureRM.profile
4.0.0   AzureRM.profile

Версия AzureRM.profile 4.6.0 у нас есть. Но по тексту ошибки мы видим, что проблема в том, что модуль другой версии уже кто-то импортировал. А делает это сам TFS и берет он последний из доступных. Соответственно и Azure PowerShell Task начинает падать с ошибкой. Воспроизвести ее локально мы можем выполнив последовательно:

Import-Module AzureRM.Profile -RequiredVersion 5.3.2 -Global
Import-Module AzureRM.Profile -RequiredVersion 4.6.0 -Global

Чтобы решить проблему, нам необходимо отредактировать файл "C:\Program Files\WindowsPowerShell\Modules\azurerm\5.7.0\AzureRM.psm1". В нем надо найти строку:

...
Import-Module AzureRM.Profile -RequiredVersion 4.6.0 -Global
...

и выполнить замену верси AzureRM,Profile на последнюю, которая установлена на сервере (в моем примере это версия 5.3.2):

...
Import-Module AzureRM.Profile -RequiredVersion 5.3.2 -Global
...

На этом всё. Надеюсь, что если вы нашли эту статью, то информация оказалось полезной. Если есть уточнения, оставляйте их в комментариях.




Комментариев нет:

Отправить комментарий