{"id":9872,"date":"2020-09-24T09:27:49","date_gmt":"2020-09-24T07:27:49","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=9872"},"modified":"2022-01-05T20:06:19","modified_gmt":"2022-01-05T19:06:19","slug":"devops-best-practices","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/","title":{"rendered":"DevOps Best Practices: How to Take Your Pipeline to the Next Level"},"content":{"rendered":"\n<p class=\"eplus-QDMVtG\"><a href=\"https:\/\/stackpulse.com\/blog\/devops-methodology\/the-devops-methodology-principles-for-successful-implementations\/\" target=\"_blank\" aria-label=\"undefined (opens in a new tab)\" rel=\"noreferrer noopener\">DevOps<\/a> is a software development methodology that prioritizes a fast-paced <span id=\"urn:enhancement-895689b2\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_release_life_cycle\">release cycle<\/span>. <span id=\"urn:enhancement-8d57dc0a\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/devops\">DevOps<\/span> pipelines are built to foster better <span id=\"urn:enhancement-854213b0\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/collaboration\">collaboration<\/span> between development teams and <span id=\"urn:enhancement-45fda427\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/information_technology_operations\">IT operations<\/span>. On a cultural level, <span id=\"urn:enhancement-b370bc3d\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/devops\">DevOps<\/span> can help improve the <span id=\"urn:enhancement-d1d333a1\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/interpersonal_relationship\">relationship<\/span> between collaborators, ultimately creating a united cycle that meets both IT and development objectives.&nbsp;<\/p>\n\n\n\n<p class=\"eplus-G9c5gd\">For an effective <span id=\"urn:enhancement-90617555\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/collaboration\">collaboration<\/span> amongst the development and operations teams, <span id=\"urn:enhancement-55c6e18e\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/devops\">DevOps<\/span> provides a variety of principles and practices. In this article, we are going to cover <strong><span id=\"urn:enhancement-dac7ec05\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/devops\">DevOps<\/span> <span id=\"urn:enhancement-dbc694de\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/best_practice\">best practices<\/span><\/strong> that one should not ignore.<\/p>\n\n\n\t\t\t\t<div class=\"wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-b1acacec      \"\n\t\t\t\t\tdata-scroll= \"1\"\n\t\t\t\t\tdata-offset= \"30\"\n\t\t\t\t\tstyle=\"\"\n\t\t\t\t>\n\t\t\t\t<div class=\"uagb-toc__wrap\">\n\t\t\t\t\t\t<div class=\"uagb-toc__title\">\n\t\t\t\t\t\t\tTable Of Contents\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"uagb-toc__list-wrap \">\n\t\t\t\t\t\t<ol class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#devops-best-practices\" class=\"uagb-toc-link__trigger\">DevOps Best Practices<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#1-release-often\" class=\"uagb-toc-link__trigger\">1. Release Often<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#2-automate-development-environments\" class=\"uagb-toc-link__trigger\">2. Automate Development Environments<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#3-automate-code-reviews\" class=\"uagb-toc-link__trigger\">3. Automate Code Reviews<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#4-check-everything-into-source-control\" class=\"uagb-toc-link__trigger\">4. Check Everything into Source Control<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#5-work-on-the-main-branch\" class=\"uagb-toc-link__trigger\">5. Work on the Main Branch<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#6-secure-your-cicd-environment\" class=\"uagb-toc-link__trigger\">6. Secure Your CI\/CD Environment<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#7-package-everything-in-one-build\" class=\"uagb-toc-link__trigger\">7. Package Everything in One Build<\/a><\/li><\/ul><\/li><li class=\"uagb-toc__list\"><a href=\"#conclusion\" class=\"uagb-toc-link__trigger\">Conclusion<\/a><\/ul><\/ol>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\n\n\n<h2 class=\"eplus-LNgjAz wp-block-heading\">DevOps Best Practices<\/h2>\n\n\n\n<h3 class=\"eplus-ehNa9b wp-block-heading\">1. Release Often<\/h3>\n\n\n\n<p class=\"eplus-kWIp4X\">Frequent <span id=\"urn:enhancement-44dbf979\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_release_life_cycle\">releases<\/span> are only possible if the <span id=\"urn:enhancement-d4cc2cc8\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/docker_software\">software<\/span> is ready to be pushed and if it has been tested in an environment identical to that of production. The best <span id=\"urn:enhancement-4975fff5\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/method_computer_programming\">method<\/span> is therefore to add a <span id=\"urn:enhancement-efe02c1a\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_deployment\">deployment<\/span> step in an environment resembling the production one before the actual release. Here are some of the <span id=\"urn:enhancement-cc04b680\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/best_practice\">best practices<\/span>:<\/p>\n\n\n\n<ul class=\"eplus-OYE8mA wp-block-list\"><li><strong>Deployment in &#8220;canary release&#8221; mode<\/strong>: This involves pushing the update to a small group of users, testing with them and then deploying to the largest number if everything went as planned (or to go back and then start again).<\/li><li><strong>Blue-Green deployment<\/strong>: You start with two identical production environments. One is live in production. The other is sleeping. Whenever a new version is deployed, the changes are pushed into the dormant environment. Then we alternate, the environment containing the new version becomes the live environment. In the event of a problem, you can immediately switch to the other environment (the one without the new version). If all goes well, the environments are on par.<\/li><li><strong>A\/B Testing<\/strong>: A\/B&nbsp; testing is similar to Blue-Green deployments but should not be confused. This involves testing features in the application to measure their ease of use, for example. The most efficient variant will be chosen. It is not a distribution methodology.<\/li><\/ul>\n\n\n\n<h3 class=\"eplus-AC81Rh wp-block-heading\">2. Automate Development Environments<\/h3>\n\n\n\n<p class=\"eplus-qkTMFc\"><span id=\"urn:enhancement-72a8a6be\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/automation\">Automation<\/span> is an integral part of <span id=\"urn:enhancement-d115ba27\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/devops\">DevOps<\/span> environments, ensuring that <span id=\"urn:enhancement-eb1e87cd\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/team\">teams<\/span> are not overwhelmed by tasks, especially of the repetitive kind. Most <span id=\"urn:enhancement-c8232e72\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/devops\">DevOps<\/span> pipelines implement <a href=\"https:\/\/cloud.netapp.com\/blog\/why-you-need-infrastructure-as-code-to-do-devops-properly-cvo-blg\">infrastructure as code<\/a> for tasks such as automated <span id=\"urn:enhancement-b95652bc\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/server_computing\">server<\/span> provisioning. However, you can go beyond that by automating the creation of <span id=\"urn:enhancement-467e83cd\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/development_environment_software_development_process\">development environments<\/span>.&nbsp;<\/p>\n\n\n\n<p class=\"eplus-9xtKg8\">For example, you can generate a baseline image as a standard environment. This can significantly save time when you start a new <span id=\"urn:enhancement-6ced8533\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/project\">project<\/span>, especially when adding collaborators to the <span id=\"urn:enhancement-800e01fb\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/project\">projects<\/span>.&nbsp;<\/p>\n\n\n\n<p class=\"eplus-YNNxFe\">Instead of installing everything and setting up the environment for the new team member, you can copy the image to the new <span id=\"urn:enhancement-deaf3720\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/user_computing\">user<\/span>\u2019s machine, and then launch a new environment. If you set the image with <span id=\"urn:enhancement-b920bb30\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/access_control\">access rights<\/span> and all needed <span id=\"urn:enhancement-86cc320\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_software\">applications<\/span>, all you\u2019ll have to do when launching on a local machine or remotely in a <span id=\"urn:enhancement-2a10c15d\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/virtual_machine\">virtual machine<\/span>.<\/p>\n\n\n\n<p class=\"eplus-WskdKw\">Popule <span id=\"urn:enhancement-803bc626\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/programming_tool\">tools<\/span> you can use to automate <span id=\"urn:enhancement-9864c0e5\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/development_environment_software_development_process\">development environments<\/span> are <span id=\"urn:enhancement-6a77c185\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/vagrant_software\">Vagrant<\/span> and <span id=\"urn:enhancement-14ee2a2a\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/chef_software\">Chef<\/span>, which provide a <span id=\"urn:enhancement-21fe0b83\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/user_computing\">user<\/span>-friendly interface and come with a simple <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/backend-dev\/api-economy-code-api-money\/\">API<\/a>. There are many other options, but <span id=\"urn:enhancement-ebde241a\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/vagrant_software\">Vagrant<\/span> and <span id=\"urn:enhancement-c32f2835\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/chef_software\">Chef<\/span> use a common language and can generate a development image from the majority of <span id=\"urn:enhancement-229221b1\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_configuration\">configurations<\/span>.<\/p>\n\n\n\n<h3 class=\"eplus-Hc6bOy wp-block-heading\">3. Automate Code Reviews<\/h3>\n\n\n\n<div class=\"wp-block-image eplus-9nTOH3\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"523\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/code-review-1024x523.jpg\" alt=\"\" class=\"wp-image-9880\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/code-review-1024x523.jpg 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/code-review-300x153.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/code-review-768x392.jpg 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/code-review.jpg 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n\n<p class=\"eplus-kIeVHU\"><span id=\"urn:enhancement-695823f\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/feedback\">Feedback<\/span> is an integral part of the <span id=\"urn:enhancement-b800d158\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/devops\">DevOps<\/span> cycle, ensuring that collaborators continuously get the <span id=\"urn:enhancement-e79b81a8\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/feedback\">feedback<\/span> needed to quickly improve the <span id=\"urn:enhancement-8e142b10\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/codebase\">codebase<\/span>. <span id=\"urn:enhancement-e2245b9f\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/automation\">Automated<\/span> <span id=\"urn:enhancement-ba2782ff\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/code_review\">code reviews<\/span> provide an evaluation of existing code, typically providing <span id=\"urn:enhancement-6e9149c1\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/feedback\">feedback<\/span> for code complexity and style, duplication, coverage, and <span id=\"urn:enhancement-76c03648\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_security\">security<\/span>. Popular tools for <span id=\"urn:enhancement-31290268\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/code_review\">code review<\/span> automation include Codacy, Codebeat, and Code Climate.<\/p>\n\n\n\n<h3 class=\"eplus-L7Bccb wp-block-heading\">4. Check Everything into Source Control<\/h3>\n\n\n\n<p class=\"eplus-TfL0sE\"><span id=\"urn:enhancement-80188c84\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/source_code\">Source code<\/span> is not the only element of an enterprise solution. <span id=\"urn:enhancement-9c87f057\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/database_schema\">Schema<\/span>, <span id=\"urn:enhancement-890ffda7\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/user_interface\">user interface<\/span>, <span id=\"urn:enhancement-9ce105c4\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/access_control\">access control<\/span> rights and static <span id=\"urn:enhancement-2e8b7b92\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/resource\">resources<\/span> such as icons and images are all part of the creation process and should be managed just as diligently as <span id=\"urn:enhancement-93de846b\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/source_code\">source code<\/span>. They should all be checked into a <span id=\"urn:enhancement-84c14112\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/revision_control\">version control system<\/span> (VCS) as a single source of truth.<\/p>\n\n\n\n<h3 class=\"eplus-F1q3Fy wp-block-heading\">5. Work on the Main Branch<\/h3>\n\n\n\n<p class=\"eplus-ypRhSf\">The approach aimed at reducing (or even eliminating) branches is part of a desire to devote more time to <span id=\"urn:enhancement-937f4ad6\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/economic_development\">development<\/span> and less to <span id=\"urn:enhancement-8929823e\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/revision_control\">version management<\/span>. To get the most out of GitOps, try to commit directly to the main branch. Alternatively, you should merge changes from local branches. Do this at least once a day. This amounts to managing the integration frequently but in small chunks instead of being confronted with the difficulties resulting from a merger of several branches carried out just before the release of the new <span id=\"urn:enhancement-5bca0e4d\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_versioning\">version<\/span>.<\/p>\n\n\n\n<h3 class=\"eplus-szOLST wp-block-heading\">6. Secure Your CI\/CD Environment<\/h3>\n\n\n\n<p class=\"eplus-HTe1QV\"><a aria-label=\"undefined (opens in a new tab)\" href=\"https:\/\/www.exabeam.com\/information-security\/information-security\/\" target=\"_blank\" rel=\"noreferrer noopener\">Security considerations<\/a> can never be overstated in a <span id=\"urn:enhancement-ad2b12c\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/context_computing\">context<\/span> where <span id=\"urn:enhancement-da72004b\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_security\">security breaches<\/span> and <span id=\"urn:enhancement-5171b29a\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/vulnerability_computing\">vulnerabilities<\/span> continue to cause massive financial losses while damaging corporate reputations. As the <span id=\"urn:enhancement-ed174788\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/continuous_integration_2\">CI<\/span>\/CD system provides <span id=\"urn:enhancement-b60490b6\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/access_control\">access<\/span> to code bases and <span id=\"urn:enhancement-98d01a6f\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/credential\">credentials<\/span> allowing <span id=\"urn:enhancement-3485fda1\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_deployment\">deployment<\/span> in different environments, it is often taken as the main target of attacks.<\/p>\n\n\n\n<p class=\"eplus-S6Un8a\">Take for example the famous <span id=\"urn:enhancement-7a47da63\" class=\"textannotation disambiguated wl-organization\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/uber_company\">Uber<\/span> compromise\u2026 Hackers had obtained the <span id=\"urn:enhancement-3bed3a1f\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/amazon_web_services\">AWS<\/span> <span id=\"urn:enhancement-f22605fc\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/credential\">credentials<\/span> <span id=\"urn:enhancement-44079d14\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data_storage_device\">stored<\/span> on the <span id=\"urn:enhancement-e614aeee\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/github\">GitHub<\/span> platform, which had enabled them to steal the <span id=\"urn:enhancement-bc4610b9\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/personally_identifiable_information\">personal data<\/span> of&nbsp; 57 million <span id=\"urn:enhancement-a8f6a62f\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/user_computing\">users<\/span> and 600,000 drivers . Identifiers are frequently <span id=\"urn:enhancement-c2dfac88\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data_storage_device\">stored<\/span> in private <span id=\"urn:enhancement-aa75860d\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_repository\">repositories<\/span> for automation purposes.<\/p>\n\n\n\n<p class=\"eplus-rt3Vjt\">It is therefore necessary to isolate the <span id=\"urn:enhancement-10d2858d\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/continuous_integration_2\">CI<\/span>\/CD systems and place them on <span id=\"urn:enhancement-508626b8\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/network_security\">secure<\/span> internal networks. <span id=\"urn:enhancement-e038347f\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/virtual_private_network\">VPNs<\/span>, strong <span id=\"urn:enhancement-aaa4b37d\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/two_factor_authentication\">two-factor authentication<\/span>, and <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/blockchain-dev\/cogito-identity-management-and-blockchain-in-healthcare\/\">identity and access management systems<\/a> are useful in enforcing the \u201c<span id=\"urn:enhancement-c79f8cd4\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/principle_of_least_privilege\">principle of least privilege<\/span>\u201d and limiting exposure to <span id=\"urn:enhancement-439993fd\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/threat_computer\">threats<\/span>. For example, agents can be containerized and placed on secure networks.&nbsp;<\/p>\n\n\n\n<p class=\"eplus-tkVzBV\"><span id=\"urn:enhancement-771cb71a\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/devops\">DevOps<\/span> <span id=\"urn:enhancement-fc731aa\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/pipeline_software\">pipelines<\/span> often prioritize fast release, waiting for <span id=\"urn:enhancement-e685a45a\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_security\">security<\/span> until the end. However, this isn\u2019t always effective in ensuring that the <span id=\"urn:enhancement-ffae8ab2\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/codebase\">codebase<\/span> is secure, nor is it efficient. This is why it is important to add <span id=\"urn:enhancement-d756911a\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/computer_security\">security<\/span> as part of the <span id=\"urn:enhancement-efd0f376\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_development_process\">development cycle<\/span>; this is called DevSecOps.<\/p>\n\n\n\n<h3 class=\"eplus-A1RQq9 wp-block-heading\">7. Package Everything in One Build<\/h3>\n\n\n\n<p class=\"eplus-DxYhy6\">Eliminate the practice of performing <span id=\"urn:enhancement-56e26ca8\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/source_code\">source code<\/span> builds repeatedly. Whether the <span id=\"urn:enhancement-44e77281\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/docker_software\">software<\/span> is to be compiled, packaged, or integrated with other <span id=\"urn:enhancement-18686db9\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/docker_software\">software<\/span>, do it once and promote the <span id=\"urn:enhancement-c56545d3\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/binary_file\">binaries<\/span>. The most successful <span id=\"urn:enhancement-997e5050\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/continuous_integration_2\">CI<\/span> implementations prioritize the build process first in the <span id=\"urn:enhancement-b577c6c6\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/continuous_integration_2\">CI<\/span>\/CD cycle, when packaging software. This can help reduce the introduction of <span id=\"urn:enhancement-f7de9009\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/error\">errors<\/span> into the code or promote early detection. Each <span id=\"urn:enhancement-4ebe33df\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_versioning\">version<\/span> of the resulting artifact must be archived so that the build remains immutable.<\/p>\n\n\n\n<h2 class=\"eplus-skfBYm wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"eplus-g48HFZ\"><span id=\"urn:enhancement-368231d\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/devops\"><a href=\"https:\/\/www.codemotion.com\/magazine\/uncategorized\/devops-continuous-testing-optimisation\/\" target=\"_blank\" rel=\"noopener\">DevOps best practices<\/a> can help you improve collaboration processes and release software products faster. However, to be truly fast, you implement release <span id=\"urn:enhancement-44549a8e\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/method_computer_programming\">methods<\/span>, such as canary release, blue-green <span id=\"urn:enhancement-98359b45\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_deployment\">deployment<\/span>, and various <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/designer-cxo\/multi-armed-bandits-a-better-way-to-a-b-test\/\">A\/B testing techniques<\/a>. You should also automate as much as possible, from infrastructure processes, to <span id=\"urn:enhancement-d5e090e4\" class=\"textannotation disambiguated wl-thing\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/code_review\">code reviews<\/span> and testing. Do not forget to secure your pipelines, and whenever possible package everything in one build.<\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>DevOps is a software development methodology that prioritizes a fast-paced release cycle. DevOps pipelines are built to foster better collaboration between development teams and IT operations. On a cultural level, DevOps can help improve the relationship between collaborators, ultimately creating a united cycle that meets both IT and development objectives.&nbsp; For an effective collaboration amongst&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/\">Read more<\/a><\/p>\n","protected":false},"author":110,"featured_media":9883,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":4,"_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":[3356],"tags":[],"collections":[],"class_list":{"0":"post-9872","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-devops","8":"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>DevOps Best Practices: Take Your Pipeline to the Next Level - Codemotion<\/title>\n<meta name=\"description\" content=\"DevOps pipelines can be a complex environment, continuously changing. Discover best practices to improve your pipeline and take it to the next level.\" \/>\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\/devops\/devops-best-practices\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DevOps Best Practices: How to Take Your Pipeline to the Next Level\" \/>\n<meta property=\"og:description\" content=\"DevOps pipelines can be a complex environment, continuously changing. Discover best practices to improve your pipeline and take it to the next level.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/\" \/>\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=\"2020-09-24T07:27:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-01-05T19:06:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Chen Shem Tov\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Chen Shem Tov\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/\"},\"author\":{\"name\":\"Chen Shem Tov\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/367e384960c956a5c97cd04bf20ddde3\"},\"headline\":\"DevOps Best Practices: How to Take Your Pipeline to the Next Level\",\"datePublished\":\"2020-09-24T07:27:49+00:00\",\"dateModified\":\"2022-01-05T19:06:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/\"},\"wordCount\":1108,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2.jpg\",\"articleSection\":[\"DevOps\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/\",\"name\":\"DevOps Best Practices: Take Your Pipeline to the Next Level - Codemotion\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2.jpg\",\"datePublished\":\"2020-09-24T07:27:49+00:00\",\"dateModified\":\"2022-01-05T19:06:19+00:00\",\"description\":\"DevOps pipelines can be a complex environment, continuously changing. Discover best practices to improve your pipeline and take it to the next level.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2.jpg\",\"width\":1200,\"height\":675,\"caption\":\"developer\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/backend\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"DevOps Best Practices: How to Take Your Pipeline to the Next Level\"}]},{\"@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\/367e384960c956a5c97cd04bf20ddde3\",\"name\":\"Chen Shem Tov\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ca5223201024ecef0a5858d2bd02d787ea0f558ef33ad1465aa267d6bde2fb08?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ca5223201024ecef0a5858d2bd02d787ea0f558ef33ad1465aa267d6bde2fb08?s=96&d=mm&r=g\",\"caption\":\"Chen Shem Tov\"},\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/chen-shem-tov\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"DevOps Best Practices: Take Your Pipeline to the Next Level - Codemotion","description":"DevOps pipelines can be a complex environment, continuously changing. Discover best practices to improve your pipeline and take it to the next level.","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\/devops\/devops-best-practices\/","og_locale":"en_US","og_type":"article","og_title":"DevOps Best Practices: How to Take Your Pipeline to the Next Level","og_description":"DevOps pipelines can be a complex environment, continuously changing. Discover best practices to improve your pipeline and take it to the next level.","og_url":"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2020-09-24T07:27:49+00:00","article_modified_time":"2022-01-05T19:06:19+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2.jpg","type":"image\/jpeg"}],"author":"Chen Shem Tov","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Chen Shem Tov","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/"},"author":{"name":"Chen Shem Tov","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/367e384960c956a5c97cd04bf20ddde3"},"headline":"DevOps Best Practices: How to Take Your Pipeline to the Next Level","datePublished":"2020-09-24T07:27:49+00:00","dateModified":"2022-01-05T19:06:19+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/"},"wordCount":1108,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2.jpg","articleSection":["DevOps"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/","url":"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/","name":"DevOps Best Practices: Take Your Pipeline to the Next Level - Codemotion","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2.jpg","datePublished":"2020-09-24T07:27:49+00:00","dateModified":"2022-01-05T19:06:19+00:00","description":"DevOps pipelines can be a complex environment, continuously changing. Discover best practices to improve your pipeline and take it to the next level.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2.jpg","width":1200,"height":675,"caption":"developer"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/devops\/devops-best-practices\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/backend\/"},{"@type":"ListItem","position":3,"name":"DevOps Best Practices: How to Take Your Pipeline to the Next Level"}]},{"@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\/367e384960c956a5c97cd04bf20ddde3","name":"Chen Shem Tov","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ca5223201024ecef0a5858d2bd02d787ea0f558ef33ad1465aa267d6bde2fb08?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ca5223201024ecef0a5858d2bd02d787ea0f558ef33ad1465aa267d6bde2fb08?s=96&d=mm&r=g","caption":"Chen Shem Tov"},"url":"https:\/\/www.codemotion.com\/magazine\/author\/chen-shem-tov\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2-600x600.jpg","author_info":{"display_name":"Chen Shem Tov","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/chen-shem-tov\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2.jpg",1200,675,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2-300x169.jpg",300,169,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2-768x432.jpg",768,432,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2-1024x576.jpg",1024,576,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2.jpg",1200,675,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2.jpg",1200,675,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2.jpg",100,56,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2020\/09\/developer2-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Chen Shem Tov","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/chen-shem-tov\/"},"uagb_comment_info":0,"uagb_excerpt":"DevOps is a software development methodology that prioritizes a fast-paced release cycle. DevOps pipelines are built to foster better collaboration between development teams and IT operations. On a cultural level, DevOps can help improve the relationship between collaborators, ultimately creating a united cycle that meets both IT and development objectives.&nbsp; For an effective collaboration amongst&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/9872","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\/110"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=9872"}],"version-history":[{"count":8,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/9872\/revisions"}],"predecessor-version":[{"id":15295,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/9872\/revisions\/15295"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/9883"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=9872"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=9872"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=9872"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=9872"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}