{"id":27798,"date":"2024-05-27T14:21:59","date_gmt":"2024-05-27T12:21:59","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=27798"},"modified":"2024-05-27T14:22:00","modified_gmt":"2024-05-27T12:22:00","slug":"continuous-integration-allora-ti-serve-il-trunk-based-development","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/","title":{"rendered":"Vuoi fare Continuous Integration? Allora ti serve il Trunk-Based Development"},"content":{"rendered":"\n<p>Ormai nella quasi totalit\u00e0 degli annunci di lavoro, le aziende dichiarano di fare <strong>Continuous Integration (CI) &#8211;<\/strong> poi per\u00f2 entri in azienda e scopri che usano GitFlow, i Feature Branches o qualunque altro tipo di approccio che prevede branch isolati che durano giorni\/settimane.<\/p>\n\n\n\n<p>Cosa centra, direte voi? Centra molto, perch\u00e8 CI sembra essere diventato sinonimo di &#8220;avere una pipeline&#8221;, ma non \u00e8 questo il suo significato.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cosa-significa-continuous-integration\">Cosa significa Continuous Integration?<\/h2>\n\n\n\n<p><a href=\"https:\/\/minimumcd.org\/minimumcd\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">Continuous Integration<\/a> significa mandare <strong>molto di frequente<\/strong> il lavoro sul branch principale (trunk\/master) per verificare, al meglio delle nostre conoscenze, che il lavoro sia <strong>rilasciabile<\/strong>.<\/p>\n\n\n\n<p>Voglio sottolineare sopratutto due aspetti:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>molto di frequente: il nostro codice deve andare spesso su master, e anche se ancora non abbiamo un indicazione numerica, \u00e8 facile intuire che un branch che dura giorni\/settimane non rispetti questa caratteristica<\/li>\n\n\n\n<li>rilasciabile: quando mergiamo il nostro codice, non lo stiamo &#8220;semplicemente&#8221; integrando col resto; vogliamo farlo per verificare che le nostre modifiche non abbiano causato problemi, e che quindi il branch principale rimanga in uno stato che consideriamo &#8220;rilasciabile&#8221;<\/li>\n<\/ol>\n\n\n\n<p>Ci sono vari motivi per cui implementare la CI \u00e8 fondamentale:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.pendo.io\/resources\/the-2019-feature-adoption-report\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">Solo il 20% delle features \u00e8 usato spesso<\/a>: nel restante 80%, il 56% sono usate raramente, e il 24% mai usate; nonostante sia difficile ammetterlo, le feature sono una fonte di spreco e dovremmo limitarle il pi\u00f9 possibile a quelle davvero necessarie.<\/li>\n\n\n\n<li><a href=\"https:\/\/www.celerity.com\/insights\/the-true-cost-of-a-software-bug\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">Prima scopriamo un bug, meno ci costa<\/a>: il costo di un bug cresce in modo esponenziale; rispetto allo sviluppo, un bug emerso in QA costa 5 volte tanto, che diventa 100 volte tanto in produzione. Anticipare la scoperta dei bug riduce i nostri costi di sviluppo drasticamente.<\/li>\n\n\n\n<li>Riduciamo l&#8217;impatto dell&#8217;unplanned work: c&#8217;e una parte di lavoro che non possiamo prevedere (bug, reword, incidents, etc) ma possiamo prevenire; il libro <a href=\"https:\/\/amzn.to\/3yAgdGk\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">Accelerate<\/a> ci ha insegnato come i team performanti riescano a ridurre il tempo investito in unplanned work dal 27 al 20%.<\/li>\n\n\n\n<li><a href=\"https:\/\/javi-kata.medium.com\/ci-cd-in-numbers-9647a5da296\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">Andare over-budget \u00e8 meglio che essere in ritardo<\/a>: un progetto in ritardo ma in budget perde il 30% in pi\u00f9 di ricavi nei 5 anni successivi rispetto ad uno in over-budget ma lanciato in tempo.<\/li>\n<\/ul>\n\n\n\n<p>Tutti questi punti ci devono far capire che il nostro obiettivo deve essere prioritizzare il lead time, non la creazione di nuove feature. Il lead time \u00e8 il tempo che passa dalla nascita dell&#8217;idea fino al rilascio in produzione.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-fai-commit-su-master\">Fai commit su master!<\/h2>\n\n\n\n<p>Ma allora, cosa significa nel pratico fare Continuous Integration? Le attivit\u00e0 minime che un team deve mettere in pratica per poter dire di fare CI sono:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Codice integrato sul branch principale almeno una volta al giorno<\/li>\n\n\n\n<li>Test suite eseguita con successo prima di integrare le nostre modifiche sul branch principale, per assicurare che le nuove modifiche siano funzionanti<\/li>\n\n\n\n<li>Test suite eseguita con successo dopo aver integrato le nostre modifiche sul branch principale, per assicurare che l&#8217;integrazione sia andata a buon fine<\/li>\n\n\n\n<li>Tutto il lavoro sulle features si ferma se la build del branch principale si rompe<\/li>\n\n\n\n<li>Le modifiche\/aggiunte al codice non devono rompere il codice esistente<\/li>\n<\/ul>\n\n\n\n<p>Ricordate il &#8220;molto di frequente&#8221; di inizio articolo? Ora abbiamo un riferimento preciso: almeno una volta al giorno. Questo significa che abbiamo solo due modi per rispettare questa richiesta:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Fare commit direttamente su master<\/li>\n\n\n\n<li>Creare branch che durano al massimo 24 ore<\/li>\n<\/ol>\n\n\n\n<p>Questa pratica prende il nome di <a href=\"https:\/\/trunkbaseddevelopment.com\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">Trunk-Based Development<\/a>, che possiamo definire come una pratica nella quale le modifiche al codice vengono integrate direttamente sul branch principale, senza nessun branch di lavoro nel mezzo (Feature Branches, Develop\/Test, ecc.).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-lasciamo-le-pr-asincrone-per-l-open-source\">Lasciamo le PR asincrone per l&#8217;Open Source<\/h2>\n\n\n\n<p>Come per tante pratiche Agili, per fare Trunk-Based dobbiamo abbracciare il cambiamento (&#8220;embrace change&#8221;) accettando che potrebbe esistere un modo pi\u00f9 efficace di fare le cose rispetto a quello a cui siamo abituati.<\/p>\n\n\n\n<p>Il cambiamento che fa soffrire di pi\u00f9 i dev che faticano a pensare al TBD come pratica utile \u00e8 quello di committare su master, o quantomeno avere un approccio pi\u00f9 snello alle Pull Requests se manteniamo i branch: se vogliamo integrare il codice almeno una volta al giorno, se non pi\u00f9 volte al giorno, non possiamo pensare di lavorare con le PR asincrone per cui a volte attendiamo ore\/giorni per riuscire a superare la review.<\/p>\n\n\n\n<p>Ma \u00e8 davvero un problema?<\/p>\n\n\n\n<p>Le PR asincrone sono quasi uno standard de facto nel mondo software odierno, che \u00e8 stato mutuato dal mondo Open Source &#8211; ma il contesto OSS rispetto a quello di un team in un azienda \u00e8 molto, molto diverso! <\/p>\n\n\n\n<p>Senza dilungarmi troppo, lo schema seguente evidenzia queste differenze:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"535\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/Screenshot-2024-05-23-at-15.00.08-1024x535.png\" alt=\"\" class=\"wp-image-27845\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/Screenshot-2024-05-23-at-15.00.08-1024x535.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/Screenshot-2024-05-23-at-15.00.08-300x157.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/Screenshot-2024-05-23-at-15.00.08-768x402.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/Screenshot-2024-05-23-at-15.00.08.png 1530w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>In generale, siamo troppo abituati a pensare ad ognuno di noi come &#8220;individual contributor&#8221;, un termine che non mi piace per niente, e troppo poco a pensarci invece &#8220;membri di un team&#8221; che quindi dovrebbero collaborare in modo molto pi\u00f9 stretto e frequente per ottenere un risultato migliore che solo un collettivo pu\u00f2 ottenere.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-come-rilasciamo-un-lavoro-incompleto\">Come rilasciamo un lavoro incompleto?<\/h2>\n\n\n\n<p>Il secondo enorme dilemma che i programmatori hanno pensando al Trunk-Based \u00e8 legato alla domanda: &#8220;come facciamo a rilasciare un lavoro incompleto?&#8221;. <\/p>\n\n\n\n<p>Dico rilasciare perch\u00e8 abbiamo visto che l&#8217;obiettivo di integrare su master \u00e8 verificare che tutto sia rilasciabile, quindi anche se fare CI non implica strettamente fare Continuous Delivery\/Deployment, dobbiamo comunque assicurarci che sia pronto al rilascio.<\/p>\n\n\n\n<p>Le feature che sviluppiamo per\u00f2 sono complicate, durano settimane proprio per questo, quindi come si fa a mandare su master codice rilasciabile ogni giorno?<\/p>\n\n\n\n<p>In primis, vi invito a riflettere ed essere molto pi\u00f9 critici su questo tema: forse le feature sono troppo grandi? Ricordate che le feature sono uno spreco, meglio ragionare in termini di MVP: rilasciare la versione pi\u00f9 semplice possibile per verificare che la feature venga usata, e poi nel caso investirci altro tempo. Ma questo \u00e8 argomento che meriterebbe un articolo tutto per se!<\/p>\n\n\n\n<p>Riguardo al rilasciare lavoro incompleto, invece, vi stupir\u00e0 forse, ma \u00e8 un problema ampiamente risolto: semplicemente, dobbiamo per l&#8217;ennesima volta abbracciare un modo differente di pensare. Purtroppo, tutti i dev impararano a rilasciare feature complete, pensando che sia l&#8217;unico modo possibile di lavorare &#8211; ed \u00e8 una delle abitudini pi\u00f9 difficili da lasciarsi alle spalle, ma \u00e8 possibile! <\/p>\n\n\n\n<p>Come dicevo, \u00e8 un problema risolto ed esistono vari Design Pattern implementativi che si possono usare per rilasciare un codice incompleto che non sia visibile per l&#8217;utente finale, come ad esempio i Feature Flags, oppure semplicemente fare in modo che l&#8217;interfaccia che l&#8217;utente vede sia l&#8217;ultimo elemento rilasciato. Vi lascio un link all&#8217;articolo di Martin Fowler in merito, che spiega il tema molto meglio di quanto potrei mai fare io: lo trovate <a href=\"https:\/\/martinfowler.com\/articles\/continuousIntegration.html#HideWork-in-progress\" class=\"ek-link\">qui<\/a>.<\/p>\n\n\n\n<p>Vi invito, per concludere, a riflettere sui benefici di questa pratica: grazie all&#8217;abilit\u00e0 di rilasciare continuamente lavoro non completo, siamo ora in grado di separare il rilascio del software dal lancio della feature a livello marketing, togliendo la necessit\u00e0 di sincronizzazione diretta con il team marketing stesso, o con gli operativi che dovranno magari dare supporto. Ci permette anche di gestire molto pi\u00f9 facilmente un rilascio iterativo ed incrementale, con cui magari rendere visibile il codice solo ad alcuni utenti per verificarne gli impatti in modo controllato.<\/p>\n\n\n\n<p>Insomma, la pratica del Trunk-Based Development ci spaventa perch\u00e8 ci richiede di lasciarci molte abitudini alle spalle e la resistenza al cmabiamento fa parte della natura umana &#8211; ma la potenza della pratica ripaga lo sforzo: dategli una chance! <\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Se questo articolo ti \u00e8 piaciuto, sappi che \u00e8 parte di una serie mensile a tema Agile, il che significa che puoi\u00a0<a href=\"https:\/\/www.codemotion.com\/magazine\/it\/\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\">recuperare i precedenti<\/a>\u00a0e che ne arriveranno altri nei prossimi mesi! In pi\u00f9, se ti piace il mio stile, dai un occhiata a Learn Agile Practices, il mio ecosistema di contenuti online nei quali parlo di pratiche e metodologie Agile come TDD, CI, CD e molto altro a tema programmazione.<\/p>\n\n\n\n<p>Scopri tutto su\u00a0<a href=\"https:\/\/www.learnagilepractices.com\/\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\">learnagilepractices.com<\/a>\u00a0e seguimi su\u00a0<a href=\"https:\/\/www.linkedin.com\/in\/daniele-scillia\/\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\">LinkedIn<\/a>!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ormai nella quasi totalit\u00e0 degli annunci di lavoro, le aziende dichiarano di fare Continuous Integration (CI) &#8211; poi per\u00f2 entri in azienda e scopri che usano GitFlow, i Feature Branches o qualunque altro tipo di approccio che prevede branch isolati che durano giorni\/settimane. Cosa centra, direte voi? Centra molto, perch\u00e8 CI sembra essere diventato sinonimo&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/\">Read more<\/a><\/p>\n","protected":false},"author":194,"featured_media":27850,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10287],"tags":[12164],"collections":[11708],"class_list":{"0":"post-27798","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-devops-it","8":"tag-continuous-integration","9":"collections-dalla-community","10":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Continuous Integration e Trunk-Based Development - Codemotion<\/title>\n<meta name=\"description\" content=\"Non perderti questa guida per scoprire di pi\u00f9 sull&#039;importanza del trunk-based development per la continuous integration.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vuoi fare Continuous Integration? Allora ti serve il Trunk-Based Development\" \/>\n<meta property=\"og:description\" content=\"Non perderti questa guida per scoprire di pi\u00f9 sull&#039;importanza del trunk-based development per la continuous integration.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-27T12:21:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-27T12:22:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1792\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"danthedev\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@danielescillia\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"danthedev\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/\"},\"author\":{\"name\":\"danthedev\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/ad992babe79ce1c495801784b71eedda\"},\"headline\":\"Vuoi fare Continuous Integration? Allora ti serve il Trunk-Based Development\",\"datePublished\":\"2024-05-27T12:21:59+00:00\",\"dateModified\":\"2024-05-27T12:22:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/\"},\"wordCount\":1275,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor.webp\",\"keywords\":[\"continuous integration\"],\"articleSection\":[\"DevOps\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/\",\"name\":\"Continuous Integration e Trunk-Based Development - Codemotion\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor.webp\",\"datePublished\":\"2024-05-27T12:21:59+00:00\",\"dateModified\":\"2024-05-27T12:22:00+00:00\",\"description\":\"Non perderti questa guida per scoprire di pi\u00f9 sull'importanza del trunk-based development per la continuous integration.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor.webp\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor.webp\",\"width\":1792,\"height\":1024,\"caption\":\"continuous integration\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DevOps\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Vuoi fare Continuous Integration? Allora ti serve il Trunk-Based Development\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/ad992babe79ce1c495801784b71eedda\",\"name\":\"danthedev\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/10\/profile-pic-150x150.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/10\/profile-pic-150x150.png\",\"caption\":\"danthedev\"},\"description\":\"XP Advocate, Agile practices and methodologies enthusiast, driven from his passion for Software Development. I am deeply passionate about Extreme Programming and Agile methodologies and practices, believing that they allow software development teams to be more effective and aim for technical excellence. I enjoy investing time to stay updated on new technologies and methodologies and improve my skills: I consider continuous improvement extremely important and I approach it through books, courses, conferences, meetups, and continuous training; my ideal company promotes and encourages this approach.\",\"sameAs\":[\"https:\/\/danthedev.carrd.co\/\",\"https:\/\/www.linkedin.com\/in\/daniele-scillia\/\",\"https:\/\/x.com\/danielescillia\",\"https:\/\/www.youtube.com\/channel\/UCow5aybmZhzR7HbPf8JmcmA\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/danthedev\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Continuous Integration e Trunk-Based Development - Codemotion","description":"Non perderti questa guida per scoprire di pi\u00f9 sull'importanza del trunk-based development per la continuous integration.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/","og_locale":"en_US","og_type":"article","og_title":"Vuoi fare Continuous Integration? Allora ti serve il Trunk-Based Development","og_description":"Non perderti questa guida per scoprire di pi\u00f9 sull'importanza del trunk-based development per la continuous integration.","og_url":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2024-05-27T12:21:59+00:00","article_modified_time":"2024-05-27T12:22:00+00:00","og_image":[{"width":1792,"height":1024,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor.webp","type":"image\/webp"}],"author":"danthedev","twitter_card":"summary_large_image","twitter_creator":"@danielescillia","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"danthedev","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/"},"author":{"name":"danthedev","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/ad992babe79ce1c495801784b71eedda"},"headline":"Vuoi fare Continuous Integration? Allora ti serve il Trunk-Based Development","datePublished":"2024-05-27T12:21:59+00:00","dateModified":"2024-05-27T12:22:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/"},"wordCount":1275,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor.webp","keywords":["continuous integration"],"articleSection":["DevOps"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/","url":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/","name":"Continuous Integration e Trunk-Based Development - Codemotion","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor.webp","datePublished":"2024-05-27T12:21:59+00:00","dateModified":"2024-05-27T12:22:00+00:00","description":"Non perderti questa guida per scoprire di pi\u00f9 sull'importanza del trunk-based development per la continuous integration.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor.webp","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor.webp","width":1792,"height":1024,"caption":"continuous integration"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/continuous-integration-allora-ti-serve-il-trunk-based-development\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"DevOps","item":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/"},{"@type":"ListItem","position":3,"name":"Vuoi fare Continuous Integration? Allora ti serve il Trunk-Based Development"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/ad992babe79ce1c495801784b71eedda","name":"danthedev","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/10\/profile-pic-150x150.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/10\/profile-pic-150x150.png","caption":"danthedev"},"description":"XP Advocate, Agile practices and methodologies enthusiast, driven from his passion for Software Development. I am deeply passionate about Extreme Programming and Agile methodologies and practices, believing that they allow software development teams to be more effective and aim for technical excellence. I enjoy investing time to stay updated on new technologies and methodologies and improve my skills: I consider continuous improvement extremely important and I approach it through books, courses, conferences, meetups, and continuous training; my ideal company promotes and encourages this approach.","sameAs":["https:\/\/danthedev.carrd.co\/","https:\/\/www.linkedin.com\/in\/daniele-scillia\/","https:\/\/x.com\/danielescillia","https:\/\/www.youtube.com\/channel\/UCow5aybmZhzR7HbPf8JmcmA"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/danthedev\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor-600x400.webp","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor-600x600.webp","author_info":{"display_name":"danthedev","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/danthedev\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor.webp",1792,1024,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor-150x150.webp",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor-300x171.webp",300,171,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor-768x439.webp",768,439,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor-1024x585.webp",1024,585,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor-1536x878.webp",1536,878,true],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor.webp",1792,1024,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor-100x100.webp",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor-180x128.webp",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor-896x504.webp",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor-400x225.webp",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor-600x400.webp",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/DALL\u00b7E-2024-05-27-14.17.51-A-minimalistic-and-simple-illustration-of-continuous-integration-in-a-landscape-format.-The-image-features-a-clean-white-background-with-a-central-wor-600x600.webp",600,600,true]},"uagb_author_info":{"display_name":"danthedev","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/danthedev\/"},"uagb_comment_info":0,"uagb_excerpt":"Ormai nella quasi totalit\u00e0 degli annunci di lavoro, le aziende dichiarano di fare Continuous Integration (CI) &#8211; poi per\u00f2 entri in azienda e scopri che usano GitFlow, i Feature Branches o qualunque altro tipo di approccio che prevede branch isolati che durano giorni\/settimane. Cosa centra, direte voi? Centra molto, perch\u00e8 CI sembra essere diventato sinonimo&#8230;&hellip;","lang":"it","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/27798","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/194"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=27798"}],"version-history":[{"count":3,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/27798\/revisions"}],"predecessor-version":[{"id":27851,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/27798\/revisions\/27851"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/27850"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=27798"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=27798"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=27798"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=27798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}