MSBUILD публикует ERROR_USER_UNAUTHORIZED

Резюме

Я использую многоканальный CI Gitlab 9.2.0 на Windows Server 2016. На этапе, когда я публикую проект ASP.NET через MSBUILD, у меня возникает ошибка аутентификации ERROR_USER_UNAUTHORIZED от IIS. Но когда я использую окно CMD на машине сборки, я запускаю ту же команду для публикации — все публикуется. Не имеет значения, использовал ли я учетную запись SYSTEM или ADMINISTRATOR.

Действия по воспроизведению

  1. Настройка публикации IIS.
  2. Настройте агент сборки Gitlab.
  3. Создайте скрипт сборки Gitlab YAML (см. ниже).
  4. Запустите сборку.

Фактическое поведение

На этапе публикации у меня ошибка ERROR_USER_UNAUTHORIZED.

Ожидаемое поведение

На этапе публикации мой ASP.NET опубликован на сервере.

Соответствующие журналы и/или скриншоты

  C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.targets(4292,5): msdeploy error ERROR_USER_UNAUTHORIZED: Не удалось выполнить задачу Web Deploy. (Выполнено подключение к удаленному компьютеру ("192.168.1.66") с использованием службы веб-управления, но не удалось авторизовать. Убедитесь, что вы используете правильные имя пользователя и пароль, что существует сайт, к которому выполняется подключение, и что учетные данные представляют пользователя, у которого есть разрешения на доступ к сайту.  Дополнительные сведения: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_UNAUTHORIZED.) [C:\Gitlab_Build_Agents\1\builds\2378ccf8\0\rushydro\aisa\Sources\Mvc\Mvc.csproj]

Описание среды

Я использую общий Runner (gitlab-ci-multi-runner-windows-386, версия 9.2.0) в Windows 2016. MSBUILD является частью Microsoft Visual Studio 2017.

YAML-скрипт

variables:
  solution: Sources\Faso.sln
  msbuild: C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\MSBuild.exe
  nunit: C:\NUnit\NUnit.Framework-3.7.0\bin\net-4.5\nunitlite-runner.exe
  nuget: C:\NuGet\nuget.exe

before_script:
  - echo Setting encoding...
  - echo %solution%
  - echo Restoring NuGet packages...
  - '"%nuget%" restore "%solution%"'

stages:
  - build-test
  - deploy-5023

build-test:
  stage: build-test
  script:  
  - chcp 65001
  - echo Building...
  - '"%msbuild%" "%solution%" /t:Build /p:Configuration=Release /p:TargetFramework=v4.5.2'
  - echo Testing...
  - dir /s /b *.Tests.dll | findstr /r Tests\\*\\bin\\ > testcontainers.txt
  - 'for /f %%f in (testcontainers.txt) do "%nunit%" "%%f"'
  except:
  - tags

deploy-5023:
  stage: deploy-5023
  script:
  - chcp 65001
  - echo Deploying...
  - '"%msbuild%" "%solution%" /p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:MsDeployServiceUrl=https://192.168.1.66:8172/msdeploy.axd /p:username=user /p:password=password /p:Configuration=Release /p:TargetFramework=v4.5.2 /p:AllowUntrustedCertificate=True /p:DeployIisAppPath=Faso /p:MSDeployPublishMethod=WMSVC /p:SkipExtraFilesOnServer=True /p:ExcludeFilesFromDeployment="Web.config;ConnectionStrings.config;system.config"'
  when: manual
  except:
  - tags
  artifacts:
    expire_in: 1 week
    paths:
    - Sources\Mvc\App_Data\
    - Sources\Mvc\bin\
    - Sources\Mvc\Content\
    - Sources\Mvc\favicon.ico
    - Sources\Mvc\Global.asax
    - Sources\Mvc\Web.config

person Mark Twain    schedule 16.06.2017    source источник


Ответы (1)


Решено путем изменения порядка и формата аргументов для MSBUILD.

- '"%msbuild%" "%solution%" /p:DeployOnBuild=True;Username=username;Password=password;DeployTarget=MSDeployPublish;MsDeployServiceUrl=https://192.168.1.66:8172/msdeploy.axd;Configuration=Release;TargetFramework=v4.5.2;AllowUntrustedCertificate=True;DeployIisAppPath=Faso;MSDeployPublishMethod=WMSVC;SkipExtraFilesOnServer=True;ExcludeFilesFromDeployment="Web.config;ConnectionStrings.config;system.config"'
person Mark Twain    schedule 19.06.2017
comment
После долгих выдергиваний (публикация работает в IDE, но не в командной строке) я скопировал вашу команду, заменил параметры, и это просто сработало. - person nurettin; 10.11.2017
comment
@nurettin еще одна проблема была с моим паролем. Он содержал восклицательный знак (!), Он был неправильно переведен CMD и сломал команду. - person Mark Twain; 11.11.2017
comment
У меня также есть пароль с восклицательным знаком, но он не нарушает командную строку (я не использую powershell или bash). Хотя я понимаю, что символы пароля могут сломать команды из-за прошлого опыта работы с bash. - person nurettin; 11.11.2017