{"id":11398,"date":"2022-08-30T12:37:11","date_gmt":"2022-08-30T07:07:11","guid":{"rendered":"https:\/\/opstree.com\/blog\/\/?p=11398"},"modified":"2026-03-05T19:03:21","modified_gmt":"2026-03-05T13:33:21","slug":"how-to-setup-an-agent-on-azure-devops","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/2022\/08\/30\/how-to-setup-an-agent-on-azure-devops\/","title":{"rendered":"How To Setup An Agent On Azure Devops"},"content":{"rendered":"\r\n<h2>Introduction<\/h2>\r\n<p>To set up a self-hosted agent in Azure DevOps, follow these steps: First, generate a Personal Access Token (PAT). Next, go to Organization Settings to create an agent pool. Next, download the appropriate agent package for your operating system (whether it&#8217;s Windows or Linux). Then, run the `config.cmd` or `.\/config.sh` command to register the agent. Be sure to install the agent in a directory that doesn&#8217;t contain spaces, such as `C:\\agents`.<\/p>\r\n<p><a href=\"https:\/\/azure.microsoft.com\/en-us\/products\/devops\" target=\"_blank\" rel=\"noopener\">Azure DevOps<\/a> is an integrated service provided by Azure. In recent times, it is observed that Azure DevOps is increasing its penetration into the DevOps community. Being a SaaS service, it doesn&#8217;t come with a pre-configured host or better say, an agent to execute its commands. That&#8217;s why whenever we want to use our Azure DevOps Pipeline we need to have an agent configured in our Agent Pool. In this blog, we will learn how to configure an agent and later on how to create a service for our host.<!--more--><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Let&#8217;s Get Started<\/h2>\r\n\r\n\r\n\r\n<p>Configuring a self-hosted Agent might seem complicated but by following the below steps we can easily configure an agent in our Agent Pool. So let&#8217;s get started.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">What is Azure DevOps?<\/h2>\r\n\r\n\r\n\r\n<p>Azure DevOps is a cloud-based platform designed to equip software development teams with integrated tools. From planning tasks and collaborating on code to building applications, testing features, and deploying to production, it covers all essential aspects of the development lifecycle. The platform caters to the diverse needs of teams by offering different service models. For small teams, the free version allows for quick start, while comprehensive subscription and usage-based payment plans facilitate complete project management for larger projects.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Azure Self-hosted Agent<\/h2>\r\n\r\n\r\n\r\n<p>An agent that you set up and manage on your own to run jobs is a\u00a0<strong>self-hosted agent<\/strong>. Though we can use a Microsoft Hosted Agent, we prefer a self-hosted Agent. This is to have more control to install dependent software needed for our builds and deployments, machine-level caches and configuration persist from run to run, boosting speed and maintaining the backup of our logs. You can use self-hosted agents in Azure Pipelines or Azure DevOps Server, formerly named Team Foundation Server (TFS). To successfully configure a self-hosted Agent we need an Agent Pool, download &amp; unzip the package, Personal Access Token (PAT) and execute a few shell commands. Let&#8217;s move step by step.<\/p>\r\n<p><a href=\"https:\/\/opstree.com\/case-study\/migration-from-gcp-to-azure-with-zero-downtime-in-just-30-days\/\" target=\"_blank\" rel=\"noopener\"><strong>Explore how a zero-downtime migration to Azure was delivered at scale.<\/strong><\/a><\/p>\r\n\r\n\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Creating And Agent Pool<\/h3>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\"><strong>Step 1:<\/strong><\/h4>\r\n\r\n\r\n\r\n<p>Click on Project Settings at the bottom left corner<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-11646\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/image.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Step 2:<\/h4>\r\n\r\n\r\n\r\n<p>Go to Agent Pools under the <a href=\"https:\/\/www.buildpiper.io\/\" target=\"_blank\" rel=\"noopener\">Pipelines<\/a> header.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-11647\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/image-1.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Step 3:<\/h4>\r\n\r\n\r\n\r\n<p>Click Add <strong>Pool<\/strong> and choose <strong>self-hosted Agent<\/strong><\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-11648\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/image-2.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Get The Agent<\/h3>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Step 4:<\/h4>\r\n\r\n\r\n\r\n<p>Now move inside your newly created pool &amp; click on <strong>New Agent<\/strong> &amp; Choose Your os-flavor and move forward accordingly.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-11660\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/image-11.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<p>You can also use the following commands to configure your Linux agent for ADO.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-syntaxhighlighter-code\">cd myagent\r\nwget https:\/\/vstsagentpackage.azureedge.net\/agent\/2.204.0\/vsts-agent-linux-x64-2.204.0.tar.gz\r\ntar zxvf vsts-agent-linux-x64-2.204.0.tar.gz<\/pre>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Generate Personal Access Token<\/h3>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Step 4:<\/h4>\r\n\r\n\r\n\r\n<p>Configure your first Linux Agent.<\/p>\r\n\r\n\r\n\r\n<p>Run\u00a0<code>.\/config.sh<\/code>\u00a0in your terminal.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-11650\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/image-4.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Now you need to generate a <strong>Personal Access Token<\/strong> (PAT).<\/p>\r\n\r\n\r\n\r\n<p>For that, you need to go to the Personal Access Tokens section under User Settings located in the top right corner of your screen. Name it accordingly and grant permissions as per your requirements<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-11652\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/image-6.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Warning &#8211; Make sure you copy the token. Azure doesn&#8217;t store it and you will not be able to see it again. PAT can only be regenerated.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"645\" height=\"928\" class=\"wp-image-11651\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/image-5.png?w=645\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Configuring Agent<\/h3>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Step 5:<\/h4>\r\n\r\n\r\n\r\n<p>Now paste that PAT in your terminal<\/p>\r\n\r\n\r\n\r\n<p>Enter agent pool (press enter for default)<\/p>\r\n\r\n\r\n\r\n<p>Enter agent name (press enter for Linux)<\/p>\r\n\r\n\r\n\r\n<p>Enter work folder (press enter for _work)<\/p>\r\n\r\n\r\n\r\n<p>And you&#8217;re done with your ADO Self Hosted Agent Configuration<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-11655\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/image-8.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Step 6:<\/h2>\r\n\r\n\r\n\r\n<p>Now Run\u00a0<code>.\/run.sh<\/code>\u00a0to bring your agent from Offline to Online.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-11653\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/image-7.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"548\" height=\"205\" class=\"wp-image-11657\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/image-10.png?w=548\" alt=\"\" \/><\/figure>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-11656\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/image-9.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"entry-title\">\u00a0<\/p>\r\n<h2 class=\"wp-block-heading\">Creating a Service For Self-Hosted Agent<\/h2>\r\n\r\n\r\n\r\n<p>Till now we have seen the process to enable our agent to listen for jobs. As you might have guessed up until now that just in case we stop running the script <code>run.sh<\/code>, our agent will get offline, which might be fatal while running a deployment. And obviously, nobody wants that to happen. To resolve that problem we will create an <a href=\"https:\/\/opstree.com\/application-modernization-with-aws\/\" target=\"_blank\" rel=\"noopener\">application service<\/a> for our agent.<\/p>\r\n\r\n\r\n\r\n<p>Application services help organizations boost performance, maintain availability, improve network and <a href=\"https:\/\/opstree.com\/services\/application-platform-security-management\/\" target=\"_blank\" rel=\"noopener\">application security<\/a>, and gain visibility into the behavior and health of their apps. By incorporating application services into their systems we can obtain the foundation needed to improve efficiency and increase their adaptability.<\/p>\r\n\r\n\r\n\r\n<p>We will add this content in <code><strong>\/etc\/systemd\/system<\/strong><\/code>.<\/p>\r\n\r\n\r\n\r\n<p><code>cd \/etc\/systemd\/system<\/code><\/p>\r\n\r\n\r\n\r\n<p><code>sudo vim azureagent.service<\/code><\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-syntaxhighlighter-code\">[Unit]\r\nDescription=\"Service for SelfHosted Agent\"\r\n\r\n[Service]\r\nUser=ubuntu\r\nWorkingDirectory=\/home\/ubuntu\/myagent\/\r\nExecStart=\/bin\/bash -c 'cd \/home\/ubuntu\/myagent\/ &amp;&amp; .\/run.sh'\r\n\r\n[Install]\r\nWantedBy=multi-user.target<\/pre>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-11689\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/image-13.png?w=945\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Just make sure that you replace ubuntu with your username, like I&#8217;ve replaced &#8220;ubuntu&#8221; with my user &#8220;himanshu&#8221; and respective WorkingDirectory and execStart. After saving the file we will enable and start our service.<\/p>\r\n\r\n\r\n\r\n<p><code>sudo systemctl daemon-reload<\/code><\/p>\r\n\r\n\r\n\r\n<p><code>sudo systemctl enable <code>azureagent<\/code>.service<br \/>sudo systemctl start <code>azureagent<\/code>.service<br \/>sudo systemctl status <code>azureagent<\/code>.service<\/code><\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" class=\"wp-image-11690\" src=\"https:\/\/opstree.com\/blog\/\/wp-content\/uploads\/2022\/08\/image-14.png?w=1024\" alt=\"\" width=\"800\" \/><\/figure>\r\n\r\n\r\n\r\n<p>And that&#8217;s all we need to do to activate the service for our azure agent.<\/p>\r\n<p>[Also Read: <a href=\"https:\/\/opstree.com\/blog\/2024\/05\/07\/azure-synapse-social-media-analytics-solution\/\" target=\"_blank\" rel=\"noopener\">Azure Synapse Social Media Analytics Solution<\/a>]<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\r\n\r\n\r\n\r\n<p>So, in this article, we have learned the importance of our Azure self-hosted Agents and how to configure them in a simple step-by-step manner. We also found out under what circumstances we must use self-hosted Agents than Microsoft Hosted Agents.<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-social-links aligncenter is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-1 wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a href=\"https:\/\/www.linkedin.com\/company\/opstree-solutions\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a href=\"https:\/\/www.youtube.com\/channel\/UCeLma6SpNYH7jjYKSBNSexw\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-github  wp-block-social-link\"><a href=\"https:\/\/github.com\/OpsTree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">GitHub<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a href=\"https:\/\/www.facebook.com\/opstree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\r\n\r\n<li class=\"wp-social-link wp-social-link-medium  wp-block-social-link\"><a href=\"https:\/\/medium.com\/buildpiper\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Medium<\/span><\/a><\/li><\/ul>\r\n","protected":false},"excerpt":{"rendered":"<p>Introduction To set up a self-hosted agent in Azure DevOps, follow these steps: First, generate a Personal Access Token (PAT). Next, go to Organization Settings to create an agent pool. Next, download the appropriate agent package for your operating system (whether it&#8217;s Windows or Linux). Then, run the `config.cmd` or `.\/config.sh` command to register the &hellip; <a href=\"https:\/\/opstree.com\/blog\/2022\/08\/30\/how-to-setup-an-agent-on-azure-devops\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;How To Setup An Agent On Azure Devops&#8221;<\/span><\/a><\/p>\n","protected":false},"author":222974219,"featured_media":29900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[28070474],"tags":[3370,328543109,755206755,768739308,676319247,4996032],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2025\/11\/DevSecOps-1.jpg","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfDBOm-2XQ","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/11398"}],"collection":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/users\/222974219"}],"replies":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/comments?post=11398"}],"version-history":[{"count":30,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/11398\/revisions"}],"predecessor-version":[{"id":30914,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/11398\/revisions\/30914"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media\/29900"}],"wp:attachment":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media?parent=11398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=11398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=11398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}