{"id":61986,"date":"2024-07-28T11:23:58","date_gmt":"2024-07-28T05:53:58","guid":{"rendered":"https:\/\/www.tothenew.com\/blog\/?p=61986"},"modified":"2024-07-29T09:44:31","modified_gmt":"2024-07-29T04:14:31","slug":"mastering-bitbucket-ci-cd-advanced-techniques-and-best-practices-for-seamless-devops","status":"publish","type":"post","link":"https:\/\/www.tothenew.com\/blog\/mastering-bitbucket-ci-cd-advanced-techniques-and-best-practices-for-seamless-devops\/","title":{"rendered":"Mastering Bitbucket CI\/CD: Advanced Techniques and Best Practices For Seamless DevOps"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p><span style=\"font-weight: 400;\">Did you know that organizations using continuous integration and continuous delivery (CI\/CD) practices deploy code 30 times more frequently than their peers, with 60% fewer failures? This statistic underscores the transformative power of CI\/CD in modern software development. In the world of DevOps, bitbucket pipelines stand out as one of the powerful tools for automating the build, test, and deployment processes directly within your bitbucket repositories.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This blog will delve into the advanced usage of Bitbucket CI\/CD, providing you with the knowledge and best practices needed to optimize your development workflows. We\u2019ll cover everything from setting up your first pipeline to integrating with other tools, ensuring security and compliance and real-world use cases.<\/span><\/p>\n<h2><strong>Objective<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">By the end of this guide, you will be equipped to leverage Bitbucket Pipelines to its fullest potential, streamlining your development process and enhancing your team\u2019s productivity.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Section 1: Getting Started with Bitbucket Pipelines<\/span><\/h2>\n<h3><strong>Introduction to Bitbucket Pipelines<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Bitbucket Pipelines is a CI\/CD service integrated into Bitbucket. It allows you to automatically build, test and deploy your code based on a configuration file (`bitbucket-pipelines.yml`) in your repository.<\/span><\/p>\n<h3><strong>Why use Bitbucket Pipelines?<\/strong><\/h3>\n<ul>\n<li><b>Integrated Experience: <\/b><span style=\"font-weight: 400;\">Seamlessly integrated into Bitbucket, making it easy to manage code and deployments in one place.<\/span><\/li>\n<li><b>Automation: <\/b><span style=\"font-weight: 400;\">Reduces manual intervention, improving efficiency and consistency<\/span><\/li>\n<li><b>Scalability: <\/b><span style=\"font-weight: 400;\">Handles complex workflows and large-scale projects with ease<\/span><\/li>\n<\/ul>\n<h3><strong>Setting Up Your First Pipeline<\/strong><\/h3>\n<ul>\n<li><b>Enable Bitbucket Pipelines: <\/b><span style=\"font-weight: 400;\">Go to the Bitbucket repository, navigate to the Pipelines section, and click \u2018Enable Pipelines\u2019<\/span><\/li>\n<li><b>Create `bitbucket-pipelines.yml`: <\/b><span style=\"font-weight: 400;\">Add a <\/span><span style=\"font-weight: 400;\">bitbucket-pipelines.yml<\/span><span style=\"font-weight: 400;\"> file to the root of your repository. This file defines your build and deployment processes.<\/span><\/li>\n<\/ul>\n<pre><span style=\"font-weight: 400;\">pipelines<\/span><span style=\"font-weight: 400;\">:<\/span><span style=\"font-weight: 400;\"> \u00a0<\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0default<\/span><span style=\"font-weight: 400;\">:<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0  - <\/span><span style=\"font-weight: 400;\">step<\/span><span style=\"font-weight: 400;\">:<\/span>\r\n<span style=\"font-weight: 400;\">        name<\/span><span style=\"font-weight: 400;\">: <\/span><span style=\"font-weight: 400;\">Build and Test<\/span>\r\n<span style=\"font-weight: 400;\">        caches<\/span><span style=\"font-weight: 400;\">:<\/span>\r\n<span style=\"font-weight: 400;\">          - <\/span><span style=\"font-weight: 400;\">node<\/span>\r\n<span style=\"font-weight: 400;\">        script<\/span><span style=\"font-weight: 400;\">:<\/span>\r\n<span style=\"font-weight: 400;\">          - <\/span><span style=\"font-weight: 400;\">npm install<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0        - <\/span><span style=\"font-weight: 400;\">npm test<\/span><\/pre>\n<ul>\n<li><b>Run your pipeline:<\/b> Commit your changes and push to your repository, Bitbucket Pipelines will automatically start the build process based on your configuration.<\/li>\n<\/ul>\n<h2><span style=\"font-weight: 400;\">Section 2: Pipeline Configuration<\/span><\/h2>\n<h3><b>Understanding the `bitbucket-pipelines.yml` File<br \/>\n<\/b><span style=\"font-weight: 400;\">The `bitbucket-pipelines.yml` file is the heart of Bitbucket Pipelines, specifying the steps to be executed during the build and deployment process.<\/span><\/h3>\n<p><b>Key Components:<\/b><b><\/b><\/p>\n<ul>\n<li><b>Definitions: <\/b><span style=\"font-weight: 400;\">Define the services and steps used across multiple pipelines<\/span><\/li>\n<li><b>Steps: <\/b><span style=\"font-weight: 400;\">Individual tasks to be executed, such as building code or running tests<\/span><\/li>\n<li><b>Services: <\/b><span style=\"font-weight: 400;\">Docker container that runs alongside your steps, useful for database or other dependencies<\/span><\/li>\n<li><b>Pipelines: <\/b><span style=\"font-weight: 400;\">Define the sequence of steps and conditions for running them<\/span><\/li>\n<\/ul>\n<p><b>Customizing Pipelines<br \/>\n<\/b><span style=\"font-weight: 400;\">Bitbucket pipelines can be customized to fit various project needs:<\/span><\/p>\n<p><b>Environment Variables: <\/b><span style=\"font-weight: 400;\">Store sensitive data securely<br \/>\n<\/span><\/p>\n<pre><span style=\"font-weight: 400;\">pipelines: \u00a0\r\n\u00a0\u00a0default:\r\n\u00a0\u00a0\u00a0- step:\r\n       name: \r\n\u00a0\u00a0\u00a0    script:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  - echo $MY_SECRET<\/span><\/pre>\n<p><b>Caching: <\/b><span style=\"font-weight: 400;\">Speed up builds by caching dependencies<\/span><\/p>\n<pre>caches:\r\n  - node<\/pre>\n<p><b>Artifacts: <\/b><span style=\"font-weight: 400;\">Store and share files generated during the build<\/span><\/p>\n<pre>artifacts:\r\n  - build\/**<\/pre>\n<h3><span style=\"font-weight: 400;\">Section 3: Advanced Pipeline Features<\/span><\/h3>\n<h3><b>Docker Integration<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Docker plays a crucial role in Bitbucket Pipelines, providing isolated environments for builds and tests.<\/span><\/p>\n<ul>\n<li><b>Using Docker Images: <\/b><span style=\"font-weight: 400;\">Specify docker images for your build environment<\/span><\/li>\n<\/ul>\n<pre><span style=\"font-weight: 400;\">image: node:16<\/span><\/pre>\n<ul>\n<li><b>Building Docker Images: <\/b><span style=\"font-weight: 400;\">Automate docker image build and push to a registry<\/span><\/li>\n<\/ul>\n<pre><span style=\"font-weight: 400;\">pipelines<\/span><span style=\"font-weight: 400;\">:<\/span><span style=\"font-weight: 400;\"> \u00a0<\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0default<\/span><span style=\"font-weight: 400;\">:<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0  - <\/span><span style=\"font-weight: 400;\">step<\/span><span style=\"font-weight: 400;\">:\r\n<\/span>        name: DockerBuild\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><span style=\"font-weight: 400;\">script<\/span><span style=\"font-weight: 400;\">:<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  - <\/span><span style=\"font-weight: 400;\">docker build -t my-app .<\/span>\r\n<span style=\"font-weight: 400;\">          - docker push my-app<\/span><\/pre>\n<p><b>Deployment Strategies<br \/>\n<\/b><span style=\"font-weight: 400;\">Effective deployment strategies are vital for reliable software delivery.<\/span><\/p>\n<ul>\n<li><b>Continuous Deployment: <\/b><span style=\"font-weight: 400;\">Automatically deploy code changes to production.<\/span><\/li>\n<\/ul>\n<pre><span style=\"font-weight: 400;\">definitions:<\/span>\r\n<span style=\"font-weight: 400;\">  steps:<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0  - step: &amp;DeployApp<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name: Deploy My App<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0script:<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  - .\/deploy.sh\r\n<\/span>\r\n<span style=\"font-weight: 400;\">pipelines<\/span><span style=\"font-weight: 400;\">:<\/span><span style=\"font-weight: 400;\"> \u00a0<\/span>\r\n<span style=\"font-weight: 400;\">  branches<\/span><span style=\"font-weight: 400;\">:<\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"font-weight: 400;\">master<\/span><span style=\"font-weight: 400;\">: <\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- <\/span><span style=\"font-weight: 400;\">step<\/span><span style=\"font-weight: 400;\">: *<\/span><span style=\"font-weight: 400;\">DeployApp<\/span><\/pre>\n<ul>\n<li><b>Blue-Green Deployments: <\/b><span style=\"font-weight: 400;\">Minimize downtime and risk during deployments.<\/span><\/li>\n<\/ul>\n<p><b>Security and Compliance<br \/>\n<\/b><span style=\"font-weight: 400;\">Maintaining security and compliance is essential in CI\/CD workflows.<\/span><\/p>\n<ul>\n<li><b>Managing Secrets: <\/b><span style=\"font-weight: 400;\">Use Bitbucket\u2019s secure environment variables to manage sensitive information.<\/span><\/li>\n<li><b>Security Scanning: <\/b><span style=\"font-weight: 400;\">Integrate security scanning tools to identify vulnerabilities.<\/span><\/li>\n<\/ul>\n<h3><span style=\"font-weight: 400;\">Section 4: Integration with Other Tools<\/span><\/h3>\n<p><b>Integration with Jira<br \/>\n<\/b><span style=\"font-weight: 400;\">Linking Bitbucket Pipelines with Jira enhances project management<\/span><\/p>\n<p><b>Automate Workflow Transitions: <\/b><span style=\"font-weight: 400;\">Move jira issue based on pipeline status<\/span><\/p>\n<pre>script:\r\n  - jira issue move ABC-123 \"In Progress\"<\/pre>\n<p><b>Integration with Cloud Platforms<br \/>\n<\/b><span style=\"font-weight: 400;\">Deploy applications to cloud platforms seamlessly.<\/span><\/p>\n<ul>\n<li><b>AWS: <\/b><span style=\"font-weight: 400;\">Use AWS CLI for deployments<\/span><\/li>\n<\/ul>\n<pre>script:\r\n  - aws s3 sync build\/ s3:\/\/uat-build<\/pre>\n<ul>\n<li><span style=\"font-weight: 400;\"><b>Google Cloud: <\/b>Deploy to Google Cloud using gcloud CLI<br \/>\n<\/span><\/li>\n<\/ul>\n<p><b>Notification and Monitoring<br \/>\n<\/b><span style=\"font-weight: 400;\">Keep your team informed about the pipeline status<\/span><\/p>\n<p><b>Slack Notifications: <\/b><span style=\"font-weight: 400;\">Send build status to slack<br \/>\n<\/span><\/p>\n<pre><span style=\"font-weight: 400;\">definitions:<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0steps:<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0- step: &amp;DeployApp<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name: Deploy ERP API<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0script:<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  - <\/span><span style=\"font-weight: 400;\">.\/deploy.sh<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0after-script:<\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"font-weight: 400;\">- <\/span><span style=\"font-weight: 400;\">&gt;<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if [ $? -eq 0 ]; then<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0STATUS=\"SUCCESS\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0STATUS=\"FAILURE\"<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fi<\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- <\/span><span style=\"font-weight: 400;\">&gt;<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0curl -X POST -H 'Content-type: application\/json' \\<\/span>\r\n<span style=\"font-weight: 400;\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0--data \"{\\\"text\\\":\\\"Build and tests for commit ${BITBUCKET_COMMIT} on branch ${BITBUCKET_BRANCH} completed. Status: ${STATUS}. Commit message: ${BITBUCKET_COMMIT_MESSAGE}.\\\"}\" \\<\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$SLACK_WEBHOOK_URL<\/span>\r\n\r\n<span style=\"font-weight: 400;\">pipelines<\/span><span style=\"font-weight: 400;\">:<\/span><span style=\"font-weight: 400;\"> \u00a0<\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0branches<\/span><span style=\"font-weight: 400;\">:<\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"font-weight: 400;\">master<\/span><span style=\"font-weight: 400;\">: <\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- <\/span><span style=\"font-weight: 400;\">step<\/span><span style=\"font-weight: 400;\">: *<\/span><span style=\"font-weight: 400;\">DeployApp<\/span><\/pre>\n<h3><span style=\"font-weight: 400;\">Section 5: Best Practices<\/span><\/h3>\n<p><b>Pipeline Optimizations<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Optimize your pipelines for speed and efficiency<\/span><\/p>\n<ul>\n<li><b>Parallel Steps: <\/b><span style=\"font-weight: 400;\">Run steps in parallel to reduce build times.<\/span><\/li>\n<\/ul>\n<pre><span style=\"font-weight: 400;\">pipelines<\/span><span style=\"font-weight: 400;\">:<\/span><span style=\"font-weight: 400;\"> \u00a0<\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0branches<\/span><span style=\"font-weight: 400;\">:<\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"font-weight: 400;\">master<\/span><span style=\"font-weight: 400;\">: <\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- <\/span><span style=\"font-weight: 400;\">parallel<\/span><span style=\"font-weight: 400;\">:<\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- <\/span><span style=\"font-weight: 400;\">step<\/span><span style=\"font-weight: 400;\">: *<\/span><span style=\"font-weight: 400;\">SonarqubeScan<\/span>\r\n<span style=\"font-weight: 400;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><span style=\"font-weight: 400;\">- <\/span><span style=\"font-weight: 400;\">step<\/span><span style=\"font-weight: 400;\">: *<\/span><span style=\"font-weight: 400;\">SnykAnalysis<\/span><\/pre>\n<ul>\n<li><b>Efficient Caching: <\/b><span style=\"font-weight: 400;\">Cache dependency and results to speed up subsequent builds<\/span><\/li>\n<\/ul>\n<p><b>Maintaining Clean Pipeline<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Keep your pipeline configuration manageable and readable<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><b>Modular Configuration: <\/b><span style=\"font-weight: 400;\">Break down complex configuration into reusable snippets<\/span><\/li>\n<li style=\"font-weight: 400;\"><b>DRY Principle: <\/b>Avoid repetition by reusing configuration elements<\/li>\n<\/ul>\n<p><b>Testing and Quality Assurance<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Ensure high quality code with automated testing<\/span><\/p>\n<ul>\n<li><b>Static Analysis: <\/b><span style=\"font-weight: 400;\">Integrate tools like ESLint or Sonarqube for code analysis<\/span><\/li>\n<li><b>Automated Tests: <\/b><span style=\"font-weight: 400;\">Run unit and integration tests as part of your pipeline.<\/span><\/li>\n<\/ul>\n<h3><span style=\"font-weight: 400;\">Section 6: Real-World Use Cases and Examples<\/span><\/h3>\n<p><b>Case Studies<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Learn from real-world examples of Bitbucket Pipelines in action.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><b>Microservices Architecture: <\/b><span style=\"font-weight: 400;\">Managing pipelines for multiple microservices<\/span><\/li>\n<li style=\"font-weight: 400;\"><b>Monorepo Management: <\/b><span style=\"font-weight: 400;\">Handling CI\/CD for large repositories with multiple projects\u00a0<\/span><\/li>\n<\/ul>\n<p><b>Sample Projects<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Explore practical examples to kickstart your own projects.<\/span><\/p>\n<p><b>Node.js Project: <\/b><span style=\"font-weight: 400;\">Example pipeline for a Node,js application<\/span><\/p>\n<p><b>Scenario:\u00a0<\/b><\/p>\n<p><span style=\"font-weight: 400;\">In this Gitflow, developers create feature\/bugfix\/hotfix\/chores branches from the main branch. They work on these branches and create pull requests (PRs) against the main branch. The PR first merges into the QA branch and deploys to QA. Upon merging into the main branch, it deploys to UAT, awaiting a manual trigger for production deployment<\/span><\/p>\n<p>Example pipeline file can be found here:\u00a0 https:\/\/gist.github.com\/nxz98\/94e2084214891ad3cf38dec3d8f3a7fa<\/p>\n<h2><strong>Conclusion<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Implementing Bitbucket Pipelines can significantly enhance your CI\/CD workflows, leading to faster, more reliable software delivery. By following the advanced techniques and best practices outlined in this blog, you\u2019ll be well-equipped to take full advantage of Bitbucket Pipelines. Start integrating these strategies into your development process today and experience the benefits of seamless DevOps.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Did you know that organizations using continuous integration and continuous delivery (CI\/CD) practices deploy code 30 times more frequently than their peers, with 60% fewer failures? This statistic underscores the transformative power of CI\/CD in modern software development. In the world of DevOps, bitbucket pipelines stand out as one of the powerful tools for [&hellip;]<\/p>\n","protected":false},"author":1461,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":351},"categories":[2348],"tags":[4279,4252,1916,1892],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/61986"}],"collection":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/users\/1461"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/comments?post=61986"}],"version-history":[{"count":7,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/61986\/revisions"}],"predecessor-version":[{"id":63507,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/61986\/revisions\/63507"}],"wp:attachment":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/media?parent=61986"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/categories?post=61986"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/tags?post=61986"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}