{"id":79176,"date":"2025-02-10T04:50:01","date_gmt":"2025-02-10T04:50:01","guid":{"rendered":"https:\/\/peraltafinancing.com\/analytics\/continuous-integration-code-deliverables-and-environments\/"},"modified":"2025-02-10T04:50:01","modified_gmt":"2025-02-10T04:50:01","slug":"continuous-integration-code-deliverables-and-environments","status":"publish","type":"post","link":"https:\/\/fivemor.com\/?p=79176","title":{"rendered":"Continuous integration: code, deliverables and environments"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div id=\"wtr-content\" data-bg=\"#0cacf8\" data-fg=\"#0cacf8\" data-width=\"5\" data-mute=\"\" data-fgopacity=\"1.00\" data-mutedopacity=\"1.00\" data-placement=\"top\" data-placement-offset=\"48\" data-content-offset=\"0\" data-placement-touch=\"top\" data-placement-offset-touch=\"0\" data-transparent=\"1\" data-shadow=\"1\" data-touch=\"\" data-non-touch=\"1\" data-comments=\"0\" data-commentsbg=\"#0cacf8\" data-location=\"page\" data-mutedfg=\"#0cacf8\" data-endfg=\"#f44813\" data-rtl=\"\">\n<p style=\"text-align:center\">Today, we<br \/>\nare going to decode a visual. It represents the principle of continuous<br \/>\nintegration at AT Internet:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"475\" src=\"https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Int\u00e9gr-1024x475.jpg\" alt=\"Continuous integration scheme\" class=\"wp-image-15223\" srcset=\"https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Int\u00e9gr-1024x475.jpg 1024w, https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Int\u00e9gr-300x139.jpg 300w, https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Int\u00e9gr-768x356.jpg 768w, https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Int\u00e9gr.jpg 1279w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\"\/><figcaption>\u201cContinuous integration at AT Internet\u201d<\/figcaption><\/figure>\n<h2>The main principles of continuous integration<\/h2>\n<p>It is a set<br \/>\nof practices designed to effectively deliver the software code produced by<br \/>\ndevelopment teams. There are various objectives, including:<\/p>\n<ul>\n<li>Limiting<br \/>\nmanual actions by automating builds, deliveries and other deployment operations.<br \/>\nThis limits the risk of human error and allows experts to focus on their<br \/>\nproduct rather than continually investing time in repetitive operations that a<br \/>\nmachine can do for them.<\/li>\n<\/ul>\n<ul>\n<li>The<br \/>\nrapid availability of feedback offering a good visibility on the potential<br \/>\nimpacts of changes made to the existing code. Each member of the development<br \/>\nteams can then calmly make changes to the existing code base and rely on the<br \/>\nautomation in place to inform them of the proper integration of their code into<br \/>\nthe product.<\/li>\n<\/ul>\n<p>This<br \/>\nconcerns the continuous integration of new code, continuous delivery of<br \/>\ndeliverables and continuous deployment of products \u2013 but how do you link source<br \/>\ncode, deliverables and environments in the overall process? Here are some of<br \/>\nthe FAQs:<\/p>\n<ul>\n<li>When<br \/>\nI practice \u201cpromotion\u201d, is it the promotion of my code? The promotion<br \/>\nof deliverables? The promotion of the environment?<\/li>\n<li>What<br \/>\nis the link between the deployment in production and the master branch of code<br \/>\nrepository?<\/li>\n<li>What<br \/>\nautomation can I implement to ensure consistency between the life of my code<br \/>\nrepository and that of my application, across different environments?<\/li>\n<\/ul>\n<p>These<br \/>\nquestions may be answered differently depending on the technical or project<br \/>\ncontext, the sector of activity or the level of maturity of the processes in<br \/>\nthe company. In this article, I will therefore try to describe the various concepts<br \/>\nand principles, without creating dependency on a particular tool. Even if some<br \/>\ntools can sometimes make life easier, it is more a question of the software<br \/>\ndelivery cycle, regardless of the means chosen for its implementation. <\/p>\n<h2>The \u201cbuild once\u201d concept<\/h2>\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"386\" src=\"https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Build-once-Blog-1024x386.png\" alt=\"Build-once example\" class=\"wp-image-15224\" srcset=\"https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Build-once-Blog-1024x386.png 1024w, https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Build-once-Blog-300x113.png 300w, https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Build-once-Blog-768x290.png 768w, https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Build-once-Blog.png 1028w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\"\/><figcaption>\u201cContinuous integration: the build-once\u201d<\/figcaption><\/figure>\n<p>One of the<br \/>\nkey principles of continuous integration is \u201cbuild once\u201d or in other<br \/>\nwords, only build a new deliverable if the business code has been modified.<br \/>\nThis practice is intended to reduce the risk of building a different<br \/>\ndeliverable when deploying it in a new environment. Indeed, we find re-build<br \/>\npractices all too often when delivering, thinking of obtaining an identical<br \/>\ndeliverable.<\/p>\n<p>But there<br \/>\nare still risks (sometimes significant) during this new build:<\/p>\n<ul>\n<li>Machine problems (full disk,<br \/>\nother\u2026)<\/li>\n<li>Network issues<\/li>\n<li>Problem related to the build tool<br \/>\n(in maintenance, unavailable)<\/li>\n<li>Embed a different version of one of<br \/>\nthe dependencies of our product<\/li>\n<li>Unintentionally rely on a different<br \/>\nversion of the code<\/li>\n<\/ul>\n<p>We can therefore, without realizing it, and<br \/>\ndespite taking precautions, obtain a product different from the one that has<br \/>\nsuccessfully passed the various validation phases of our development cycle. All<br \/>\nthe benefits of the tests and verifications carried out are then lost. <\/p>\n<p>The best way to avoid this risk is to build the<br \/>\ndeliverable only once and then use it as it is, during future deployments, for<br \/>\nthe validation phases and until final production \u2013 this is what is known as \u201cbuild<br \/>\nonce\u201d.<\/p>\n<h2>The promotion of deliverables<\/h2>\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"912\" height=\"131\" src=\"https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Livrables.png\" alt=\"Promotion of deliverables example\" class=\"wp-image-15225\" srcset=\"https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Livrables.png 912w, https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Livrables-300x43.png 300w, https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Livrables-768x110.png 768w\" sizes=\"auto, (max-width: 912px) 100vw, 912px\"\/><figcaption>\u201cContinuous integration: promoting deliverables\u201d<\/figcaption><\/figure>\n<p>Now that we<br \/>\nhave our deliverable, we will want to subject it to a number of tests to be<br \/>\nable to validate its production launch. We therefore need different<br \/>\n\u201cshelves\u201d to store our deliverables in order to easily identify them<br \/>\naccording to their progress in the validation phases. <\/p>\n<p>These<br \/>\n\u201cshelves\u201d can take different forms depending on the technologies<br \/>\n(deliverable managers, delivery folders, archiving of artefacts, storage of<br \/>\ndocker images, etc.) and their number depends on the chosen delivery cycle.<br \/>\nSome companies will need more validation and integration phases than others,<br \/>\nfor reasons of compliance with certain standards, complex integrations etc.<\/p>\n<p>At AT<br \/>\nInternet, we have chosen to have 4 \u201cshelves\u201d to organize our<br \/>\ndeliverables (dev, integ, preprod, prod) and an additional one (staging) to<br \/>\nallow the urgent delivery of bugfixes.<\/p>\n<p>The passage<br \/>\nfrom one deliverable from one shelf to another is conditioned by the proper<br \/>\nconduct of different test and validation phases. If all the conditions are met,<br \/>\nthe deliverable can be moved to the next shelf: this is the promotion. Some<br \/>\nwill simply copy (rather than move); some tools directly expose methods for<br \/>\npromoting the deliverables they host.<\/p>\n<p>We then<br \/>\nhave an overview of the deliverables and their level of validation, simply by<br \/>\nobserving their place in the repository. The presence of a deliverable on one<br \/>\nof the shelves also describes its character as a candidate for a given<br \/>\nenvironment. It is this strong link that sometimes leads to the term<br \/>\n\u201cenvironment promotion\u201d. <\/p>\n<h2>Internal environments<\/h2>\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"876\" height=\"109\" src=\"https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/environnement-dev.png\" alt=\"Internal environnement dev - example\" class=\"wp-image-15226\" srcset=\"https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/environnement-dev.png 876w, https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/environnement-dev-300x37.png 300w, https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/environnement-dev-768x96.png 768w, https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/environnement-dev-870x109.png 870w\" sizes=\"auto, (max-width: 876px) 100vw, 876px\"\/><figcaption>\u201cContinuous integration: environments and their tests\u201d<\/figcaption><\/figure>\n<p>Once these<br \/>\ndeliverables have been obtained and stored somewhere, they must undergo the<br \/>\nvarious testing and validation steps to decide whether or not we can deliver<br \/>\nthem to production. It is then necessary to deploy each deliverable on the<br \/>\nenvironment to which it is a candidate. It is the commissioning of the product,<br \/>\non a given environment, to perform dynamic tests. These tests are called<br \/>\n\u201cblack box\u201d tests, independent of the code or technology used for<br \/>\nimplementation. <\/p>\n<h3> Development: the first phase of deployment <\/h3>\n<p>Each<br \/>\ndeliverable is then deployed on the development environment and subjected to a<br \/>\nfirst phase of testing. The first of these tests consists in validating the<br \/>\ndeployment mechanism. This is the first time we have tried to deploy this<br \/>\ndeliverable somewhere. The successful completion of the deployment is a first<br \/>\nstep to ensure that we are able to deliver the product to production.<\/p>\n<p>We will<br \/>\nthen validate on this environment a number of properties of our system<br \/>\n(functional or non-functional) but also the validity of some configurations of<br \/>\nour deliverable. <\/p>\n<p>If everything is ok, then we can promote the<br \/>\ndeliverable and deploy it to the next environment for the integration phase.<\/p>\n<h3>Integration: validate all scenarios<\/h3>\n<p>In this<br \/>\nphase, the system validated in isolation is brought into contact with the other<br \/>\nsystems of the software solution. It can then be used in the system integration<br \/>\ntesting phase, which aims to carry out business use cases that cross several<br \/>\nsystems in order to validate the correct connection of the various elements of<br \/>\nthe solution.<\/p>\n<p>Each time<br \/>\nthe validation on the development environment is successful, this integration<br \/>\nenvironment can be updated.<\/p>\n<h3>Pre-production: dress rehearsal<\/h3>\n<p>In<br \/>\npre-production, we carry out a final phase of tests before going into<br \/>\nproduction, deploying only those features that we decide to go into production<br \/>\nwith the next release. This decision is not a necessary step and is often<br \/>\nlinked to a marketing or commercial decision. <\/p>\n<p>In this<br \/>\nenvironment, these are often receipt and acceptance operations, which are not<br \/>\nintended to detect bugs in the product. If bugs are found at this stage, it is<br \/>\noften a sign of a lack of testing in one of the previous steps.<\/p>\n<p>If delivery<br \/>\nin production is not linked to customer communication or support constraints,<br \/>\nit is entirely possible to have only one \u201cpre-production\u201d<br \/>\nenvironment, instead of integration and pre-production environments. We then<br \/>\naccept the constraint (or advantage) that all the validated code goes straight<br \/>\ninto production if it successfully passes the following validation steps.<\/p>\n<h3>Staging<\/h3>\n<p>Staging<br \/>\nmakes it possible to validate a correction to be made quickly in production.<br \/>\nThe current production code will be deployed on this environment, with only the<br \/>\ncorrection made as a modification, in order to validate the correct correction<br \/>\nof the problem observed. The absence of side effects (regressions) of this<br \/>\nproduct modification is also checked.<\/p>\n<h3>Production<\/h3>\n<p>Some tests<br \/>\nof a different type can take place in production, often referred to as<br \/>\n\u201cPost-Deployment Tests\u201d. It is rather a question of validating<br \/>\naspects related to the environment, specific configurations, monitoring systems<br \/>\nor what I would call functional experiments (canary testing, A\/B testing,<br \/>\nfeature flipping) etc\u2026. <\/p>\n<p>At this<br \/>\nstage, the objective is not to detect any bugs in one of the systems involved<br \/>\n(even if this can happen!)<\/p>\n<h2> Delivery automation <\/h2>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" loading=\"lazy\" width=\"239\" height=\"90\" src=\"https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Jenkins-optimisation-livraison.png\" alt=\"Jenkins-delivery-automation\" class=\"wp-image-15227\"\/><\/figure>\n<\/div>\n<p>This<br \/>\norchestration of the delivery of a software product is intended to be<br \/>\nsystematic and repetitive. It is therefore normal to think about automating all<br \/>\nthis. Different tools are of course available to set up this orchestration<br \/>\n(Jenkins, Travis CI, GitlabCI etc\u2026) but the principles are independent of the<br \/>\nchoice of this tool. Beyond the essential steps of this automation (shown on<br \/>\nthe right on the image linked to the article), it seems important to me to<br \/>\nhighlight only a few details:<\/p>\n<ul>\n<li>Publication: it is the deposit of<br \/>\nthe deliverable on one of the \u201cshelves\u201d for its future deployment on<br \/>\none of the environments. The shelf chosen depends on the code branch<br \/>\nconsidered. Here are the identified publication paths:<\/p>\n<ul>\n<li>Branch<br \/>\n\u201cdevelop\u201d =&gt; deliverables candidates for the \u201cdevelopment\u201d<br \/>\nenvironment<\/li>\n<\/ul>\n<ul>\n<li>Release\u2019<br \/>\nbranch =&gt; candidate deliverables for the pre-production environment <\/li>\n<\/ul>\n<ul>\n<li>Hotfix\u2019<br \/>\nbranch =&gt; deliverable candidates for the staging environment<\/li>\n<\/ul>\n<ul>\n<li>Any<br \/>\nother branch =&gt; no publication of the deliverable (it can still be retrieved<br \/>\nif desired for testing)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>The promotion step can be used to<br \/>\nautomate various operations. (some will prefer to keep control of these<br \/>\noperations or integrate them into the next step: the deployment phase)<\/p>\n<ul>\n<li>Integration<br \/>\npromotion &gt; pre-production <\/p>\n<ul>\n<li>merge the code from<br \/>\n\u201cdevelop\u201d to \u201crelease\u201d <\/li>\n<\/ul>\n<ul>\n<li>increment the minor version and<br \/>\nreset the patch version to \u20180\u2019 on \u2018develop\u2019.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Pre-production<br \/>\npromotion &gt; production<\/p>\n<ul>\n<li>merge the release code to master <\/li>\n<\/ul>\n<ul>\n<li>apply a tag on \u2018master\u2019.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>Promotion<br \/>\nstaging &gt; production <\/p>\n<ul>\n<li>merge the code from<br \/>\n\u201chotfix\u201d to \u201cmaster\u201d <\/li>\n<\/ul>\n<ul>\n<li>apply a tag on \u2018master\u2019.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li>At AT Internet, we use Jenkins and<br \/>\none question often comes up in the teams: should we orchestrate all this into<br \/>\none big job or into several separate jobs? The answer is somewhere in between<br \/>\nand depends on your progress in implementing the different steps of continuous<br \/>\nintegration. However, some principles are important to consider:<\/p>\n<ul>\n<li>The<br \/>\ndeployment of an existing deliverable must be possible at any time, regardless<br \/>\nof the stages of construction of that deliverable.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>The launch of certain tests on a given<br \/>\nenvironment must be possible at any time, without depending on the stages of<br \/>\nconstruction and promotion of deliverables.<\/p>\n<h2> Dis-continuous integration <\/h2>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Discountinuous-Integration.png\" alt=\"Discontinuous integration example\" class=\"wp-image-15231\" width=\"171\" height=\"417\" srcset=\"https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Discountinuous-Integration.png 240w, https:\/\/blog.atinternet.com\/wp-content\/uploads\/2019\/09\/Discountinuous-Integration-123x300.png 123w\" sizes=\"auto, (max-width: 171px) 100vw, 171px\"\/><figcaption>\u201cDiscontinuous integration: manual actions in the flow\u201d<\/figcaption><\/figure>\n<\/div>\n<p>The ideal<br \/>\nflow that allows continuous delivery in production requires a certain number of<br \/>\nautomatisms and tools that are safety ramparts that allow products to be<br \/>\ngradually validated until they are put into production. Some elements are often<br \/>\nmissing in the chain to give full responsibility to scripts and other test<br \/>\nrobots for the \u201cdecision\u201d to deliver to production. Here is the order<br \/>\nin which these elements are often put in place, in the evolution of R&amp;D:<\/p>\n<ol>\n<li>Construction<br \/>\nof the deliverable (build)<\/li>\n<li>Unit<br \/>\ntests<\/li>\n<li>Deployment<br \/>\nscripts<\/li>\n<li>Code<br \/>\nquality<\/li>\n<li>Triggering<br \/>\nof tests<\/li>\n<li>Promotional<br \/>\nmechanisms<\/li>\n<\/ol>\n<p>When one or<br \/>\nmore of these elements are missing, the operation remains manual. The rest of<br \/>\nthe operations are then also manually triggered, if automatisms are present to<br \/>\ncontinue. We are then in a situation that I would describe as dis-continuous<br \/>\nintegration.<\/p>\n<p>At a higher<br \/>\nlevel of maturity, all operations are automated, but we are not yet ready to do<br \/>\nwithout manual actions to trigger production releases. This is often the case<br \/>\nif all the mechanics are available but the tests on the different environments<br \/>\nare too limited. We still need to reassure ourselves with a few manual actions<br \/>\nto \u201creceive\u201d and increase our level of confidence.<\/p>\n<p>Until the day when we can gladly realize that we<br \/>\nare only intervening to trigger further operations, simply based on the status<br \/>\ndisplayed by some systems. We can then link this operation to the rest of the<br \/>\nchain because our action no longer brings any added value. Moving to this stage<br \/>\nof continuous delivery also requires good production monitoring systems to be<br \/>\nconfident that the system will be resilient to a failure that has gone through<br \/>\nthe various validation steps without being detected. This may be the subject of<br \/>\na future article!<\/p>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Today, we are going to decode a visual. It represents the principle of continuous integration at AT Internet: \u201cContinuous integration at AT Internet\u201d The main principles of continuous integration It is a set of practices designed to effectively deliver the software code produced by development teams. There are various objectives, including: Limiting manual actions by [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":79177,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12033],"tags":[11230,28699,39991,19852,14481],"dealstore":[],"offerexpiration":[],"class_list":["post-79176","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","tag-code","tag-continuous","tag-deliverables","tag-environments","tag-integration"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Continuous integration: code, deliverables and environments - Som2ny Network<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fivemor.com\/?p=79176\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Continuous integration: code, deliverables and environments - Som2ny Network\" \/>\n<meta property=\"og:description\" content=\"Today, we are going to decode a visual. It represents the principle of continuous integration at AT Internet: \u201cContinuous integration at AT Internet\u201d The main principles of continuous integration It is a set of practices designed to effectively deliver the software code produced by development teams. There are various objectives, including: Limiting manual actions by [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fivemor.com\/?p=79176\" \/>\n<meta property=\"og:site_name\" content=\"Som2ny Network\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-10T04:50:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Integr-3.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"915\" \/>\n\t<meta property=\"og:image:height\" content=\"587\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fivemor.com\/?p=79176#article\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/?p=79176\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\"},\"headline\":\"Continuous integration: code, deliverables and environments\",\"datePublished\":\"2025-02-10T04:50:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=79176\"},\"wordCount\":1986,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=79176#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Integr-3.jpg\",\"keywords\":[\"Code\",\"Continuous\",\"deliverables\",\"environments\",\"Integration\"],\"articleSection\":[\"Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fivemor.com\/?p=79176#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fivemor.com\/?p=79176\",\"url\":\"https:\/\/fivemor.com\/?p=79176\",\"name\":\"Continuous integration: code, deliverables and environments - Som2ny Network\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=79176#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=79176#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Integr-3.jpg\",\"datePublished\":\"2025-02-10T04:50:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fivemor.com\/?p=79176#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fivemor.com\/?p=79176\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/?p=79176#primaryimage\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Integr-3.jpg\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Integr-3.jpg\",\"width\":915,\"height\":587},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fivemor.com\/?p=79176#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fivemor.com\/?bp_activities=1\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Continuous integration: code, deliverables and environments\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fivemor.com\/#website\",\"url\":\"https:\/\/fivemor.com\/\",\"name\":\"Som2ny Network\",\"description\":\"Daily Deals\",\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fivemor.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/fivemor.com\/#organization\",\"name\":\"Som2ny Network\",\"url\":\"https:\/\/fivemor.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"width\":300,\"height\":86,\"caption\":\"Som2ny Network\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/fivemor.com\"],\"url\":\"https:\/\/fivemor.com\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Continuous integration: code, deliverables and environments - Som2ny Network","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:\/\/fivemor.com\/?p=79176","og_locale":"en_US","og_type":"article","og_title":"Continuous integration: code, deliverables and environments - Som2ny Network","og_description":"Today, we are going to decode a visual. It represents the principle of continuous integration at AT Internet: \u201cContinuous integration at AT Internet\u201d The main principles of continuous integration It is a set of practices designed to effectively deliver the software code produced by development teams. There are various objectives, including: Limiting manual actions by [&hellip;]","og_url":"https:\/\/fivemor.com\/?p=79176","og_site_name":"Som2ny Network","article_published_time":"2025-02-10T04:50:01+00:00","og_image":[{"width":915,"height":587,"url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Integr-3.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fivemor.com\/?p=79176#article","isPartOf":{"@id":"https:\/\/fivemor.com\/?p=79176"},"author":{"name":"admin","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371"},"headline":"Continuous integration: code, deliverables and environments","datePublished":"2025-02-10T04:50:01+00:00","mainEntityOfPage":{"@id":"https:\/\/fivemor.com\/?p=79176"},"wordCount":1986,"commentCount":0,"publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"image":{"@id":"https:\/\/fivemor.com\/?p=79176#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Integr-3.jpg","keywords":["Code","Continuous","deliverables","environments","Integration"],"articleSection":["Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fivemor.com\/?p=79176#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fivemor.com\/?p=79176","url":"https:\/\/fivemor.com\/?p=79176","name":"Continuous integration: code, deliverables and environments - Som2ny Network","isPartOf":{"@id":"https:\/\/fivemor.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fivemor.com\/?p=79176#primaryimage"},"image":{"@id":"https:\/\/fivemor.com\/?p=79176#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Integr-3.jpg","datePublished":"2025-02-10T04:50:01+00:00","breadcrumb":{"@id":"https:\/\/fivemor.com\/?p=79176#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fivemor.com\/?p=79176"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/?p=79176#primaryimage","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Integr-3.jpg","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/Integr-3.jpg","width":915,"height":587},{"@type":"BreadcrumbList","@id":"https:\/\/fivemor.com\/?p=79176#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fivemor.com\/?bp_activities=1"},{"@type":"ListItem","position":2,"name":"Continuous integration: code, deliverables and environments"}]},{"@type":"WebSite","@id":"https:\/\/fivemor.com\/#website","url":"https:\/\/fivemor.com\/","name":"Som2ny Network","description":"Daily Deals","publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fivemor.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/fivemor.com\/#organization","name":"Som2ny Network","url":"https:\/\/fivemor.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","width":300,"height":86,"caption":"Som2ny Network"},"image":{"@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","caption":"admin"},"sameAs":["https:\/\/fivemor.com"],"url":"https:\/\/fivemor.com\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/79176","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=79176"}],"version-history":[{"count":0,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/79176\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/media\/79177"}],"wp:attachment":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=79176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=79176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=79176"},{"taxonomy":"dealstore","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fdealstore&post=79176"},{"taxonomy":"offerexpiration","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fofferexpiration&post=79176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}