diff --git a/articles/2016/uvod-do-gitlab-ci.md b/articles/2016/uvod-do-gitlab-ci.md new file mode 100644 index 0000000000000000000000000000000000000000..a09a018741a89ee680f3cf5f6cec313ed1fa7b2f --- /dev/null +++ b/articles/2016/uvod-do-gitlab-ci.md @@ -0,0 +1,161 @@ +``` +title = "Ăšvod do GitLab CI" +perex = "StruÄŤnĂ˝ Ăşvod do nástroje continuous integration, kterĂ˝ je integrován do GitLabu. ZaměřĂme se na základnĂ pouĹľĂvánĂ a nastavenĂ." +tagy = ["ÄŚlánek", "ProgramovánĂ", "GitLab", "CI"] +image = "ci-lead.png" +lang = "yaml" + +``` +# Ăšvod +CI je zkratkou continuous integration - ÄŤesky prĹŻběžná integrace. VyuĹľĂvá se u systĂ©mĹŻ správy verzĂ (Git, Subversion, ...) hlavnÄ› pro automatickĂ© testovánĂ kĂłdu. ObecnÄ› lze CI vyuĹľĂt k provedenĂ jakĂ˝hkoliv pĹ™ĂkazĹŻ ÄŤi skriptĹŻ na danĂ©m projektu, po nahránĂ novĂ˝ch zmÄ›n do repozitáře. NapĹ™Ăklad kdyĹľ spravujete vÄ›tšà projekt, do kterĂ©ho pĹ™ispĂvá nÄ›kolik vĂ˝vojářů, tak dĂky CI vidĂte na prvnĂ pohled, jestli zaÄŤleĹovanĂ© zmÄ›ny fungujĂ a jestli celĂ˝ projekt nerozbijĂ. VĂce informacĂ na [wiki](https://cs.wikipedia.org/wiki/Pr%C5%AFb%C4%9B%C5%BEn%C3%A1_integrace). + +# GitLab +Gitlab je komplexnĂ aplikace, která od verze 8 plnÄ› integruje CI (dĹ™Ăve se jednalo o samostatnou aplikaci). KaĹľdĂ˝ projekt má standardnÄ› CI povolenĂ©. Pokud ho u danĂ©ho projektu nepotĹ™ebujeme, tak je dobrĂ© jĂt do nastavenĂ projektu a CI zakázat. + +PĹ™i správnÄ› nastavenĂ©m CI dojde po pushnutĂ novĂ˝ch commitĹŻ k jejich buildu (sestavenĂ) - provedou se akce, kterĂ© jsou definovány v souboru `.gitlab-ci.yml`. V záloĹľce build potĂ© mĹŻĹľeme sledovat, zda build probÄ›hl správnÄ› nebo jestli se vyskytla chyba. + + + +# GitLab Runner +Jedná se o program, kterĂ˝ vykonává samotnĂ˝ build pro projekt. MĹŻĹľe bĂ˝t na vzdálenĂ©m serveru nebo i na Vašem poÄŤĂtaÄŤi. [VĂce informacĂ](https://about.gitlab.com/gitlab-ci/#gitlab-runner) + [návod na instalaci](https://gitlab.com/gitlab-org/gitlab-ci-multi-runner#installation). + +# .gitlab-ci.yml +TĂmto souborem se nastavujĂ akce, kterĂ© se provádĂ pĹ™i buildu. Soubor je součástĂ projektu, coĹľ sebou pĹ™inášà řadu vĂ˝hod - verzovánĂ, ostatnĂ se mohou inspirovat a [dalšĂ](https://about.gitlab.com/2015/05/06/why-were-replacing-gitlab-ci-jobs-with-gitlab-ci-dot-yml/). + +Jedná se o soubor ve formátu [YAML](https://cs.wikipedia.org/wiki/YAML) takĹľe je dĹŻleĹľitĂ©, aby se pro odsazovánĂ pouĹľĂvaly 4 mezery - tabulátor nenĂ podporovanĂ˝! + +Pro kontrolu syntaxe je vĂ˝hodnĂ© pouĹľĂt [CI lint](https://git.ok1kvk.cz/ci/lint). + +ĂšplnÄ› základnĂ .gitlab-ci.yml mĹŻĹľe vypadat takto: +``` +before_script: + - avr-gcc --version + - which avr-gcc + - find /usr/share/cmake/Modules -name "Findavr.cmake" + +build-hex: + script: + - mkdir build + - cd build + - cmake .. + - make + + artifacts: + paths: + - build/program.hex + +``` + +- `before_script:` - urÄŤuje, co se má vykonat pĹ™ed buildem - tady je dobrĂ© otestovat/nainstalovat balĂÄŤky, kterĂ© jsou potĹ™ebnĂ© pro dalšà operace + +- `build-hex:` - akce, kterou jsem pojmenoval *build-hex* + - `script:` - urÄŤuje pĹ™Ăkazy, kterĂ© se majĂ vykonat - tedy v tomto pĹ™ĂpadÄ› se zkompiluje program pro mikroprocesor z rodiny AVR + - `artifacts:` - urÄŤuje soubory nebo i celĂ© sloĹľky, kterĂ© se nahrajĂ do GitLabu a budou dostupnĂ© pro staĹľenĂ - tedy zde se nahraje vĂ˝slednĂ˝ HEX soubor + - tÄ›chto akcĂ mĹŻĹľe bĂ˝t vĂc, napĹ™Ăklad pro vĂce typĹŻ mikroprocesorĹŻ, mohou se provĂ©st testy a podobnÄ› - tyto akce potĂ© běžà paralelnÄ› a nezávisle na sobÄ› + +VĂce informacĂ o moĹľnostech nastavenĂ naleznete pĹ™ehlednÄ› [zde](http://doc.gitlab.com/ce/ci/yaml/README.html). + +# ZávÄ›r +Po pushnutĂ `.gitlab-ci.yml` se provede prvnĂ build, kterĂ˝ mĹŻĹľete sledovat v záloĹľce *Builds*. Po kliknutĂ na status danĂ©ho commitu se dostanete do podrobnostĂ a uvidĂte vĂ˝pis z prĹŻbÄ›hu buildu, coĹľ je uĹľiteÄŤnĂ© pro hledánĂ chyb. +``` +gitlab-ci-multi-runner 1.0.4 (014aa8c) +Using Shell executor... +Running on tesla.ok1kvk.cz... +Fetching changes... +HEAD is now at 04020a5 Add .gitlab-ci.yml +From https://git.ok1kvk.cz/namespace/program + 04020a5..bb086a9 master -> origin/master +Checking out bb086a97 as master... +Previous HEAD position was 04020a5... Add .gitlab-ci.yml +HEAD is now at bb086a9... Removed installation of dependecies +$ avr-gcc --version +avr-gcc (Fedora 4.9.3-1.fc23) 4.9.3 +Copyright (C) 2015 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +$ which avr-gcc +/usr/lib64/ccache/avr-gcc +$ find /usr/share/cmake/Modules -name "Findavr.cmake" +/usr/share/cmake/Modules/Findavr.cmake +$ mkdir build +$ cd build +$ cmake .. +-- The C compiler identification is GNU 5.3.1 +-- The CXX compiler identification is GNU 5.3.1 +-- Check for working C compiler: /usr/lib64/ccache/cc +-- Check for working C compiler: /usr/lib64/ccache/cc -- works +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Detecting C compile features +-- Detecting C compile features - done +-- Check for working CXX compiler: /usr/lib64/ccache/c++ +-- Check for working CXX compiler: /usr/lib64/ccache/c++ -- works +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Detecting CXX compile features +-- Detecting CXX compile features - done +-- Current uploadtool is: avrdude +-- Current programmer is: usbasp +-- Current upload port is: usb +-- Current uploadtool options are: +-- Current MCU is set to: atmega32 +-- Current H_FUSE is set to: 0xC8 +-- Current L_FUSE is set to: 0x1F +-- Set CMAKE_FIND_ROOT_PATH to /usr/avr +-- Set CMAKE_SYSTEM_INCLUDE_PATH to /usr/avr/include +-- Set CMAKE_SYSTEM_LIBRARY_PATH to /usr/avr/lib +-- Configuring done +-- Generating done +-- Build files have been written to: /home/gitlab-runner/builds/bb8725f4/0/namespace/program/build +$ make +Scanning dependencies of target program.elf +[ 11%] Building CXX object CMakeFiles/program.elf.dir/main.cpp.o +[ 22%] Building CXX object CMakeFiles/program.elf.dir/bootloader.cpp.o +/home/gitlab-runner/builds/bb8725f4/0/namespace/program/bootloader.cpp: In member function 'void bootloader::send_all_programmed_memory_back()': +/home/gitlab-runner/builds/bb8725f4/0/namespace/program/bootloader.cpp:148:59: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] + for (uint16_t address = current_page*SPM_PAGESIZE; address < (current_page+1)*SPM_PAGESIZE; address++) + ^ +[ 33%] Building CXX object CMakeFiles/program.elf.dir/spisimple.cpp.o +[ 44%] Building CXX object CMakeFiles/program.elf.dir/MCP2515.cpp.o +[ 55%] Building CXX object CMakeFiles/program.elf.dir/wait.cpp.o +[ 66%] Building CXX object CMakeFiles/program.elf.dir/cplusplus.cpp.o +[ 77%] Linking CXX executable program.elf +[ 77%] Built target program.elf +Scanning dependencies of target program +[ 88%] Generating program.hex +AVR Memory Usage +---------------- +Device: atmega32 + +Program: 2904 bytes (8.9% Full) +(.text + .data + .bootloader) + +Data: 135 bytes (6.6% Full) +(.data + .bss + .noinit) + + +[100%] Generating program-eeprom.hex +[100%] Built target program +Archiving artifacts... +build/program.hex: found 1 matching files +Creating archive artifacts.zip ... +Done! +Uploading artifacts... +Uploading artifacts to coordinator... ok id=19 token=wYfG9wtk + +Build succeeded. +``` + +Pokud chcete nÄ›kam umĂstit status poslednĂhu buidu, tak ho naleznete na tĂ©to adrese: https://git.ok1kvk.cz/namespace/project/badges/branch/build.svg + +# Zdroje +- https://about.gitlab.com/gitlab-ci/ +- http://doc.gitlab.com/ce/ci/quick_start/ +- https://about.gitlab.com/2015/12/14/getting-started-with-gitlab-and-gitlab-ci/ +- http://doc.gitlab.com/ce/ci/yaml/README.html +- https://gitlab.com/groups/gitlab-examples +- http://doc.gitlab.com/ce/ci/ + +# Dejte nám vÄ›dÄ›t! +Napište nám na naše [fĂłrum](https://ok1kvk.cz/forum).