{"id":1176,"date":"2026-03-11T15:20:29","date_gmt":"2026-03-11T18:20:29","guid":{"rendered":"https:\/\/maurobernal.com.ar\/blog\/?p=1176"},"modified":"2026-03-11T20:02:24","modified_gmt":"2026-03-11T23:02:24","slug":"docker-cicd-pipeline-builds-reproducibles-github-actions","status":"publish","type":"post","link":"https:\/\/maurobernal.com.ar\/blog\/docker-cicd-pipeline-builds-reproducibles-github-actions\/","title":{"rendered":"Docker en mi pipeline de CI\/CD: builds reproducibles sin sorpresas"},"content":{"rendered":"\n<p class=\"intro-destacado\">Antes de Docker, nuestro pipeline de CI era una caja negra. \u00abFuncion\u00f3 en mi m\u00e1quina pero el build del CI fall\u00f3\u00bb. Despu\u00e9s de adoptar Docker en el pipeline, los builds fallidos por diferencias de entorno desaparecieron. Si buildea en CI, buildea en producci\u00f3n. Siempre.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Por qu\u00e9 Docker transforma el CI\/CD<\/h2>\n\n\n\n<p>El problema fundamental del CI tradicional: el servidor de CI tiene su propio entorno \u2014 versiones de runtime, librer\u00edas del sistema, variables \u2014 que puede diferir del de desarrollo y producci\u00f3n. Docker elimina ese problema: el build ocurre dentro de un contenedor con el entorno exacto que vos defin\u00eds en el Dockerfile.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">GitHub Actions: build, test y push a registry<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code\"># .github\/workflows\/ci-cd.yml\nname: Build, Test and Deploy\n\non:\n  push:\n    branches: [ main, develop ]\n  pull_request:\n    branches: [ main ]\n\nenv:\n  REGISTRY: ghcr.io\n  IMAGE_NAME: ${{ github.repository }}\n\njobs:\n  build-and-test:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions\/checkout@v4\n\n      - name: Set up Docker Buildx\n        uses: docker\/setup-buildx-action@v3\n\n      - name: Login to Container Registry\n        if: github.event_name != 'pull_request'\n        uses: docker\/login-action@v3\n        with:\n          registry: ${{ env.REGISTRY }}\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Extract metadata\n        id: meta\n        uses: docker\/metadata-action@v5\n        with:\n          images: ${{ env.REGISTRY }}\/${{ env.IMAGE_NAME }}\n          tags: |\n            type=ref,event=branch\n            type=semver,pattern={{version}}\n            type=sha,prefix=sha-\n\n      - name: Build and push\n        uses: docker\/build-push-action@v5\n        with:\n          context: .\n          push: ${{ github.event_name != 'pull_request' }}\n          tags: ${{ steps.meta.outputs.tags }}\n          labels: ${{ steps.meta.outputs.labels }}\n          cache-from: type=gha    # cache de GitHub Actions\n          cache-to: type=gha,mode=max\n\n  deploy:\n    needs: build-and-test\n    runs-on: ubuntu-latest\n    if: github.ref == 'refs\/heads\/main'\n    steps:\n      - name: Deploy to production\n        uses: appleboy\/ssh-action@v1\n        with:\n          host: ${{ secrets.PROD_HOST }}\n          username: ${{ secrets.PROD_USER }}\n          key: ${{ secrets.PROD_SSH_KEY }}\n          script: |\n            cd \/apps\/miapp\n            docker compose pull\n            docker compose up -d --no-build\n            docker image prune -f<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">GitLab CI: Docker-in-Docker<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code\"># .gitlab-ci.yml\nstages:\n  - build\n  - test\n  - push\n  - deploy\n\nvariables:\n  DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA\n  DOCKER_TLS_CERTDIR: \"\/certs\"\n\n# Build de la imagen\nbuild:\n  stage: build\n  image: docker:24\n  services:\n    - docker:24-dind\n  before_script:\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n  script:\n    - docker build --cache-from $CI_REGISTRY_IMAGE:latest -t $DOCKER_IMAGE .\n    - docker push $DOCKER_IMAGE\n\n# Tests dentro de contenedor\ntest:\n  stage: test\n  image: $DOCKER_IMAGE\n  script:\n    - dotnet test --no-build --verbosity normal\n\n# Tag como latest en main\npush-latest:\n  stage: push\n  image: docker:24\n  services:\n    - docker:24-dind\n  only:\n    - main\n  script:\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n    - docker pull $DOCKER_IMAGE\n    - docker tag $DOCKER_IMAGE $CI_REGISTRY_IMAGE:latest\n    - docker push $CI_REGISTRY_IMAGE:latest\n\n# Deploy al servidor\ndeploy-prod:\n  stage: deploy\n  only:\n    - main\n  script:\n    - ssh -i $SSH_KEY deploy@$PROD_HOST\n        \"cd \/apps\/miapp &&\n         docker compose pull &&\n         docker compose up -d --no-build\"<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Optimizar el tiempo de build con cache<\/h2>\n\n\n\n<p>El mayor costo de tiempo en un pipeline Docker es el build. Con la cach\u00e9 bien configurada, un build que tardaba 8 minutos puede bajar a 40 segundos si solo cambi\u00f3 el c\u00f3digo de la aplicaci\u00f3n.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code\"># La clave: copiar el .csproj ANTES que el c\u00f3digo\n# As\u00ed el restore se cachea hasta que cambien las dependencias\n\nFROM mcr.microsoft.com\/dotnet\/sdk:8.0 AS build\nWORKDIR \/src\n\n# Esta capa se cachea hasta que cambie el .csproj\nCOPY [\"MiApi.csproj\", \".\"]\nRUN dotnet restore\n\n# Esta capa se invalida con cada commit\nCOPY . .\nRUN dotnet publish -c Release -o \/app\/publish<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">El resultado en n\u00fameros<\/h2>\n\n\n\n<p>Antes de implementar este pipeline: builds inconsistentes, ~20 minutos por build, deploys manuales con SSH y comandos a mano. Despu\u00e9s: builds reproducibles, 2-4 minutos con cache (8 min cold), deploy autom\u00e1tico en cada push a main, rollback trivial con <code>docker compose up -d<\/code> apuntando a la imagen anterior. Menos stress, m\u00e1s confianza en cada deploy.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p><em>\u2190 <a href=\"https:\/\/maurobernal.com.ar\/blog\/blog\/kubernetes\/docker-entornos-desarrollo-consistentes-dev-prod\/\">Art\u00edculo anterior: Entornos consistentes<\/a> | <strong>Serie Docker Completo<\/strong> | Pr\u00f3ximo: Microservicios \u2192<\/em><\/p>\n\n\n<hr class=\"wp-block-separator\"\/>\n<p><em>\u2190 <a href=\"https:\/\/maurobernal.com.ar\/blog\/blog\/kubernetes\/docker-entornos-desarrollo-consistentes-dev-prod\/\">Art\u00edculo anterior: C\u00f3mo uso Docker para tener el mismo entorno en dev, test y producci\u00f3n<\/a> | <strong>Serie Docker Completo<\/strong> | Pr\u00f3ximo: <a href=\"https:\/\/maurobernal.com.ar\/blog\/blog\/kubernetes\/microservicios-con-docker-arquitectura-practica\/\">Microservicios con Docker: lo que aprend\u00ed armando mi primera arquitectura \u2192<\/a><\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>C\u00f3mo integrar Docker en GitHub Actions y GitLab CI para builds reproducibles, cache de capas optimizado y deploy autom\u00e1tico. De 20 minutos inconsistentes a 2 minutos predecibles.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[233],"tags":[263,242,240,265,215,264],"class_list":["post-1176","post","type-post","status-publish","format-standard","hentry","category-kubernetes","tag-ci-cd","tag-devops","tag-docker","tag-github-actions","tag-linux","tag-pipeline"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Docker en mi pipeline de CI\/CD: builds reproducibles sin sorpresas &#183; devops Mauro Bernal<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/maurobernal.com.ar\/blog\/docker-cicd-pipeline-builds-reproducibles-github-actions\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker en mi pipeline de CI\/CD: builds reproducibles sin sorpresas &#183; devops Mauro Bernal\" \/>\n<meta property=\"og:description\" content=\"C\u00f3mo integrar Docker en GitHub Actions y GitLab CI para builds reproducibles, cache de capas optimizado y deploy autom\u00e1tico. De 20 minutos inconsistentes a 2 minutos predecibles.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/maurobernal.com.ar\/blog\/docker-cicd-pipeline-builds-reproducibles-github-actions\/\" \/>\n<meta property=\"og:site_name\" content=\"devops Mauro Bernal\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-11T18:20:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-11T23:02:24+00:00\" \/>\n<meta name=\"author\" content=\"Mauro Bernal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:site\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mauro Bernal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minuto\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-cicd-pipeline-builds-reproducibles-github-actions\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-cicd-pipeline-builds-reproducibles-github-actions\\\/\"},\"author\":{\"name\":\"Mauro Bernal\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"headline\":\"Docker en mi pipeline de CI\\\/CD: builds reproducibles sin sorpresas\",\"datePublished\":\"2026-03-11T18:20:29+00:00\",\"dateModified\":\"2026-03-11T23:02:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-cicd-pipeline-builds-reproducibles-github-actions\\\/\"},\"wordCount\":273,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"keywords\":[\"ci-cd\",\"devops\",\"docker\",\"github-actions\",\"linux\",\"pipeline\"],\"articleSection\":[\"Kubernetes\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-cicd-pipeline-builds-reproducibles-github-actions\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-cicd-pipeline-builds-reproducibles-github-actions\\\/\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-cicd-pipeline-builds-reproducibles-github-actions\\\/\",\"name\":\"Docker en mi pipeline de CI\\\/CD: builds reproducibles sin sorpresas &#183; devops Mauro Bernal\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\"},\"datePublished\":\"2026-03-11T18:20:29+00:00\",\"dateModified\":\"2026-03-11T23:02:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-cicd-pipeline-builds-reproducibles-github-actions\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-cicd-pipeline-builds-reproducibles-github-actions\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/docker-cicd-pipeline-builds-reproducibles-github-actions\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker en mi pipeline de CI\\\/CD: builds reproducibles sin sorpresas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\",\"name\":\"devops Mauro Bernal\",\"description\":\"Cuando tu trabajo es hacer que las cosas funcionen bien...\",\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\",\"name\":\"Mauro Bernal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"width\":1740,\"height\":1740,\"caption\":\"Mauro Bernal\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\"},\"description\":\"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman\",\"sameAs\":[\"https:\\\/\\\/maurobernal.com.ar\",\"https:\\\/\\\/x.com\\\/_maurobernal\",\"https:\\\/\\\/youtube.com\\\/maurobernal\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Docker en mi pipeline de CI\/CD: builds reproducibles sin sorpresas &#183; devops Mauro Bernal","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:\/\/maurobernal.com.ar\/blog\/docker-cicd-pipeline-builds-reproducibles-github-actions\/","og_locale":"es_ES","og_type":"article","og_title":"Docker en mi pipeline de CI\/CD: builds reproducibles sin sorpresas &#183; devops Mauro Bernal","og_description":"C\u00f3mo integrar Docker en GitHub Actions y GitLab CI para builds reproducibles, cache de capas optimizado y deploy autom\u00e1tico. De 20 minutos inconsistentes a 2 minutos predecibles.","og_url":"https:\/\/maurobernal.com.ar\/blog\/docker-cicd-pipeline-builds-reproducibles-github-actions\/","og_site_name":"devops Mauro Bernal","article_published_time":"2026-03-11T18:20:29+00:00","article_modified_time":"2026-03-11T23:02:24+00:00","author":"Mauro Bernal","twitter_card":"summary_large_image","twitter_creator":"@_maurobernal","twitter_site":"@_maurobernal","twitter_misc":{"Escrito por":"Mauro Bernal","Tiempo de lectura":"1 minuto"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/maurobernal.com.ar\/blog\/docker-cicd-pipeline-builds-reproducibles-github-actions\/#article","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/docker-cicd-pipeline-builds-reproducibles-github-actions\/"},"author":{"name":"Mauro Bernal","@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"headline":"Docker en mi pipeline de CI\/CD: builds reproducibles sin sorpresas","datePublished":"2026-03-11T18:20:29+00:00","dateModified":"2026-03-11T23:02:24+00:00","mainEntityOfPage":{"@id":"https:\/\/maurobernal.com.ar\/blog\/docker-cicd-pipeline-builds-reproducibles-github-actions\/"},"wordCount":273,"commentCount":0,"publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"keywords":["ci-cd","devops","docker","github-actions","linux","pipeline"],"articleSection":["Kubernetes"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/maurobernal.com.ar\/blog\/docker-cicd-pipeline-builds-reproducibles-github-actions\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/maurobernal.com.ar\/blog\/docker-cicd-pipeline-builds-reproducibles-github-actions\/","url":"https:\/\/maurobernal.com.ar\/blog\/docker-cicd-pipeline-builds-reproducibles-github-actions\/","name":"Docker en mi pipeline de CI\/CD: builds reproducibles sin sorpresas &#183; devops Mauro Bernal","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#website"},"datePublished":"2026-03-11T18:20:29+00:00","dateModified":"2026-03-11T23:02:24+00:00","breadcrumb":{"@id":"https:\/\/maurobernal.com.ar\/blog\/docker-cicd-pipeline-builds-reproducibles-github-actions\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/maurobernal.com.ar\/blog\/docker-cicd-pipeline-builds-reproducibles-github-actions\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/maurobernal.com.ar\/blog\/docker-cicd-pipeline-builds-reproducibles-github-actions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/maurobernal.com.ar\/blog\/"},{"@type":"ListItem","position":2,"name":"Docker en mi pipeline de CI\/CD: builds reproducibles sin sorpresas"}]},{"@type":"WebSite","@id":"https:\/\/maurobernal.com.ar\/blog\/#website","url":"https:\/\/maurobernal.com.ar\/blog\/","name":"devops Mauro Bernal","description":"Cuando tu trabajo es hacer que las cosas funcionen bien...","publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/maurobernal.com.ar\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":["Person","Organization"],"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283","name":"Mauro Bernal","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","url":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","contentUrl":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","width":1740,"height":1740,"caption":"Mauro Bernal"},"logo":{"@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1"},"description":"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman","sameAs":["https:\/\/maurobernal.com.ar","https:\/\/x.com\/_maurobernal","https:\/\/youtube.com\/maurobernal"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1176","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/comments?post=1176"}],"version-history":[{"count":4,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1176\/revisions"}],"predecessor-version":[{"id":1251,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1176\/revisions\/1251"}],"wp:attachment":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/media?parent=1176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/categories?post=1176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/tags?post=1176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}