Numerownie buildów w AWS CodeBuild

Ostatnio zdażyło mi się eksperymentować z AWS CodeBuild, CodeDeploy i CodePipeline jako alternatywy dla TeamCity/Jenkinsa. Konfiguracja i użycie tych narzędzi jest bardzo proste i wygodne, szczególnie jeśli cała infrastruktura jest umieszczona w AWS. Jednak brakowało mi prostej funkcjonalości jaką jest numerowanie kolejnych buildów, tak żębym mógł użyć tego numeru przy releasowaniu biblioteki czy kontenera dockerowego.

Po krótkim researchu okazało się, że można taką numerację dość łatwo dodać używając kolejnej usługi Amazona jaką jest AWS System Manager Parameter Store (SSM). Możemy tam przechowywać własne parametry które potem sa udostępniane jako zmienne środowiskowe dla naszego buildu. Po ukończeniu budowania projektu, możemy podbić numerek np. przy użyciu bashowego jednolinijkowca.

Tworzymy zmienną

Należy zacżąć od stworzenia zmiennej. Bez tego build zakońćzy się niepowodzeniem z wiadomością:

W zakładce services w konsoli amazona wyszukujemy System Manager, następnie w menu po lewej wybieramy Parameter Store.

Wyszukujemy usługę System Manager
Następnie wybieramy Prameter Store

Dalej klikamy Create Parameter i wypełniamy pola. Jako schemat nazw wybrałem /build-number/project-name, dzięki temu potem można łatwiej nadać uprawnienia do parametrów (o tym będzie później). Jako typ parametru wybieramy String. Tier wystarczy standard. Valu to początkowa wartość parametru, najlepiej 1. Po wypełnineiu pól, klikamy create parameter.

Dalej klikamy create parameter

Mamy już zainicjowany parametr. Możemy przejść dalej.

Nadajemy uprawnienia w IAM

Projekt w CodeBuild ma przypisaną rolę z którą się wykonuje. Musimy jej przypisać Policy która zezwoli na pobranie wartości parametru oraz jej modyfikację. Może być to inline policy. Powinna wyglądać mniej więcej tak:

W przykładzie należy zmienić region i account-id na wasze wartości.

Przygotowanie buildu

Ostatnim krokiem jest dodanie odpowiednich parametrów w pliku konfiguracyjnym buildu.

W miejscu oznaczonym jako # 1 definiujemy jakie zmienne środowiskowe mają być dostępne w skrypcie. Jeśli build posiada odpowiednie uprawnienia zostaną one automatycznie pobrane z Parameter Store. Aby się upewnić że wszystko jest ok możemy wypisać do logów ten numer (#2). Używając version plugin z mavena ustawiamy versję projektu (#3) i stosujemy ją tez do modułów potomnych (#4). Następnie inkrementujemy numer (#5) i nadpisujemy jego wartość w Parameter Storze (#6).

W przykładzie użyłem Mavena, ale tak samo możemy wykorzystać go do budowania konetenerów dockerowych czy innych tooli gdzie potrzebujemy ustawić jakąś konkretną wersję.

Podsumowanie

Pokazany sposób możemy wykorzystać w każdym projekcie Code Builda, niezależnie od użytego języka/narzędzia do budowania. Musimy jedynie pamiętać o ręczym stworzeniu parametru, ponieważ bez tego nasz build będzie failował.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.