Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用 Docker 部署 Jenkins 代理(主从)控制服务器

使用 Docker 部署 Jenkins 代理(主从)控制服务器

作者头像
用户4235284
发布于 2023-10-14 08:13:04
发布于 2023-10-14 08:13:04
67100
代码可运行
举报
文章被收录于专栏:后端学习之道后端学习之道
运行总次数:0
代码可运行

自动化是 DevOps 的核心。各种自动化工具和技术真正实现了持续集成和持续交付的概念。这些工具多年来发展迅速,但似乎永远存在的一个名字是Jenkins

我们不会在这篇文章中讨论 CI-CD 的介绍性概念,也不会浪费时间展示 Jenkins 安装步骤。如果您是 Jenkins 的新手,可以查看官方安装文档以开始使用 Jenkins。因此,这篇文章的目的是讨论如何设置 Jenkins 控制器-代理架构(也称为主从架构)并解决执行过程中出现的一些问题。这是因为,这个过程可能很乏味,如果您有一段时间没有这样做,您可能会浪费几个小时。

[为什么选择 Jenkins 控制器-代理架构?

控制器(主)节点是 Jenkin 的大脑,它是 Jenkins 应用程序运行的地方。如果我们在控制器节点上做太多工作(或它崩溃),整个应用程序可能变得不可用。因此,我们希望 master 尽可能可用。这可以通过将工作委托给代理节点(从节点)来完成。因此,在 Jenkins Controller-Agent 架构中,作业由控制器调度并分配给代理。控制器还跟踪从服务器是否在线,检索它们对构建结果的响应,并将构建结果输出到控制台。因此,主节点更可用,因此我们的 Jenkins 服务器的整体性能使用这种设计得到了提高。

这种架构的另一个优点是我们只能在控制器节点上安装最少的工具集,而我们可以在代理节点上安装较重的工具(作业需要)。这使控制器保持轻量级,还允许我们根据应执行它们的代理来组织我们的作业。在上面的示例中,我们有一个 Jenkins 控制器和 4 个代理。每个代理都可以用于特定目的。

  • 例如,如果我们需要运行测试并构建基于 javascript 的应用程序的作业,我们可以限制这些作业在最左侧的代理上执行。
  • 同样,如果我们需要构建一些 .NET 应用程序,我们可以使用 Windows 主机设置 Jenkins 代理,并将这些作业限制在最右侧执行。
  • 此外,我们可以根据系统要求平衡负载来提高性能。比方说,我们正在为一个拥有数百个微服务的系统设置 CI-CD,其中使用基于 python 的堆栈编写的服务数量是任何其他堆栈的两倍。在这种情况下,我们可以安装两个基于 python 的工具的 Jenkins 代理,Jenkins 控制器可以平衡这两个代理之间的负载。

设置

第 1 步:启动 Jenkins 控制器(主)容器

我们可以使用官方的 jenkins docker 容器。这是您可以使用的示例 docker-compose 文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: '3.8'

services:
  jenkins_controller:
    image: jenkins/jenkins:lts-jdk11
    privileged: true
    user: root
    container_name: $CONTAINER_NAME
    ports:
      - 50001:8080
      - 50002:50000
    volumes:
      - $JENKINS_HOME:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock

现在,我们需要启动容器,并且需要为 Jenkins 控制器节点安装所需的工具。我们可以编写一个简单的 bash 脚本来实现这一点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
set -o nounset

JENKINS_CONTAINER_NAME=$1
JENKINS_HOME=`pwd`/jenkins/jenkins_home 
echo "JENKINS HOME: $JENKINS_HOME"

CONTAINER_NAME=$JENKINS_CONTAINER_NAME JENKINS_HOME=$JENKINS_HOME docker-compose -f docker-compose-controller.yaml up --build -d

sleep 10

# Here we have just installed git for our controller node, install as many tools as you require
docker exec $JENKINS_CONTAINER_NAME bash -c "apt-get update -y -q && apt-get upgrade -y -q && apt-get install -y -q git"
  • Jenkins 使用默认使用端口 8080 的 apache jetty,我们将主机的端口 50001 映射到容器的 8080。因此,输入http://host:50001应该会带您到 Jenkins web 仪表板。
  • 第一次检查容器日志管理员密码并创建一个新的管理员用户。
第 2 步:设置 Jenkins 代理(从属)

我们现在可以设置我们的代理。由于我们的 Jenkins 控制器将使用 SSH 与代理通信,因此我们需要生成 SSH 密钥。在这种情况下,Jenkins 主节点将充当 SSH 客户端,代理将充当 SSH 服务器。所以,我们需要相应地设置它。

  1. 生成密钥
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssh-keygen -t rsa -f jenkins_agent_1
  1. Goto Jenkins Dashboard > Manage Jenkins > Manage Credentials > 添加“系统”范围的凭据以启用 SSH 到 Jenkins Agent

系统凭证与全局凭证 系统:仅在 Jenkins 服务器上可用(jenkins 作业不可见) 全局:可在任何地方访问,包括 jenkins 作业

使用适当的值填写表格。这是一个示例, 用户名:jenkins # 我们希望以“jenkins”用户身份通过​​ ssh 进入代理,默认情况下该用户已存在于我们将使用的 jenkins-agent 容器中

ID:凭证的唯一ID,可用于引用凭证

私钥:SSH私钥文件内容(例如:jenkins_agent_1)

第 3 步:启动 Jenkins 代理(从属)容器

我们可以使用官方的 jenkins-ssh-agent docker 容器。这是您可以使用的示例 docker-compose 文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: '3.8'

services:
  jenkins_agent:
    image: jenkins/ssh-agent:jdk11
    privileged: true
    user: root
    container_name: $CONTAINER_NAME
    expose:
      - 22
    environment:
      - JENKINS_AGENT_SSH_PUBKEY=$JENKINS_AGENT_SSH_PUBKEY

请注意,我们必须设置环境变量JENKINS_AGENT_SSH_PUBKEY,在本例中我们从 bash 变量中进行设置。我们还需要在 Jenkins 代理中安装所需的工具。我们可以使用如下所示的简单 bash 脚本来实现所有这些,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
set -o nounset

JENKINS_CONTAINER_NAME=$1
JENKINS_AGENT_SSH_PUBKEY=$2

CONTAINER_NAME=$JENKINS_CONTAINER_NAME JENKINS_AGENT_SSH_PUBKEY=$JENKINS_AGENT_SSH_PUBKEY docker-compose -f docker-compose-agent.yaml up --build -d

sleep 10

# Here we have just installed tools that help us create a python virtual environment for our agent node, install as many tools as you require
docker exec $JENKINS_CONTAINER_NAME bash -c "apt-get update -y -q && apt-get upgrade -y -q && apt-get install -y -q git python3 python3-venv"
第 4 步:从 Jenkins 控制器配置代理

转到Jenkins 仪表板>管理 Jenkins >管理节点和云>新节点

使用适当的值填写表格。例如:,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*Name*: JenkinsAgent1

*NumberOfExecutors*: 1-2

*RemoteRootDirectory*: /home/jenkins/agent

*Labels*: linux, python # Space separated values, Can be useful to restrict jobs to run on a particular agent

*Usage*: Use this node as much as possible

*Launch Method*: Launch agents via SSH

*Host*: jenkins_agent # Agent's Hostname or IP to connect. (docker-compose service name if controller and agent is on the same machine)

*Credentials*: Select the Credential created in Step 2

*HostKeyVerificationStrategy*: Non verifying Verification Strategy

Launch Method > Advanced

*ConnectionTimeoutInSeconds*: 60  
*MaximumNumberOfRetries*: 10  
*SecondsToWaitBetweenRetries*: 15
第 5 步:创建作业并运行

现在,我们的代理应该被控制器发现,我们可以开始将我们的工作委托给代理。我们可以通过使用我们在创建代理时分配的标签来限制作业在特定代理上运行。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(一):Jenkins安装
2019/1/31更新,经过我一段时间的使用 建议大家的jenkins还是不要使用docker方式安装 建议大家的jenkins还是不要使用docker方式安装 建议大家的jenkins还是不要使用docker方式安装
乔达摩@嘿
2020/09/11
6300
Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(一):Jenkins安装
【甲方安全建设】DevOps初体验
临近春节,笔者经过半年北漂,期间辗转几家公司,同时也接触了几种不同岗位,也算对安全有了个初步的了解 目前在一家公司做安全开发相关实习,期间接触到一些比较有意思的技术,特此记录一下 之前写一些小的工具,无论是Bash、Python还是Java,都是顶多几百行的工作量,感觉不到开发的魅力,也没有开发和安全相结合的感觉,后面在公司有机会写一下完整的系统,以及后续的部署发布,体验到了创造的魅力(增删改查 hah)
没事就要多学习
2024/07/18
1270
【甲方安全建设】DevOps初体验
用上了 Jenkins,个人部署项目是真方便!
Jenkins 的主要作用是帮助你,把需要在本地机器完成的 Maven 构建、Docker 镜像发布、云服务器部署等系列动作全部集成在一个服务下。简化你的构建部署操作过程,因为 Jenkins 也被称为 CI&CD(持续集成&持续部署) 工具。提供超过 1000 个插件(Maven、Git、NodeJs)来支持构建、部署、自动化, 满足任何项目的需要。
小傅哥
2024/01/18
8630
用上了 Jenkins,个人部署项目是真方便!
DevOps整合Jenkins+k8s+CICD
基于现在的互联网现状,更推崇敏捷式开发,这样就导致项目的迭代速度更快,但是由于开发团队与运维团队的沟通问题,会导致新版本上线的时间成本很高。这又违背的敏捷式开发的最初的目的。 那么如果让开发团队和运维团队整合到成一个团队,协同应对一套软件呢?这就被称为DevOps。 DevOps,字面意思是Development &Operations的缩写,也就是开发&运维。 然字面意思只涉及到了开发团队和运维团队,其实QA测试团队也是参与其中的。 网上可以查看到DevOps的符号类似于一个无穷大的符号
IT运维技术圈
2022/10/24
2.9K1
Jenkins简介及Docker Compose部署
Jenkins是一个开源的自动化服务器,用于自动化构建、测试和部署软件项目。它提供了丰富的插件生态系统,支持各种编程语言和工具,使得软件开发流程更加高效和可靠。在本文中,我们将介绍Jenkins的基本概念,并展示如何使用Docker Compose轻松部署Jenkins服务。
修己xj
2023/11/13
7881
Jenkins简介及Docker Compose部署
Jenkins——使用Docker部署Jenkins详解
Jenkins完全启动时会打印一条Jenkins is fully up and running日志,看到此日志就可以开始配置Jenkins了。
思索
2024/08/16
8310
Jenkins——使用Docker部署Jenkins详解
还在手动部署jar包吗?快速掌握Jekins安装,教你使用jekins的实现持续交付
Jenkins Jenkins: 开源软件项目 基于Java开发的一种持续集成工具 用于监控持续重复的工作 旨在提供一个开放易用的软件平台, 便于软件的持续集成 基于Docker安装Jenkins 与持续集成中的GitLab Runner应该分布在不同的服务器上 创建工作目录: /usr/local/docker/jenkinschown -R 1000 /usr/local/docker/jenkins/dataversion: '3.1' services: jenkins: restart:
攻城狮Chova
2021/09/06
8660
还在手动部署jar包吗?快速掌握Jekins安装,教你使用jekins的实现持续交付
Jenkins Pipeline 流水线部署 Kubernetes 应用
虽然云原生时代有了Jenkins X、Drone、Tekton 这样的后起之秀,但 Jenkins 这样一个老牌的 CI/CD 工具仍是各大公司主流的使用方案。
DevOps时代
2021/12/05
1.7K0
Jenkins Pipeline 流水线部署 Kubernetes 应用
还在手动部署jar包吗?快速掌握Jenkins安装,教你使用Jenkins实现持续交付
Add post-build step:Send files or execute commands over SSH
攻城狮Chova
2022/01/22
8990
docker-compose 部署 Jenkins
vim docker-compose.ymlversion: "3.7" services: jenkins: image: jenkins:2.371-jdk11 container_name: jenkins hostname: jenkins restart: always user: root volumes: - /data/jenkins_home:/var/jenkins_home - /etc/localtime:/etc/loca
陳斯托洛夫斯記
2022/10/02
4070
Jenkins的两种安装方式
https://www.jenkins.io/doc/book/installing/linux/#red-hat-centos
崔哥
2022/12/05
5150
docker-compose 安装jenkins的正确姿势 实践笔记
docker-compose 安装jenkins的正确姿势 实践笔记 我使用Centos7 版本 1.创建jenkins的工作目录并赋予权限 2.先编写docker-compose.yml文件 3.启动: 4.查看密码并登陆 我使用Centos7 版本 1.创建jenkins的工作目录并赋予权限 mkdir -p /usr/local/jenkins/jenkins_home cd /usr/local/jenkins chown -R 1000 jenkins_home #把当前目录的拥有者赋值给uid
cookily
2020/09/11
2.3K0
docker-compose 安装jenkins的正确姿势 实践笔记
基于Jenkins的CICD
首次启动会因为数据卷data目录没有权限导致启动失败,设置data目录写权限(/usr/local/docker/jenkins_docker/data)
九转成圣
2024/04/10
1240
基于Jenkins的CICD
Docker(三) 通过gitlab部署CICD「建议收藏」
1)在上图红圈2部分设置需要跟踪变化的分支,根据上面的选项配置,可以是允许全部分支的变化触发构建,也可以设置只是具体的某些分支触发,这里示例是允许master分支上的变化触发构建。
全栈程序员站长
2022/08/15
2.7K0
Docker(三) 通过gitlab部署CICD「建议收藏」
docker+Jenkins+nginx实现前端自动部署详细教程
阿里云双11大促买了个服务器玩一玩,买之前很激动,买了之后,emmmm我用它能干嘛
winty
2021/12/08
2.7K0
docker+Jenkins+nginx实现前端自动部署详细教程
如何使用 Jenkins Pipeline 流水线优雅的部署 Kubernetes 应用
虽然云原生时代有了 JenkinsX[1]、Drone[2]、Tekton[3] 这样的后起之秀,但 Jenkins 这样一个老牌的 CI/CD 工具仍是各大公司主流的使用方案。比如我司的私有云产品打包发布就是用这老家伙完成的。然而传统的 Jenkins Slave 一主多从方式会存在一些痛点,比如:
iMike
2021/07/01
2.2K0
1.Jenkins入门基础介绍与持续化集成部署
Tips :个人理解 Jenkins 是一个调度平台,本身不需要处理任何事情,而是通过众多的插件来完成所有的工作;
全栈工程师修炼指南
2022/09/29
6.3K0
1.Jenkins入门基础介绍与持续化集成部署
Linux系统:第十四章:安装Docker,安装配置gitlab私有仓库以及jenkins自动化部署(图文)
#出现[Errno -1] 软件包与预期下载的不符。 建议:运行 yum --enablerepo=updates clean metadata正在尝试其它镜像。使用以下命令
Java廖志伟
2022/03/07
1.2K0
Linux系统:第十四章:安装Docker,安装配置gitlab私有仓库以及jenkins自动化部署(图文)
使用 Docker 全自动构建 Java 应用
我们会在 Docker 容器里运行 Jenkins,再使用 Jenkins 启动一个 Maven 容器,用来编译我们的代码,接着在另一个 Maven 容器中运行测试用例并生成制品(例如 jar 包),然后再在 Jenkins 容器中制作 Docker 镜像,最后将镜像推送到 Docker Hub。
LinuxSuRen
2019/12/23
1.5K0
使用 Docker 全自动构建 Java 应用
使用Docker安装Jenkins
Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 环境准备 腾讯云 硬件配置:2核4G 1M带宽。50G硬盘。 系统配置:CentOS 7.2 Docker安装 请移步查看:CentOS 7 安装 Docker 安装Jenkins 首先不直接从Docker Store上直接Pull Jenkins 的 Image 文件,因为待会需要进行dotnet core 的 Docker自动部署,需
晓晨
2018/06/22
1.7K0
推荐阅读
相关推荐
Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(一):Jenkins安装
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档