[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-ci-cd-kakova-arkhitektura-jenkins-master-agent":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":22,"progress":23,"seo":24},195,"kakova-arkhitektura-jenkins-master-agent",6,"ci-cd","CI\u002FCD","🔄","Какова архитектура Jenkins (master\u002Fagent)","**Архитектура Jenkins master\u002Fagent** — это распределенная модель, в которой центральный сервер (master) координирует выполнение задач, а рабочие узлы (agents) непосредственно выполняют сборки.\n\nАналогия: master — это диспетчер такси, который принимает заказы и распределяет их, а agents — это водители, которые выполняют поездки. Диспетчер знает, какой водитель свободен и какой маршрут ему назначить.\n\n### Jenkins Master (Controller)\n\n- Основной сервер Jenkins.\n- Управляет конфигурацией, планированием и распределением задач.\n- Хранит настройки, историю сборок, результаты.\n- Предоставляет веб-интерфейс и REST API.\n- Может выполнять сборки самостоятельно, но это **не рекомендуется в production** (нагрузка на master снижает его стабильность).\n\n### Jenkins Agent (Node)\n\n- Рабочая машина, на которой выполняются сборки.\n- Подключается к master и получает задания.\n- Может иметь специфичные инструменты (JDK, Maven, Docker и т.д.).\n- Помечается **метками (labels)** для маршрутизации задач (например, `java17`, `docker`, `linux`).\n\n### Способы подключения агентов\n\n| Способ | Описание | Когда использовать |\n|---|---|---|\n| **SSH** | Master подключается к агенту по SSH | Linux-агенты, постоянные машины |\n| **JNLP** | Агент сам подключается к master через Java Web Start | Windows-агенты, агенты за NAT |\n| **Docker** | Агент запускается как Docker-контейнер на время сборки | Изолированные одноразовые сборки |\n| **Kubernetes** | Агенты создаются как Pod в кластере Kubernetes | Облачная\u002Fконтейнерная инфраструктура |\n\n### Пример конфигурации агента в Jenkinsfile\n\n```groovy\npipeline {\n    agent {\n        label 'java17-maven'  \u002F\u002F Сборка выполняется на агенте с данной меткой\n    }\n    stages {\n        stage('Build') {\n            steps {\n                sh 'java -version'\n                sh 'mvn --version'\n            }\n        }\n    }\n}\n```\n\n### Пример с Docker-агентом\n\n```groovy\npipeline {\n    agent {\n        docker {\n            image 'maven:3.9-eclipse-temurin-17'\n            args '-v $HOME\u002F.m2:\u002Froot\u002F.m2'  \u002F\u002F Кэширование зависимостей Maven\n        }\n    }\n    stages {\n        stage('Build') {\n            steps {\n                sh 'mvn clean package'\n            }\n        }\n    }\n}\n```\n\n### Пример с Kubernetes-агентом\n\n\u003Cdetails>\n\u003Csummary>Jenkinsfile с Kubernetes Pod\u003C\u002Fsummary>\n\n```groovy\npipeline {\n    agent {\n        kubernetes {\n            yaml '''\n                apiVersion: v1\n                kind: Pod\n                spec:\n                  containers:\n                  - name: maven\n                    image: maven:3.9-eclipse-temurin-17\n                    command: ['sleep']\n                    args: ['infinity']\n                  - name: docker\n                    image: docker:24-dind\n                    securityContext:\n                      privileged: true\n            '''\n        }\n    }\n    stages {\n        stage('Build') {\n            steps {\n                container('maven') {\n                    sh 'mvn clean package'\n                }\n            }\n        }\n        stage('Docker Build') {\n            steps {\n                container('docker') {\n                    sh 'docker build -t my-app .'\n                }\n            }\n        }\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Вывод\n\nАрхитектура master\u002Fagent позволяет масштабировать Jenkins горизонтально: master занимается координацией, а вычислительная нагрузка распределяется между агентами. В production-среде рекомендуется запрещать сборки на master и использовать эфемерные агенты (Docker\u002FKubernetes) для изоляции и воспроизводимости.\n\n> **На собеседовании:** часто спрашивают, зачем нужны агенты и как выбрать способ подключения. Упомяните преимущества эфемерных агентов: чистая среда для каждой сборки, отсутствие «грязного» состояния и лучшая безопасность.","","middle",[15,16,17,18,19,20,21],"kubernetes","agent","jenkins","cicd","архитектура","docker","master",[],null,{"title":25,"description":26,"ogTitle":27,"ogDescription":28,"keywords":29,"schemaAnswer":35,"featuredSnippetReady":36},"Архитектура Jenkins master\u002Fagent — Controller и Node — Gymterview","Jenkins Master управляет конфигурацией и распределяет задачи. Agent выполняет сборки. Подключение через SSH, JNLP, Docker, Kubernetes. Примеры Jenkinsfile.","Архитектура Jenkins master\u002Fagent — как устроена распределённая сборка","Master управляет и распределяет задачи. Agent выполняет сборки. Подключение: SSH, JNLP, Docker, Kubernetes. Агенты помечаются labels.",[30,31,32,33,34],"Jenkins архитектура","Jenkins master agent","Jenkins Controller Node","Jenkins Docker agent","Jenkins Kubernetes","Jenkins использует распределённую архитектуру master\u002Fagent. Master (Controller) управляет конфигурацией, планированием и распределением задач. Agent (Node) — рабочая машина для выполнения сборок. Способы подключения агентов: SSH, JNLP, Docker-контейнер, Kubernetes Pod.",true]