Использование Go CD с.NET
Я хотел бы использовать Go CD с проектами.NET Web API и Git.
Мне нравится идея продвижения определенного артефакта сборки в некоторых средах через конвейеры. В настоящее время мы используем TeamCity и разветвляемся в Git. Мы используем MSBuild для сборки и развертывания с определенным Config Transform (Test, Staging, Live).
Наши аргументы командной строки MSBuild следующие:
/p:Configuration=%DeployConfiguration% /p:Platform=AnyCPU /t:WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=%DeployPath%
%DeployConfiguration%
параметр для каждой среды; Тестируйте, ставите, живите и используйте.NET Config Transforms для преобразования Web.config для указанной среды.%DeployPath%
является параметром для каждого проекта для каждой среды. Так что AuthAPI Live будет примерно таким:\\liveServer\path\to\AuthAPI\
,
Мой единственный вопрос, касающийся этого: как использовать конкретную конфигурацию среды (с использованием.NET Config Transforms), когда артефакт сборки переносится на следующую стадию в конвейере? Так, например, когда сборка продвигается в среду тестирования, я хочу использовать Web.Test.config, но при переходе в промежуточную среду я хочу использовать Web.Staging.config и т. Д.
Также я хотел бы знать, есть ли у вас опыт использования Go CD с проектами.NET?
3 ответа
Существуют части конфигурации, которые зависят от среды (например, у вас будет другое соединение с БД для Dev,QA, UAT, производственных сред), а затем есть параметры конфигурации, которые не меняются от одной среды к другой, давайте вызовем их Конфигурационные значения для конкретного приложения. Примером этого может быть, вы, возможно, настроили компонент logger и, не обращая внимания на то, в каком окружении находится приложение, вы хотите, чтобы файлы журналов помещались в определенную папку c:\logs.
Я бы посоветовал сохранить специфичные для приложения настройки в вашем файле App.Config (они развертываются из одного окружения в другое с помощью xcopy), но те, которые зависят от среды, вынуты. Отдельное развертывание конфигурации среды от развертывания вашего приложения. Они должны быть развернуты на компьютере, когда он собран / настроен.
Переменные, специфичные для среды, могут быть сохранены в переменных среды ОС, файле Machine.config, известном расположении файла и т. Д.
Таким образом, ваше приложение просто должно запросить: Environment.GetEnvironmentVariable("MyAppDBName")
И Dev, QA, и производственные среды / серверы будут иметь разные ответы.
И вы будете развертывать одни и те же двоичные файлы в каждой среде.
У меня нет опыта использования Go CD с проектами.NET, но, возможно, мой совет будет полезным.
1. Создайте файл TransformStaging.csproj с содержимым:
<Project ToolsVersion="4.0" DefaultTargets="Transform" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildProjectDirectory)\MSBuild\Microsoft.Web.Publishing.targets" />
<Target Name="Transform">
<Copy SourceFiles="$(Source)" DestinationFiles="$(Source).tmp"/>
<TransformXml Source="$(Source).tmp" Transform="Web.Staging.config" Destination="$(Source)" />
</Target>
</Project>
2. Звоните с помощью
msbuild.exe TransformStaging.csproj /p:Source=$configFilePath
Нермин Дибек указывает правильный путь, но я хотел бы добавить что-то более конкретное к его ответу.
Я реализовал этот процесс в своей организации, и после того, как вы перейдете к переменным среды (благодаря этому вы избегаете фиксации файла конфигурации, который содержит секретные ключи (утечки безопасности)), в GoCD есть среда для вызовов с места, которая позволит вам настроить конвейер, где ты бегаешь. Например, в моей организации у меня есть Staging env, Testing env, Prod, и вы можете продолжать столько, сколько хотите, это дает вам приятную возможность, потому что вы можете назначать для разных сред разные агенты и разные конвейеры, например, мы работаем только модульный тест в тестировании, поэтому я поставил самый медленный агент для этой задачи.