{"id":6671,"date":"2019-01-16T12:10:21","date_gmt":"2019-01-16T11:10:21","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=6671"},"modified":"2025-05-07T12:19:10","modified_gmt":"2025-05-07T10:19:10","slug":"sap-fiori-i-continuous-integration","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/sap-fiori-i-continuous-integration\/","title":{"rendered":"SAP Fiori i Continuous Integration"},"content":{"rendered":"\n<p><span style=\"font-weight: 400;\">Continuous Integration (CI) jest praktyk\u0105 cz\u0119stej publikacji nowego kodu do g\u0142\u00f3wnego repozytorium (nawet kilka razy dziennie przez ka\u017cdego programist\u0119). Ka\u017cdorazowo, gdy pojawia si\u0119 nowy kod w repozytorium, nast\u0119puje automatyczne zbudowanie oraz wdro\u017cenie aplikacji i uruchomienie test\u00f3w. Zalet\u0105 takiego podej\u015bcia jest wykrywanie problem\u00f3w we wczesnej fazie rozwoju.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Dodatkowo umo\u017cliwia to podgl\u0105d funkcjonalno\u015bci rozwijanych w projekcie podczas prac programistycznych. Cz\u0119ste wysy\u0142anie kodu zwi\u0119ksza jego modularno\u015b\u0107 (mniejszy poziom skomplikowania), a tak\u017ce polepsza og\u00f3ln\u0105 jako\u015b\u0107. Przek\u0142ada si\u0119 to na mniej czasu sp\u0119dzonego przy analizie problem\u00f3w, zatem zyskujemy wi\u0119cej czasu na dodawanie nowych funkcjonalno\u015bci.\u00a0<\/span>Zastosowanie tego podej\u015bcia pozwala unikn\u0105\u0107 problem\u00f3w z integracj\u0105 i chaosu podczas wyda\u0144 aplikacji. Zwi\u0119kszenie przejrzysto\u015bci rozwoju aplikacji zmniejsza ilo\u015b\u0107 potrzebnej komunikacji\u00a0w zespole.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/01\/schemat4.png\"><img decoding=\"async\" width=\"1140\" height=\"933\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/01\/schemat4.png\" alt=\"\" class=\"wp-image-6672\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/01\/schemat4.png 1140w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/01\/schemat4-300x246.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/01\/schemat4-1024x838.png 1024w\" sizes=\"(max-width: 1140px) 100vw, 1140px\" \/><\/a><\/figure>\n\n\n\n<p><span style=\"font-weight: 400;\">Na pocz\u0105tku procesu rozwoju aplikacji ka\u017cdy w zespole musi przygotowa\u0107 dla siebie \u015brodowisko programistyczne, w kt\u00f3rym b\u0119dzie m\u00f3g\u0142 wykonywa\u0107 potrzebne zmiany.&nbsp;<\/span>Obecnie mo\u017cemy skorzysta\u0107 z nowoczesnego \u015brodowiska jakim jest SAP Web IDE. Pomimo tego, \u017ce mo\u017cemy wykona\u0107 wi\u0119kszo\u015b\u0107 prac tylko przy u\u017cyciu lokalnego \u015brodowiska programistycznego, komfortowym i rekomendowanym przez SAP rozwi\u0105zaniem jest skorzystanie z Web IDE jako pierwszego \u015brodowiska programistycznego. W razie potrzeby stworzenia nowej aplikacji, najwygodniej b\u0119dzie u\u017cy\u0107 predefiniowanych szablon\u00f3w dost\u0119pnych w Web IDE.<\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Do pobierania i wysy\u0142ania (<em>Pull, Commit, Push)<\/em>&nbsp;zmian z centralnego repozytorium GIT jest potrzebna konfiguracja Gerrita. Ka\u017cdy programista w zale\u017cno\u015bci od grupy, do kt\u00f3rej przynale\u017cy w projekcie mo\u017ce korzysta\u0107 z repozytorium GIT oraz sprawdza\u0107 kod zmian innych cz\u0142onk\u00f3w zespo\u0142u poprzez narz\u0119dzie Gerrit. Tylko sprawdzony i zatwierdzony kod zmian zostanie domergowany w repozytorium GIT. Dodatkowo Gerrit Voter Job dzia\u0142aj\u0105cy na serwerze, kt\u00f3ry buduje aplikacj\u0119 (Jenkins) uruchamia automatycznie proces budowania technicznej wersji testowej zawieraj\u0105cej najnowsze przes\u0142ane zmiany. <\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Kolejnym przyk\u0142adem zautomatyzowanego zdarzenia w przedstawionej infrastrukturze jest wysy\u0142anie fragment\u00f3w zasob\u00f3w, kt\u00f3re zostaj\u0105 docelowo przet\u0142umaczone na wiele j\u0119zyk\u00f3w. Zlokalizowane zasoby b\u0119d\u0105 pobrane do \u015brodowiska rozwojowego i testowego. Zarz\u0105dzanie repozytorium zbudowanych aplikacji jest mo\u017cliwe dzi\u0119ki Nexusowi. Repozytorium to odpowiada r\u00f3wnie\u017c za dystrybucj\u0119 stworzonych \u201cpaczek\u201d do &nbsp;samodzielnego systemu ABAP UI DEV.<\/span><\/p>\n\n\n\n<p><span style=\"font-weight: 400;\">Testy nowych zmian, mog\u0105 by\u0107 przeprowadzane w oparciu o lokalny serwer TomCat z zestawem danych testowych, a tak\u017ce w oparciu o wyeksponowane serwisy oData. Zatem ka\u017cdy cz\u0142onek zespo\u0142u, jest w stanie testowa\u0107 aplikacj\u0119 bez potrzeby po\u0142\u0105czenia do backendu. Wartym rozwa\u017cenia pomys\u0142em, jest wykorzystanie centralnego serwera TomCat, z kt\u00f3rego ka\u017cdy deweloper z zespo\u0142u m\u00f3g\u0142by korzysta\u0107 bez konieczno\u015bci utrzymania oddzielnej instancji na lokalnym komputerze. Centralny serwer mo\u017ce r\u00f3wnie\u017c pos\u0142u\u017cy\u0107 jako&nbsp;<\/span>ostatnie miejsce przed wysy\u0142k\u0105 zbudowanej aplikacji do ABAP UI DEV.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"font-weight: 400;\">Git<\/span><\/h2>\n\n\n\n<p><span style=\"font-weight: 400;\">Git to system kontroli wersji s\u0142u\u017c\u0105cy do \u015bledzenia zmian w plikach komputerowych i koordynowania prac nad tymi plikami w\u015br\u00f3d wielu os\u00f3b.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"font-weight: 400;\">Jenkins<\/span><\/h2>\n\n\n\n<p><span style=\"font-weight: 400;\">Jenkins jest serwerem automatyzuj\u0105cym proces budowania aplikacji. Docelowo s\u0142u\u017cy on do przyspieszenia procesu dostarczania oprogramowania. <\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"font-weight: 400;\">Nexus<\/span><\/h2>\n\n\n\n<p><span style=\"font-weight: 400;\">Nexus to mened\u017cer repozytorium &#8211; mo\u017ce on obs\u0142ugiwa\u0107 wiele repozytori\u00f3w r\u00f3wnocze\u015bnie. Mog\u0105 one odgrywa\u0107 r\u00f3\u017cne role w procesie wypuszczania oprogramowania (repozytoria migawek i wydania). Co wi\u0119cej, mo\u017cliwe jest posiadanie repozytori\u00f3w obs\u0142uguj\u0105cych r\u00f3\u017cne formaty techniczne.<\/span><\/p>\n\n\n\n<p><a href=\"https:\/\/sii.pl\/oferta\/oprogramowanie-dla-biznesu\/sap\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">Dowiedz si\u0119 wi\u0119cej.<\/span><\/a><\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;6671&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;5&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;4.4&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;2&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;4.4\\\/5&quot;,&quot;size&quot;:&quot;30&quot;,&quot;title&quot;:&quot;SAP Fiori i Continuous Integration&quot;,&quot;width&quot;:&quot;139.8&quot;,&quot;_legend&quot;:&quot;{score}\\\/5&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.8px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 24px;\">\n            4.4\/5    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Continuous Integration (CI) jest praktyk\u0105 cz\u0119stej publikacji nowego kodu do g\u0142\u00f3wnego repozytorium (nawet kilka razy dziennie przez ka\u017cdego programist\u0119). Ka\u017cdorazowo, &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/sap-fiori-i-continuous-integration\/\">Continued<\/a><\/p>\n","protected":false},"author":180,"featured_media":15253,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":2,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1316],"tags":[548,706,698,452,704,705,702,701],"class_list":["post-6671","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-miekko","tag-sap","tag-abap","tag-continuous-integration","tag-git","tag-jenkins","tag-nexsus","tag-sap-fiori","tag-sapui5"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2018\/04\/unnamed-file.jpg","category_names":["Development na mi\u0119kko"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/6671"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/180"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=6671"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/6671\/revisions"}],"predecessor-version":[{"id":24313,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/6671\/revisions\/24313"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/15253"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=6671"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=6671"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=6671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}