2012-02-27 9 views
11

Wdrożyliśmy nasze wdrażanie środowiska ciągłej integracji przy użyciu TeamCity. Pracując nad procesem CI i dążąc do ciągłego wdrażania, natrafiliśmy na problem z zarządzaniem hasłami produkcyjnymi. W przypadku innych zmian w konfiguracji używamy transformacji Web.Config. Jednak tak naprawdę nie chcę upiec hasła produkcyjnego w profilu kompilacji.Zarządzanie hasłami w ciągłym wdrażaniu

Przed CI/CD, weźmiemy Web.config, użyjemy aspnet_regiis do odszyfrowania ciągów połączeń, zmiany hasła, a następnie ponownego zaszyfrowania. Oczywiście jest to podatne na błędy i wcale nie w duchu CI/CD.

Miałem kilka innych myśli, które zasadniczo dotyczyły użycia czegoś w skrypcie wdrożenia do ponownego napisania, a następnie zaszyfrowania sekcji ciągów połączenia pliku, ale wydaje się, że to musi być powszechny problem i że istnieje musi być pewnym ogólnie przyjętym rozwiązaniem. Ale do tej pory nie mogę go znaleźć. Czy istnieje "właściwa droga"?

Dzięki!

+1

Jeśli wybierasz się na CD, to oczywiście * coś * w twoim łańcuchu budowania/wdrażania musi znać hasła (lub proxy dla haseł). –

+0

możliwy duplikat [Jak skonfigurować TeamCity z plikami prywatnymi?] (Http://stackoverflow.com/questions/6721000/how-to-configure-teamcity-with-private-files) –

+1

@Damien_The_Unbeliever Tak, ale to coś może być serwerem TeamCity, do którego dostęp ma inny zestaw osób niż Twój VCS. – thelem

Odpowiedz

12

Jednym z możliwych rozwiązań, dostępnych od TeamCity 7.0, jest używanie parametrów pisanych na maszynie (http://confluence.jetbrains.net/display/TCD7/What%27s+New+in+TeamCity+7.0#What%27sNewinTeamCity7.0 -Typedbuildparameters). Możesz zdefiniować parametr w TeamCity hasła typu i przekazać go w jakiś sposób do skryptu budowania (jako zmiennej środowiskowej lub jako własność skryptu budowania).

TeamCity przechowuje wartości takich parametrów w swoich własnych plikach konfiguracyjnych oraz w bazie danych w postaci zaszyfrowanej. Jeśli hasło pojawi się w dzienniku kompilacji lub na stronie parametrów kompilacji, zostanie zastąpione hasłem *.

+0

Zauważ, że surowe hasło może pojawić się w dzienniku, a nawet strona TeamCity mówi: "Ustawienie parametru do wpisania hasła nie gwarantuje, że nie można pobrać wartości nieprzetworzonej.' Sytuacja, z którą miałem do czynienia: Kiedy twoje polecenie git nie powiedzie się, drukuje linię' Żądany adres URL zwrócił błąd: 400 złe żądanie podczas uzyskiwania dostępu do '. Więc jeśli użyjesz adresu URL git z hasłem do informacji o użytkowniku/haśle, tutaj nie zastąpi go ****, nawet jeśli wpisałeś w odpowiedni sposób –

2

Użyj transformacji konfiguracji. Możesz nawet zbudować własną transformację, która może obsługiwać szyfrowanie/odszyfrowywanie. Najprostszym sposobem jest zaszyfrowanie ciągów produkcyjnych w pliku release.web.config i użycie transformacji do obsługi zastępowania łańcuchów połączeń.

http://msdn.microsoft.com/en-us/library/dd465318.aspx

http://sedodream.com/2010/09/09/ExtendingXMLWebconfigConfigTransformation.aspx

Jeśli to nie zadziała, użyj zdarzenia postbuild zadzwonić aspnet_regiis. Jeśli zdecydujesz się rozszerzyć transformację konfiguracji, możesz zrobić z nią WSZYSTKO. Klucze szyfrowania mogą znajdować się na Księżycu tak długo, jak długo możesz do nich dotrzeć.

+0

Nie jest łatwo, gdzie można przechowywać klucze szyfrowania? – oleksii

+0

Co powiesz na zdarzenie postbuild? Nie wiem, czy możesz to zrobić w TeamCity, ale Jenkins to popiera. – Darthg8r

0

Nie można zdefiniować łańcuchów połączeń IN. Czy one się zmieniają? Myślę, że po prostu ustawiłbym je w IIS dla witryny, a następnie nie instalowałem ich jako części aplikacji, lub przynajmniej preferowałem ustawienia IIS.

+2

Pomyślałem, że narzędzia IIS właśnie dostarczyły miły front-end do edycji pliku web.config aplikacji, chociaż nie mogę znaleźć dokumentacji, która to potwierdza. – Jacob

+0

Jeśli wykonujesz ciągłe dostarczanie/wdrażanie, to serwer kompilacji powinien również być odpowiedzialny za konfigurację usług IIS. To nie powinien być krok ręczny. –

Powiązane problemy