{"id":10498,"date":"2024-09-24T10:30:00","date_gmt":"2024-09-24T08:30:00","guid":{"rendered":"https:\/\/wata.es\/?p=10498"},"modified":"2024-09-30T09:05:18","modified_gmt":"2024-09-30T07:05:18","slug":"how-to-handle-secrets-in-bitbucket","status":"publish","type":"post","link":"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/","title":{"rendered":"How to handle secrets in Bitbucket"},"content":{"rendered":"\n<p>Sensitive data like passwords, API tokens, and DB credentials are essential for project development and testing but should never be stored in plain text within the repository. In this section, we&#8217;ll explain how WATA Factory manages these secrets using Bitbucket&#8217;s built-in features: repository variables and deployment variables.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>To make use of any of these solutions you just need write privileges. However, to be able to set up any kind of variables we must have admin privileges. If you need more technical information you can check <a href=\"https:\/\/support.atlassian.com\/bitbucket-cloud\/docs\/variables-and-secrets\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">this article<\/a>.<\/p>\n\n\n\n<p>Cypress is one of WATA Factory\u2019s references for automated testing frameworks, so we will use a Cypress project as an example, although this approach can be used in any project with a different technology.<\/p>\n\n\n\n<p>In this project we have a reference to a credentials.ts file within the cypress.config.ts. If we wanted to execute our automated tests in the pipelinewe would need to have the credentials file in the repo or else the pipeline will fail. We already know this is not a good practice, so how do we fix that?<\/p>\n\n\n\n<p>Entering the scene repository variables. With this Bitbucket native feature we can reference defined variables in our pipelines and use them at our convenience.<\/p>\n\n\n\n<p>Our solution will have these two simple steps:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create the variable in Bitbucket<\/li>\n\n\n\n<li>Create a temporary credentials.ts file<\/li>\n\n\n\n<li>Copy the content of the variable into our temporary file<\/li>\n\n\n\n<li>DONE! Our project already has the file it needed with all our secrets!<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Repository variables:<\/strong><\/h3>\n\n\n\n<p>Let\u2019s say our credential.ts file has the following structure:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export const USERS = {\n    admin: {\n      username: 'admin',\n      password: 'adminPassword',\n    },\n    regularuser: {\n      username: 'justAnUser',\n      password: 'regularPassword',\n    },\n  };\n   \nexport const DB_CREDENTIALS = {\n    host: 'your-server.com',\n    user: 'dbUser',\n    password: 'anotherPassword',\n    database: 'my_sample_db',\n    port: 1234,\n  };\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>And our cypress.config.ts file need to import it to use those credentials:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { DB_CREDENTIALS } from '.\/cypress\/properties\/credentials';\n\n\/\/my DB connection\nconst connections: Record&lt;string, any> = {\n  atDashboard: {\n    host: DB_CREDENTIALS.host,\n    user: DB_CREDENTIALS.user,\n    password: DB_CREDENTIALS.password,\n    database: DB_CREDENTIALS.database,\n    port: DB_CREDENTIALS.port,\n  }\n};<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Variables can be a whole json file if we wanted to, so we are going to copy the content of our credentials.ts file and go to \u2018Repository settings &gt; Repository variables&#8217; in our repo.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"193\" height=\"432\" src=\"https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/Picture-1.png\" alt=\"secrets\" class=\"wp-image-10499\" style=\"width:162px;height:auto\" srcset=\"https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/Picture-1.png 193w, https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/Picture-1-134x300.png 134w\" sizes=\"auto, (max-width: 193px) 100vw, 193px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"468\" height=\"321\" src=\"https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/Picture-2.png\" alt=\"secrets\" class=\"wp-image-10502\" style=\"width:535px;height:auto\" srcset=\"https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/Picture-2.png 468w, https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/Picture-2-300x206.png 300w\" sizes=\"auto, (max-width: 468px) 100vw, 468px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Here we just need to enter a name for our variable and paste the content of our file and click add. In case you want these credentials to be encrypted and hidden in the build logs you can check the \u2018Secure\u2019 option but beware you won\u2019t be able to see its content or edit the variable anymore, only give a new value or delete it.<\/p>\n\n\n\n<p>Once we have the variable set up we just need to use &#8216;$&#8217; to call our variable and redirect the echo output using the &#8216;&gt;&#8217; command within our pipeline. At your project root path, you must have a bitbucket-pipeline.yml:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>image: cypress\/base:20.11.0\n\ndefinitions:\n  steps:\n    - step: &amp;install-and-check\n        name: Installation and Static Analysis\n        caches:\n          - node\n        script:\n          - npm install\n        artifacts:\n          - node_modules\/**\n    - step: &amp;test\n        name: Run tests with coverage\n        caches:\n          - node\n        script:\n          - npm run test -- --coverage\n          - node_modules\/.bin\/cypress install --force\n          - echo $OUR_CREDENTIALS > .\/cypress\/properties\/credentials.ts\n          - node_modules\/.bin\/cypress run --component --env coverage=true\n          - node_modules\/.bin\/cypress run --env PLUGIN_ENABLED=false\n          ...<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>With this command we create a temporary file with the content of our variable. This way the credential file is gone after the execution of the pipeline:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo $VARIABLE > .\/your\/path\/filename.ts<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Deployment variables:<\/strong><\/h3>\n\n\n\n<p>Here at WATA Factory, to meet our clients&#8217; needs and deliver excellent quality, we require different environments, from dev stage to production without forgetting a much-needed testing environment. Different environments require different credentials or other kinds of flags. To solve this issue Bitbuckets offers deploymeny variables.<\/p>\n\n\n\n<p>These variables work the same way as repository variables, but you need to specify in the pipeline to which environment you are referring to.<\/p>\n\n\n\n<p>To create the deployment variable just:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to \u2018Repository settings &gt; Deployments\u2019<\/li>\n\n\n\n<li>Create a new environment under your desired section (test, staging or production)<\/li>\n\n\n\n<li>Add a new variable the same way we did in repository variables <\/li>\n\n\n\n<li>Specify in your step pipeline which environment you are referring to:<\/li>\n<\/ol>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>image: cypress\/base:20.11.0\n\ndefinitions:\n  steps:\n    - step: &amp;install-and-check\n        name: Installation and Static Analysis\n        caches:\n          - node\n        script:\n          - npm install\n        artifacts:\n          - node_modules\/**\n    - step: &amp;test\n        name: Run tests with coverage\n        caches:\n          - node\n        script:\n          - npm run test -- --coverage\n          - node_modules\/.bin\/cypress install --force\n          - echo $CREDENTIALS > .\/cypress\/properties\/credentials.ts\n          - node_modules\/.bin\/cypress run --component --env coverage=true\n          - node_modules\/.bin\/cypress run --env PLUGIN_ENABLED=false\n        artifacts:\n          - coverage\/**\n          - coverage-component\/**\n          - cypress-image-diff-html-report\/**\n          - cypress-image-diff-screenshots\/**\n    - step: &amp;sonar\n        name: SonarQube analysis\n        image: sonarsource\/sonar-scanner-cli:latest\n        script:\n          - sonar-scanner -Dsonar.projectKey=Gesa-Dashboard---Angular -Dsonar.host.url=$SONAR_URL -Dsonar.login=$SONAR_SECRET -Dsonar.javascript.lcov.reportPaths=coverage\/lcov.info,coverage-component\/lcov.info\n    - step: &amp;deploy\n        name: Deploy\n        script:\n          - npm run build -- --base-href \/dashboard_ang\/ --output-hashing=all --aot --configuration=$DEPLOYMENT_PROFILE\n          - ssh $FTP_USERNAME@$FTP_HOST -p222 'mkdir -p ~\/public_html\/dashboard_ang'\n          - scp -P 222 -r dist\/new_angular_poc\/browser\/* $FTP_USERNAME@$FTP_HOST:~\/public_html\/dashboard_ang\/\n\npipelines:\n  branches:\n    develop:\n      - step:\n          &lt;&lt;: *install-and-check\n      - step:\n          deployment: automatictesting\n          &lt;&lt;: *test\n      - step:\n          &lt;&lt;: *sonar\n  custom:\n    deploy-company1-dev:\n      - step:\n          &lt;&lt;: *install-and-check\n      - step:\n          name: Deploy to Company 1\n          deployment: company1\n          &lt;&lt;: *deploy\n    deploy-at:\n      - step:\n          &lt;&lt;: *install-and-check\n      - step:\n          name: Deploy to AT\n          deployment: automatictesting\n          &lt;&lt;: *deploy<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>As you can see, under the pipelines section we set the environment and in which step will be used. The name of the step is defined higher above.<\/p>\n\n\n\n<p>As an important warning: Naming a deployment variable with the same name as a repository variable will overwrite the value.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sensitive data like passwords, API tokens, and DB credentials are essential for project development and testing but should never be stored in plain text within the repository. In this section, we&#8217;ll explain how WATA Factory manages these secrets using Bitbucket&#8217;s built-in features: repository variables and deployment variables.<\/p>\n","protected":false},"author":39,"featured_media":10510,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[2,180],"tags":[],"class_list":["post-10498","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","category-technology"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.1.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to handle secrets in Bitbucket - WATA Factory<\/title>\n<meta name=\"description\" content=\"Discover how WATA Factory manages these secrets using Bitbucket&#039;s built-in features: repository and deployment variables.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to handle secrets in Bitbucket - WATA Factory\" \/>\n<meta property=\"og:description\" content=\"Discover how WATA Factory manages these secrets using Bitbucket&#039;s built-in features: repository and deployment variables.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/\" \/>\n<meta property=\"og:site_name\" content=\"WATA Factory\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/watafactory\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-09-24T08:30:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-30T07:05:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/wata-illustrations--scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1440\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Carlos Castillo M\u00e1rquez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@watafactory\" \/>\n<meta name=\"twitter:site\" content=\"@watafactory\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlos Castillo M\u00e1rquez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/\"},\"author\":{\"name\":\"Carlos Castillo M\u00e1rquez\",\"@id\":\"https:\/\/wata.es\/#\/schema\/person\/5874c8611b13bad33d70704c0508d91f\"},\"headline\":\"How to handle secrets in Bitbucket\",\"datePublished\":\"2024-09-24T08:30:00+00:00\",\"dateModified\":\"2024-09-30T07:05:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/\"},\"wordCount\":616,\"publisher\":{\"@id\":\"https:\/\/wata.es\/#organization\"},\"image\":{\"@id\":\"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/wata-illustrations--scaled.jpg\",\"articleSection\":[\"News\",\"Technology\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/\",\"url\":\"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/\",\"name\":\"How to handle secrets in Bitbucket - WATA Factory\",\"isPartOf\":{\"@id\":\"https:\/\/wata.es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/wata-illustrations--scaled.jpg\",\"datePublished\":\"2024-09-24T08:30:00+00:00\",\"dateModified\":\"2024-09-30T07:05:18+00:00\",\"description\":\"Discover how WATA Factory manages these secrets using Bitbucket's built-in features: repository and deployment variables.\",\"breadcrumb\":{\"@id\":\"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/#primaryimage\",\"url\":\"https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/wata-illustrations--scaled.jpg\",\"contentUrl\":\"https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/wata-illustrations--scaled.jpg\",\"width\":2560,\"height\":1440,\"caption\":\"secrets\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/wata.es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to handle secrets in Bitbucket\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wata.es\/#website\",\"url\":\"https:\/\/wata.es\/\",\"name\":\"WATA Factory\",\"description\":\"IT Consulting &amp; Outsourcing for your company\",\"publisher\":{\"@id\":\"https:\/\/wata.es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wata.es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/wata.es\/#organization\",\"name\":\"WATA Factory\",\"url\":\"https:\/\/wata.es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/wata.es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/wata.es\/wp-content\/uploads\/2019\/12\/logowata.png\",\"contentUrl\":\"https:\/\/wata.es\/wp-content\/uploads\/2019\/12\/logowata.png\",\"width\":688,\"height\":176,\"caption\":\"WATA Factory\"},\"image\":{\"@id\":\"https:\/\/wata.es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/watafactory\/\",\"https:\/\/x.com\/watafactory\",\"https:\/\/www.linkedin.com\/company\/wata\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/wata.es\/#\/schema\/person\/5874c8611b13bad33d70704c0508d91f\",\"name\":\"Carlos Castillo M\u00e1rquez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/wata.es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3bafc27b7caaa54e083f1b61cad8d8ca8a89ed6504b4a64a63223c7ea721428a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3bafc27b7caaa54e083f1b61cad8d8ca8a89ed6504b4a64a63223c7ea721428a?s=96&d=mm&r=g\",\"caption\":\"Carlos Castillo M\u00e1rquez\"},\"url\":\"https:\/\/wata.es\/author\/carlos\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to handle secrets in Bitbucket - WATA Factory","description":"Discover how WATA Factory manages these secrets using Bitbucket's built-in features: repository and deployment variables.","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:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/","og_locale":"en_US","og_type":"article","og_title":"How to handle secrets in Bitbucket - WATA Factory","og_description":"Discover how WATA Factory manages these secrets using Bitbucket's built-in features: repository and deployment variables.","og_url":"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/","og_site_name":"WATA Factory","article_publisher":"https:\/\/www.facebook.com\/watafactory\/","article_published_time":"2024-09-24T08:30:00+00:00","article_modified_time":"2024-09-30T07:05:18+00:00","og_image":[{"width":2560,"height":1440,"url":"https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/wata-illustrations--scaled.jpg","type":"image\/jpeg"}],"author":"Carlos Castillo M\u00e1rquez","twitter_card":"summary_large_image","twitter_creator":"@watafactory","twitter_site":"@watafactory","twitter_misc":{"Written by":"Carlos Castillo M\u00e1rquez","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/#article","isPartOf":{"@id":"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/"},"author":{"name":"Carlos Castillo M\u00e1rquez","@id":"https:\/\/wata.es\/#\/schema\/person\/5874c8611b13bad33d70704c0508d91f"},"headline":"How to handle secrets in Bitbucket","datePublished":"2024-09-24T08:30:00+00:00","dateModified":"2024-09-30T07:05:18+00:00","mainEntityOfPage":{"@id":"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/"},"wordCount":616,"publisher":{"@id":"https:\/\/wata.es\/#organization"},"image":{"@id":"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/#primaryimage"},"thumbnailUrl":"https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/wata-illustrations--scaled.jpg","articleSection":["News","Technology"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/","url":"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/","name":"How to handle secrets in Bitbucket - WATA Factory","isPartOf":{"@id":"https:\/\/wata.es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/#primaryimage"},"image":{"@id":"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/#primaryimage"},"thumbnailUrl":"https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/wata-illustrations--scaled.jpg","datePublished":"2024-09-24T08:30:00+00:00","dateModified":"2024-09-30T07:05:18+00:00","description":"Discover how WATA Factory manages these secrets using Bitbucket's built-in features: repository and deployment variables.","breadcrumb":{"@id":"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/#primaryimage","url":"https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/wata-illustrations--scaled.jpg","contentUrl":"https:\/\/wata.es\/wp-content\/uploads\/2024\/04\/wata-illustrations--scaled.jpg","width":2560,"height":1440,"caption":"secrets"},{"@type":"BreadcrumbList","@id":"https:\/\/wata.es\/how-to-handle-secrets-in-bitbucket\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wata.es\/"},{"@type":"ListItem","position":2,"name":"How to handle secrets in Bitbucket"}]},{"@type":"WebSite","@id":"https:\/\/wata.es\/#website","url":"https:\/\/wata.es\/","name":"WATA Factory","description":"IT Consulting &amp; Outsourcing for your company","publisher":{"@id":"https:\/\/wata.es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wata.es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/wata.es\/#organization","name":"WATA Factory","url":"https:\/\/wata.es\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wata.es\/#\/schema\/logo\/image\/","url":"https:\/\/wata.es\/wp-content\/uploads\/2019\/12\/logowata.png","contentUrl":"https:\/\/wata.es\/wp-content\/uploads\/2019\/12\/logowata.png","width":688,"height":176,"caption":"WATA Factory"},"image":{"@id":"https:\/\/wata.es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/watafactory\/","https:\/\/x.com\/watafactory","https:\/\/www.linkedin.com\/company\/wata\/"]},{"@type":"Person","@id":"https:\/\/wata.es\/#\/schema\/person\/5874c8611b13bad33d70704c0508d91f","name":"Carlos Castillo M\u00e1rquez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wata.es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3bafc27b7caaa54e083f1b61cad8d8ca8a89ed6504b4a64a63223c7ea721428a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3bafc27b7caaa54e083f1b61cad8d8ca8a89ed6504b4a64a63223c7ea721428a?s=96&d=mm&r=g","caption":"Carlos Castillo M\u00e1rquez"},"url":"https:\/\/wata.es\/author\/carlos\/"}]}},"_links":{"self":[{"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/posts\/10498","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/users\/39"}],"replies":[{"embeddable":true,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/comments?post=10498"}],"version-history":[{"count":5,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/posts\/10498\/revisions"}],"predecessor-version":[{"id":10593,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/posts\/10498\/revisions\/10593"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/media\/10510"}],"wp:attachment":[{"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/media?parent=10498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/categories?post=10498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/tags?post=10498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}