Как преобразовать mailSettings в web.config, не имея учетных данных в управлении исходным кодом

У меня есть веб-приложение, которое я развертываю в службе приложений Azure, используя VSTS. До сих пор мне удавалось успешно использовать преобразования конфигурации и подстановки переменных, чтобы не иметь никакой конфиденциальной информации в управлении исходным кодом, но я не могу понять, как это сделать для учетных данных smtp в system.net/mailSettings/ SMTP / сети.

У кого-нибудь есть идеи?

1 ответ

Решение

ОК, немного покопавшись и расспросив, кажется, что используется WebDeploy и parameters.xml работает.

Вот что я сделал:

  1. Я добавил аддон Заменить токены в свою учетную запись VSTS.
  2. Я добавил parameters.xml в свой проект веб-сайта, и он выглядит так:

    <?xml version="1.0" encoding="utf-8"?>
    <parameters>
      <parameter name="Mail.Username" description="The username used for smtp authentication" defaultValue="#{Mail.UserName}#" tags="">
        <parameterEntry kind="XmlFile" scope="obj\\Release\\Package\\PackageTmp\\Web\.config$" match="/configuration/system.net/mailSettings/smtp/network/@userName" />
      </parameter>
      <parameter name="Mail.Password" description="The password used for smtp authentication" defaultValue="#{Mail.Password}#" tags="">
        <parameterEntry kind="XmlFile" scope="obj\\Release\\Package\\PackageTmp\\Web\.config$" match="/configuration/system.net/mailSettings/smtp/network/@password" />
      </parameter>
    </parameters>
    
  3. Мой шаг сборки уже был настроен на вывод пакета, но это те параметры MSBuild, которые необходимы для шага сборки. /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=”$(build.artifactstagingdirectory)\\” если вы, как и я, выполняете преобразования конфигурации строк подключения, вы можете добавить /p:AutoParameterizationWebConfigConnectionStrings=false к этому списку параметров, а также.

  4. В конфигурации выпуска перед этапом " Служба приложения " Развертывание в Azure "" добавьте шаг с помощью вышеупомянутого дополнения " Заменить токены". Я придерживался синтаксиса по умолчанию для значений замены, но их можно было изменить. Поскольку я использую все значения по умолчанию, я запускаю задачу в корневом каталоге $(System.DefaultWorkingDirectory)/$(Build.DefinitionName)/drop и целевые файлы *.SetParameters.xml

  5. Затем на шаге " Служба приложения " Развертывание в Azure "" я выбрал опцию " Опубликовать с помощью Web Deploy" и для файла SetParameters, который я использовал $(System.DefaultWorkingDirectory)/$(Build.DefinitionName)/drop/<Name of Web Project>.SetParameters.xml

  6. В разделе " Действие после развертывания" установите для типа сценария развертывания значение " Встроенный сценарий" и добавьте следующий сценарий.

    @echo off
    del parameters.xml
    

    Это связано с тем, что файлы.config по умолчанию не обслуживаются, а файлы.xml и parameters.xml будет сидеть в вашем веб-корне без защиты, с вашим именем пользователя и паролем SMTP в виде простого текста.

  7. Затем добавьте переменные выпуска с именами Mail.Username и Mail.Password и заполните их значения. Я сделал Mail.Password секретом.

  8. Проверьте все и запустите сборку и релиз!

Другие вопросы по тегам