{"id":554,"date":"2026-08-17T08:17:40","date_gmt":"2026-08-17T06:17:40","guid":{"rendered":"https:\/\/proxyseo.es\/blog\/554-2\/"},"modified":"2026-08-17T08:17:42","modified_gmt":"2026-08-17T06:17:42","slug":"proxies-en-jenkins-y-gitlab-ci","status":"publish","type":"post","link":"https:\/\/proxyseo.es\/blog\/proxies-en-jenkins-y-gitlab-ci\/","title":{"rendered":"Proxies en Jenkins y GitLab CI"},"content":{"rendered":"<h2>Por qu\u00e9 necesitas proxies en Jenkins y GitLab CI<\/h2>\n<p>Si has trabajado un tiempo en DevOps, sabes que la red no es siempre un lugar amable. Las direcciones IP de los servidores de Jenkins o GitLab terminan en listas negras. O simplemente te topan con un muro de rate limiting cuando menos lo necesitas. Ah\u00ed es donde los <strong>proxies en Jenkins y GitLab<\/strong> dejan de ser un accesorio y pasan a ser salvavidas.<\/p>\n<p>Enrutar el tr\u00e1fico por un proxy no solo esconde tu IP real. Te permite cambiar de ubicaci\u00f3n al instante. Piensa en un profesional de SEO verificando rankings en Madrid, o en un desarrollador probando geo-restricciones. Si usas proxies residenciales o dedicados decentes \u2014los de <strong>ProxySEO<\/strong>, por ejemplo\u2014, el tr\u00e1fico parece org\u00e1nico. Y lo mejor: adi\u00f3s a esos CAPTCHAs que detienen tus scripts a las tres de la ma\u00f1ana.<\/p>\n<h2>Configuraci\u00f3n de proxies en Jenkins paso a paso<\/h2>\n<p>Jenkins es robusto, s\u00ed, pero a veces arisco con la red. Para meter un proxy en la ecuaci\u00f3n tienes dos caminos: lo configuras a nivel de sistema (afecta a todo el master y los agentes) o lo metes directo en el <em>Jenkinsfile<\/em>.<\/p>\n<h3>1. Configuraci\u00f3n a nivel de sistema en Jenkins<\/h3>\n<p>Este m\u00e9todo es ideal si todo debe salir por la misma puerta. Sirve para actualizar plugins o clonar repositorios detr\u00e1s de un proxy corporativo, y tambi\u00e9n para nuestras tareas de scraping.<\/p>\n<ol>\n<li>Ve a <strong>Manage Jenkins<\/strong> > <strong>Manage Plugins<\/strong> > <strong>Advanced<\/strong>.<\/li>\n<li>En la secci\u00f3n <strong>HTTP Proxy Configuration<\/strong>, pon el servidor y el puerto.<\/li>\n<li>Si el proveedor pide usuario y contrase\u00f1a (lo normal en servicios de calidad), introd\u00facelos ah\u00ed.<\/li>\n<\/ol>\n<p>Ojo con esto. Si usas <strong>ProxySEO<\/strong>, te dar\u00e1n credenciales \u00fanicas. Jenkins las guarda en texto claro a menos que uses su gestor de credenciales. Hazlo.<\/p>\n<h3>2. Configuraci\u00f3n dentro de un Pipeline (Jenkinsfile)<\/h3>\n<p>Para un control m\u00e1s fino, mejor definirlo en el c\u00f3digo. As\u00ed unos trabajos usan el proxy y otros siguen saliendo directos. Imagina que tienes un script en Python.<\/p>\n<div class=\"result-box\">\n<em>Ejemplo de configuraci\u00f3n en Jenkinsfile:<\/em><br \/>\npipeline {<br \/>\n&nbsp;&nbsp;agent any<br \/>\n&nbsp;&nbsp;environment {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;PROXY_HOST = &#8216;192.0.2.10&#8217;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;PROXY_PORT = &#8216;8080&#8217;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;PROXY_USER = &#8216;mi_usuario_proxyseo&#8217;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;PROXY_PASS = &#8216;mi_contrase\u00f1a_segura&#8217;<br \/>\n&nbsp;&nbsp;}<br \/>\n&nbsp;&nbsp;stages {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;stage(&#8216;Scrape with Proxy&#8217;) {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;steps {<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sh &#8216;export http_proxy=http:\/\/$PROXY_USER:$PROXY_PASS@$PROXY_HOST:$PROXY_PORT&#8217;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sh &#8216;export https_proxy=http:\/\/$PROXY_USER:$PROXY_PASS@$PROXY_HOST:$PROXY_PORT&#8217;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sh &#8216;python3 scraper.py&#8217;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;}<br \/>\n&nbsp;&nbsp;}<br \/>\n}\n<\/div>\n<p>Al exportar esas variables, herramientas como <em>curl<\/em>, <em>wget<\/em> o librer\u00edas tipo <em>Requests<\/em> de Python cogen el tunnel autom\u00e1ticamente.<\/p>\n<h2>Integraci\u00f3n de proxies en GitLab CI<\/h2>\n<p>En GitLab CI\/CD la cosa cambia un poco. Todo vive en el archivo <em>.gitlab-ci.yml<\/em>. La l\u00f3gica de <strong>proxies en Jenkins y GitLab<\/strong> es parecida, pero la sintaxis y d\u00f3nde guardas las claves var\u00edan.<\/p>\n<h3>Definici\u00f3n de variables en GitLab CI<\/h3>\n<p>Por amor a la seguridad, no escribas las credenciales directo en el YAML. Usa las variables que ofrece GitLab.<\/p>\n<ol>\n<li>Ve a <strong>Settings<\/strong> > <strong>CI\/CD<\/strong> > <strong>Variables<\/strong>.<\/li>\n<li>Crea las variables para <strong>PROXY_HOST<\/strong>, <strong>PORT<\/strong>, <strong>USER<\/strong> y <strong>PASS<\/strong>. Marca \u00abMask variable\u00bb para que no se vean en los logs.<\/li>\n<\/ol>\n<h3>Ejemplo pr\u00e1ctico de Pipeline con Proxy<\/h3>\n<p>Montemos un job que usa <strong>curl<\/strong> a trav\u00e9s del proxy para ver si una web responde, fingiendo que visitamos desde una IP espa\u00f1ola:<\/p>\n<div class=\"result-box\">\n<em>Ejemplo de .gitlab-ci.yml:<\/em><br \/>\nstages:<br \/>\n&nbsp;&nbsp;&#8211; test<\/p>\n<p>verificar_web_es:<br \/>\n&nbsp;&nbsp;stage: test<br \/>\n&nbsp;&nbsp;image: alpine:latest<br \/>\n&nbsp;&nbsp;before_script:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&#8211; apk add &#8211;no-cache curl<br \/>\n&nbsp;&nbsp;script:<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&#8211; export http_proxy=\u00bbhttp:\/\/${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:${PROXY_PORT}\u00bb<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&#8211; export https_proxy=\u00bbhttp:\/\/${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:${PROXY_PORT}\u00bb<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&#8211; curl -I https:\/\/www.google.com<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&#8211; echo \u00abIP utilizada: $(curl -s https:\/\/api.ipify.org)\u00bb\n<\/div>\n<p>Cuando corra esto, <em>api.ipify.org<\/em> deber\u00eda devolverte la IP del proxy. Si usas <strong>ProxySEO<\/strong>, esa IP ser\u00e1 espa\u00f1ola y dedicada. Ideal para auditor\u00edas SEO locales.<\/p>\n<h2>Proxies y Agentes de IA: Soporte MCP<\/h2>\n<p>Con la fiebre de la IA Generativa, cada vez m\u00e1s gente mete agentes en los pipelines para analizar c\u00f3digo o buscar info. Estos agentes necesitan salir a la red. Aqu\u00ed entra en juego el soporte para <strong>Model Context Protocol (MCP)<\/strong>.<\/p>\n<p>Si configuras un servidor MCP en tu pipeline, puedes inyectar la configuraci\u00f3n del proxy en el contexto del agente. As\u00ed navega y busca sin que un firewall lo corte. Proxies SOCKSv5 o HTTPs con baja latencia son clave aqu\u00ed. Piensa en procesos de \u00abchain-of-thought\u00bb largos: necesitan hacer muchas peticiones seguidas sin fallar.<\/p>\n<p>Aseg\u00farate de que las variables <em>HTTP_PROXY<\/em> y <em>HTTPS_PROXY<\/em> est\u00e9n cargadas antes de arrancar el servidor MCP en tu script.<\/p>\n<h2>Mejores pr\u00e1cticas y seguridad<\/h2>\n<p>Manejar <strong>proxies en Jenkins y GitLab<\/strong> requiere cabeza. Los pipelines se llenan de logs y es f\u00e1cil dejar una clave al descubierto si no tienes cuidado.<\/p>\n<ul>\n<li><strong>Enmascaramiento:<\/strong> Configura Jenkins y GitLab para que oculten las contrase\u00f1as en la consola. Si la contrase\u00f1a sale en el log, tu proxy est\u00e1 comprometido.<\/li>\n<li><strong>Rotaci\u00f3n de IPs:<\/strong> Para scraping intensivo, no te f\u00edes de una sola IP. Servicios como <strong>ProxySEO<\/strong> ofrecen pools, pero distribuir la carga o usar sesiones rotativas es buena pr\u00e1ctica si tu licencia lo permite.<\/li>\n<li><strong>Manejo de errores:<\/strong> Pon un <em>retry<\/em> en tus scripts. Los proxies, aunque sean dedicados, a veces se caen. Reintentar te ahorrar\u00e1 m\u00e1s de un dolor de cabeza.<\/li>\n<li><strong>Tr\u00e1fico ilimitado:<\/strong> Evita proveedores que cobren por GB si tus pipelines bajan muchas im\u00e1genes o datos. El tr\u00e1fico ilimitado optimiza los costes.<\/li>\n<\/ul>\n<div class=\"faq-block\">\n<h3>Preguntas Frecuentes<\/h3>\n<p><strong>\u00bfPuedo usar proxies SOCKSv5 en Jenkins?<\/strong><br \/>\nS\u00ed, se puede. La configuraci\u00f3n nativa de Jenkins es m\u00e1s amigable con HTTP\/HTTPS, pero para SOCKSv5 es mejor tirar de variables de entorno o herramientas como <em>proxychains<\/em> en el script.<\/p>\n<p><strong>\u00bfQu\u00e9 pasa si el proxy es lento?<\/strong><br \/>\nSe convertir\u00e1 en el cuello de botella de tu pipeline. Por eso en producci\u00f3n se recomiendan dedicados y de baja latencia, como las IPs espa\u00f1olas de ProxySEO. Necesitas estabilidad y velocidad.<\/p>\n<\/div>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Integrar proxies en tu CI no es solo para esconderse. Es una t\u00e9cnica de ingenier\u00eda necesaria para que tus automatizaciones sean fiables. Quieras proteger la IP de tu servidor o hacer que tus bots parezcan usuarios reales en Espa\u00f1a, configurar <strong>proxies en Jenkins y GitLab<\/strong> es la v\u00eda.<\/p>\n<p>La calidad del proxy marca la diferencia. Lo gratis o compartido suele terminar en fallos y tiempos muertos. Para entornos serios, usa HTTPs y SOCKSv5 dedicados y an\u00f3nimos. Y si ya est\u00e1s metiendo agentes IA con soporte MCP, una infraestructura de proxies decente no es opcional, es obligatoria.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Por qu\u00e9 necesitas proxies en Jenkins y GitLab CI Si has trabajado un tiempo en DevOps, sabes que la red no es siempre un lugar amable. Las direcciones IP de&#8230;<\/p>\n","protected":false},"author":1,"featured_media":556,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-554","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-automatizacion"],"_links":{"self":[{"href":"https:\/\/proxyseo.es\/blog\/wp-json\/wp\/v2\/posts\/554","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/proxyseo.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/proxyseo.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/proxyseo.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/proxyseo.es\/blog\/wp-json\/wp\/v2\/comments?post=554"}],"version-history":[{"count":1,"href":"https:\/\/proxyseo.es\/blog\/wp-json\/wp\/v2\/posts\/554\/revisions"}],"predecessor-version":[{"id":555,"href":"https:\/\/proxyseo.es\/blog\/wp-json\/wp\/v2\/posts\/554\/revisions\/555"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/proxyseo.es\/blog\/wp-json\/wp\/v2\/media\/556"}],"wp:attachment":[{"href":"https:\/\/proxyseo.es\/blog\/wp-json\/wp\/v2\/media?parent=554"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/proxyseo.es\/blog\/wp-json\/wp\/v2\/categories?post=554"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/proxyseo.es\/blog\/wp-json\/wp\/v2\/tags?post=554"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}