#011 - GitLab - CI/CD embedded #04
Jest to wpis z serii CICD w embedded i za pierwszym razem zalecane jest przejrzenie wszystkich części po kolei.
- wpis 1 - budowanie HelloWorld w C na GitLabie
- wpis 2 - Dodatkowe informacje na temat skryptów budujących
- wpis 3 - Własny PC/Raspberry jako runner
- wpis 4 - CubeIDE - przygotowanie testowego projektu
- wpis 5 - CubeIDE - przygotowanie obrazu dockera do budowania
- wpis 6 - CubeIDE - budowanie projektu
- wpis 7 - rozbudowanie skryptów budujących
- wpis 8 - automatyczne testy jednostkowe
- wpis 9 - raport pokrycia kodu testami
CubeIDE
Ten wpis będzie bardzo krótki - chodzi w nim o to, że tak naprawdę w projekcie CubeIDE nie trzeba robić nic dodatkowego, ale jest kilka uwag o których warto wspomnieć, które mogą trochę ułatwić pracę.
Zakładanie projektu i repozytorium
Projekt założyłem na platformę STM32F4 - wykorzystam płytkę STM32F4Discovery.
Pierwsza “porada” - polecam nazywać projekty w CubeIDE i repozytoria na nie w taki sam sposób (duże i małe litery mają znaczenie) - dzięki temu później w skryptach będzie można użyć zmiennej środowiskowej z nazwą - czyli skrypty budujące będą bardziej uniwersalne.
Zainicjalizowane puste repozytorium:

Nazwa to: “stm32cubeIDE_build” - link: https://gitlab.com/embedownik/stm32cubeIDE_build
Wygenerowanie projektu w CubeIDE - praktycznie standardowo (użyta wersja CubeIDE to 1.6.1) - nazwa taka sama jak repozytorium:

W kolejnym oknie należy wybrać wersję bilbiotek HAL - tu jest jedna opcja, której nie rozumiem - jeśli generujemy projekt dla CubeIDE to zawsze jest wyszarzona opcja skopiowania wszystkich bibliotek. W moim workflow powoduje to pewne problemy - nie wszystkie biblioteki są “wyklikiwalne” - niektóre mają konfigurację zrobiąną w środku i wtedy potrzebują np. bibliotek HALa do DMA, a DMA nie jest wyklikane - czyli nie znajdzie sie w katalogu z HALem. Obejście tego problemu to “ręczne” jednorazowe skopiowanie do projektu wszystkich plików z biblioteki HAL i dodanie ich do kontroli wersji - póżniej podczas regeneracji projektu CubeIDE będzie uparcie je kasował - ale łatwo je przywrócić komendami GITa.
Celowo nie wybrano opcji z używaniem bibliotek jako referencji - trzymanie ich w projekcie ułatwi budowanie na CI/CD.
W projekcie skonfigurowano tylko 4 diodki:

Struktura katalogów - klasycznie dla CubeIDE:

W pliku main.c dodano tylko miganie:
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(LD1_GPIO_Port, LD1_Pin);
HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
HAL_GPIO_TogglePin(LD4_GPIO_Port, LD4_Pin);
HAL_Delay(300);
}
/* USER CODE END 3 */
Inicjalizacja repozytorium po przejściu do katalogu z projektem to komendy dokładnie takie jakie podpowiada GitLab po utworzeniu pustego repozytorium:
git init .
git remote add origin git@gitlab.com:embedownik/stm32cubeIDE_build.git
W pierwszych commitach polecam dodać plik .gitignore:
Debug/
Release/
aby mieć pewność, że pliki wynikowe nie znajdą się w repozytorium.
Dzięki temu teraz można zrobić:
git add -A
dodajać wszystkie pliki projektu.
W testowym projekcie będzie tylko blink - więc w tym przypadku nie będę kopiował wszystkich plików HALa.
Podsumowanie
W tym wpisie wygenerowano w STM32CubeIDE testowy projekt, który będzie budowany na CICD.