1 - 简介

Jenkins支持分布式多节点(Master-Slave)运行模式。

将安装Jenkins的主机作为Master节点,然后通过界面配置(或远端启动服务)来添加Slave节点。

在这种部署结构下,Master通常只充当管理者的角色,负责任务的调度,slave节点的管理,任务状态的收集等工作,具体的构建任务则会分配给slave节点。

一个Master节点理论上可以管理的slave节点数是没有上限的,但通常随着数量的增加,其性能以及稳定性就会有不同程度的下降,具体的影响则因Master硬件性能的高低而不同。

多节点(Master-Slave)部署通常以“Jenkins + Docker”的方式来部署,可以避免当测试用例变得海量以后可能会造成的一些问题。

通常规模较大,代码提交频繁(意味着构建频繁),自动化测试压力较大的项目都会采取这种部署结构。

2 - Slave节点

Slave节点实际上在其他主机上运行的agent进程,无需再安装完整的Jenkins服务。

通过建立双向的TCP/IP通信连接来实现启动Slave节点上的agent进程。

2.1 创建全新的Slave节点

系统管理--》节点管理--》新建节点



配置节点基本信息

2.2 关键配置说明

  1. 并发构建数
  2. - 该节点可以并行的最大任务数,建议和CPU内核数相等

  3. 远程工作目录
  4. - Salve节点的workplace目录,存放一些源码和文件

  5. 标签
  6. - 用来表示节点的群组,在配置任务时可以指定对应的群组

  7. 用法
  8. - 尽可能使用这个节点:被Jenkins随机调用
  9. - 只允许运行绑定到这台机器的job:当任务指定使用该节点时,才会使用,适合特定任务和资源紧张的场景

  10. 启动方式(Launch slave agents via SSH
  11. - Jenkins通过SSH方式自动连接到远端节点并传送agent启动文件slave.jar,然后通过java方式启动一个Slave agent进程
  12. - 无需对Slave节点进行任何配置操作,推荐使用。

  13. 启动方式(Launch agent via execution of command on the master
  14. - Master节点上通过SSH远程在Slave节点执行指令来启动agent程序
  15. - 需要事先将Slave.jar放到到Slave节点

  16. 启动方式(Launch agent via Java Web Start
  17. - 可以连接Windows Slave节点
  18. - 需要Slave节点主动连接到Master节点,适合设置没有主动访问权限的节点

  19. 可用性
  20. - 控制启动和停止该节点的模式

  21. 节点属性
  22. - 工具位置:如果设置Slave节点的工具执行路径,将覆盖全局配置的默认路径
  23. - 环境变量:如果设置Slave节点的同名环境变量,将覆盖系统全局变量的值

2.3 查看状态

系统管理--》节点管理

系统管理--》节点管理--》 laveNode-192.168.16.203

3 - Slave节点启动日志

系统管理--》节点管理--》SlaveNode-192.168.16.203---》日志

  1. SSHLauncher{host='192.168.16.203', port=22, credentialsId='e6ae3eab-fbe7-406e-bf12-8d13deaf308a', jvmOptions='', javaPath='', prefixStartSlaveCmd='', suffixStartSlaveCmd='', launchTimeoutSeconds=210, maxNumRetries=10, retryWaitTime=15, sshHostKeyVerificationStrategy=hudson.plugins.sshslaves.verifiers.NonVerifyingKeyVerificationStrategy, tcpNoDelay=true, trackCredentials=true}
  2. [12/04/19 09:06:38] [SSH] Opening SSH connection to 192.168.16.203:22.
  3. [12/04/19 09:06:38] [SSH] WARNING: SSH Host Keys are not being verified. Man-in-the-middle attacks may be possible against this connection.
  4. [12/04/19 09:06:38] [SSH] Authentication successful.
  5. [12/04/19 09:06:38] [SSH] The remote user's environment is:
  6. BASH=/usr/bin/bash
  7. BASHOPTS=cmdhist:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
  8. BASH_ALIASES=()
  9. BASH_ARGC=()
  10. BASH_ARGV=()
  11. BASH_CMDS=()
  12. BASH_EXECUTION_STRING=set
  13. BASH_LINENO=()
  14. BASH_SOURCE=()
  15. BASH_VERSINFO=([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")
  16. BASH_VERSION='4.2.46(2)-release'
  17. DIRSTACK=()
  18. EUID=0
  19. GROUPS=()
  20. HOME=/root
  21. HOSTNAME=node203
  22. HOSTTYPE=x86_64
  23. ID=0
  24. IFS=$' \t\n'
  25. LANG=en_US.UTF-8
  26. LESSOPEN='||/usr/bin/lesspipe.sh %s'
  27. LOGNAME=root
  28. MACHTYPE=x86_64-redhat-linux-gnu
  29. MAIL=/var/mail/root
  30. OPTERR=1
  31. OPTIND=1
  32. OSTYPE=linux-gnu
  33. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
  34. PIPESTATUS=([0]="0")
  35. PPID=3026
  36. PS4='+ '
  37. PWD=/root
  38. SHELL=/bin/bash
  39. SHELLOPTS=braceexpand:hashall:interactive-comments
  40. SHLVL=1
  41. SSH_CLIENT='192.168.16.102 53268 22'
  42. SSH_CONNECTION='192.168.16.102 53268 192.168.16.203 22'
  43. TERM=dumb
  44. UID=0
  45. USER=root
  46. XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share/:/var/lib/flatpak/exports/share/:/usr/local/share/:/usr/share/
  47. XDG_RUNTIME_DIR=/run/user/0
  48. XDG_SESSION_ID=12
  49. _=/etc/bashrc
  50. flatpak_dirs=/root/.local/share/flatpak/exports/share/:/var/lib/flatpak/exports/share/
  51. command_not_found_handle ()
  52. {
  53. local runcnf=1;
  54. local retval=127;
  55. [[ $- =~ i ]] || runcnf=0;
  56. [[ ! -S /run/dbus/system_bus_socket ]] && runcnf=0;
  57. [[ ! -x '/usr/libexec/packagekitd' ]] && runcnf=0;
  58. [[ -n ${COMP_CWORD-} ]] && runcnf=0;
  59. if [ $runcnf -eq 1 ]; then
  60. '/usr/libexec/pk-command-not-found' "$@";
  61. retval=$?;
  62. else
  63. if [[ -n "${BASH_VERSION-}" ]]; then
  64. printf 'bash: %scommand not found\n' "${1:+$1: }" 1>&2;
  65. fi;
  66. fi;
  67. return $retval
  68. }
  69. [12/04/19 09:06:38] [SSH] Checking java version of /jenkins-data/jdk/bin/java
  70. Couldn't figure out the Java version of /jenkins-data/jdk/bin/java
  71. bash: /jenkins-data/jdk/bin/java: No such file or directory

  72. [12/04/19 09:06:38] [SSH] Checking java version of java
  73. [12/04/19 09:06:39] [SSH] java -version returned 1.8.0_161.
  74. [12/04/19 09:06:39] [SSH] Starting sftp client.
  75. [12/04/19 09:06:39] [SSH] Remote file system root /jenkins-data does not exist. Will try to create it...
  76. [12/04/19 09:06:39] [SSH] Copying latest remoting.jar...
  77. [12/04/19 09:06:39] [SSH] Copied 872,440 bytes.
  78. Expanded the channel window size to 4MB
  79. [12/04/19 09:06:39] [SSH] Starting agent process: cd "/jenkins-data" && java -jar remoting.jar -workDir /jenkins-data -jar-cache /jenkins-data/remoting/jarCache
  80. Dec 04, 2019 5:06:41 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
  81. INFO: Using /jenkins-data/remoting as a remoting work directory
  82. Dec 04, 2019 5:06:41 PM org.jenkinsci.remoting.engine.WorkDirManager setupLogging
  83. INFO: Both error and output logs will be printed to /jenkins-data/remoting
  84. <===[JENKINS REMOTING CAPACITY]===>channel started
  85. Remoting version: 3.33
  86. This is a Unix agent
  87. Evacuated stdout
  88. Agent successfully connected and online

4 - 执行pipeline任务

4.1 建立流水线任务

4.2 构建

4.3 查看输出

控制台输出

查看Blue Ocean

Jenkins - 分布式构建的更多相关文章

  1. Jenkins分布式构建

    Jenkins分布式构建 有时,如果有一个实例,它是一个更大,更重的项目,需要定期编译生成在许多计算机上.并运行所有这些构建了中央台机器上可能不是最好的选择.在这种情况下,人们可以配置其他Jenkin ...

  2. Jenkins分布式构建与并行构建

    Jenkins分布式构建与并行构建 jenkins的架构 Jenkins采用的是"master+agent(slave)"架构.Jenkins master负责提供界面.处理HTT ...

  3. 06 . Jenkins分布式构建和Pipline

    Pipline简介 pipline 是帮助 Jenkins 实现 CI 到 CD 转变的重要角色,是运行在 jenkins 2.X 版本的核心插件,简单来 说 Pipline 就是一套运行于 Jenk ...

  4. 连载三:RobotFramework+Selenium+Jenkins分布式构建

    目标:Jenkins安装在服务器上,而使用Jenkins调用本机的脚本并在本机执行. 步骤: (1)需要有RobotFrameWork+Selenium的运行环境: python2.7,Robotfr ...

  5. Jenkins 分布式和并发构建

    1. 分布式构建 1.1 添加 linux 节点 1.2 添加 windows 节点 2. 并发构建 2.1 原理 2.2 示例:分别用 chrome/IE/Firefox 并行测试 1. 分布式构建 ...

  6. Jenkins分布式部署配置

    为什要使用Jenkins分布式? 利用jenkins分布式来构建job,当job量足够大的时候,可以有效的缓解jenkins-master上的压力,提高并行job数量, 减少job处于pending状 ...

  7. jenkins 分布式部署

    一 什么是Jenkins的分布式构建和部署 Jenkins的分布式构建,在Jenkins的配置中叫做节点,分布式构建能够让同一套代码或项目在不同的环境(如:Windows7\winxp和Linux系统 ...

  8. 基于Jenkins自动构建系统开发

    1  绪论 1.1 课题的研究背景 随着IT行业的不断发展,软件开发的复杂度也随着不断提高.与此同时,软件的开发团队也越来越庞大,而如何更好地协同整个团队进行高效准确的工作,从而确保软件开发的质量已经 ...

  9. Jenkins分布式与并行

    目录 一.简介 二.agent 通过JNLP协议增加agent 通过Swarm插件增加agent agent部分详解 三.agent放入Docker 使用Docker 配置Docker私有仓库 四.并 ...

随机推荐

  1. Flash完美跨域访问的方法

    先,你要确定以下几点,否则可能无法实现: 1.你要跨到哪个域,你必须能管理那域上文件,因为这里要放一个通行文件. 2.你的Flash如果只有SWF,那不一定能实现,因为有时,Flash的AS中,要加入 ...

  2. Spring AOP 知识点入门

    一.基本知识点 1.AOP概念 AOP(Aspect-Oriented Programming), 即 面向切面编程, 它与 OOP( Object-Oriented Programming, 面向对 ...

  3. Cookies and Custom Protocols

    https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/URLLoadingSystem/Cookiesa ...

  4. Object archiving

    https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/Arch ...

  5. Java Polymorphism

    Ability of an organism to take different shapes is polymorphism in bio world. A simplest definition ...

  6. Numpy | 13 位运算

    NumPy "bitwise_" 开头的函数是位运算函数.本章都是按二进制来操作的. NumPy 位运算包括以下几个函数: 函数 描述 bitwise_and 对数组元素执行位与操 ...

  7. podium micro-frontends 简单试用

    以下是一个简单的podium 试用,包含了layout 以及podlets,使用docker 运行 podium 主要包含了两大部分 podlets 片段服务 layouts 片段组合服务 环境准备 ...

  8. PHP常用的魔术方法及规则

    1. __construct 具有构造函数的类会在每次创建新对象时先调用此方法;初始化工作执行.2. __desstruct 对象的所有引用都被删除或者当对象被显式销毁时执行.3.__call()在对 ...

  9. SQL进阶-行转列&列转行

    一.行转列 1.建表 CREATE TABLE score( student_id ) NOT NULL COMMENT '学生编号' DEFAULT '', student_name ) NOT N ...

  10. Android编程权威指南笔记3:Android Fragment讲解与Android Studio中的依赖关系,如何添加依赖关系

    Android Fragment 当我在学习时,了解了Fragment词汇 Fragment是一种控制器对象,我就把所了解的简单说一下.activity可以派fragment完成一些任务,就是管理用户 ...