Использование 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, и вы можете продолжать столько, сколько хотите, это дает вам приятную возможность, потому что вы можете назначать для разных сред разные агенты и разные конвейеры, например, мы работаем только модульный тест в тестировании, поэтому я поставил самый медленный агент для этой задачи.

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