Przesiadam się powoli z GitlabCI na Jenkins i mam problem z zarządzaniem sekretami/zmiennymi środowiskowymi itp. Chyba zbyt bardzo przyzwyczaiłem się do GitlabCI i szukam pewnych zastępników.
Co ważne w Gitlabie używam głównie Pipelinów - piszę to bo zauważyłem, że wiele pluginów wspiera tylko niektóre typy projektów - np. znalazłem ciekawy plugin do wstrzykiwania zmiennych środowiskowych, ale działa on tylko w projketach "free style".
Po kolei opiszę problemy i jak je rozwiązywałem w GitalbCI:
Pliki .env
W projekcie często potrzebuje pliku .env. Plik taki przechowywałem sobie jako zmienną CI (gitlab pozwala przechowywać plik tekstowy jako zmienną) i w trakcie builda kontenera kopiowałem sobie ten plik .env do kontenera. Jak poprawnie przechowywać plik .env w Jenkins? Czy takie pliki powinienem przechowywać w sekcji "credentials" i jakoś pobierać je w pipelinie czy ogarnia się to jakoś inaczje?
Zmienne środowiskowe
W projektach mamy sporo zmiennych środowiskowych, które nie są sekretami. Np. nazwa domeny pod jaką zdeployować dany projekt, ścieżka na serwerze itp. W jaki sposób takie zmienne przechowuje się w Jenkins? Na razie przechowuje je w skrypcie w sekcji environment, ale to oznacza, że każda zmiana takiej zmiennej wymaga commitu do repozytorium. Plugin environment injector zdaje się, że załatwiłby ten problem, ale nie działa z Pipelinami.
Zmienne środowiskowe zależne od środowiska
W Gitlabie można sobie zdefiniować zmienne środowiskowe i uzależnić je od "środowiska" - np. mogę sobie zdefiniować, że nazwa brancha to będzie moje środowisko, a w panelu zdefiniować, że zmienna X dla środowiska master będzie 1 a dla środowiska develop 2.
Czy da się to jakość ogarnąć takie "warunkowe" zmienne? Znów na tą chwilę ogarniam to jako funkcję w skrypcie pipelina, która zwraca odpowiednią wartość, ale ma to takie same wady jak w punkcie poprzednim.
Ogólnie sam Jenkins mi się podoba i ma wiele plusów, ale w kwestii zarządzania envami mam wrażenie, że coś mi umyka.