Jenkins做持续集成非常好用,应用越来越多,单机资源不够使用,是时候研究下分布式使用了。

目的

提交代码到git,让jenkins自动拉取代码,打包成jar,然后分发到另一台机器,并允许jar。
假设主节点为A 从节点为B,A上部署了jenkins

前提

  • 机器都安装jdk
  1. centos安装open-jdk8
  2. yum install -y java-1.8.0-openjdk-devel

slave节点为linux平台

1. 节点配置
  • 系统管理—》管理节点—》新建节点
  • 启动方法: Linux 选择 Launch slave agents via SSH
  • Host Key Verification Strategy: Non verifying Verification Strategy(对应Credentials为用户名/密码方式)
    Jenkins部署jar文件到节点服务器 - 图1
  • master节点的配置可以在节点管理中或者在系统管理—》系统设置
  • 用法:
    • 尽可能的使用这个节点,默认的,表示job会随机的使用可以使用的节点
    • 只允许运行绑定到这台机器的Job,表示job会到指定机器运行
  1. 配置验证方式
  2. A机器执行 ssh-keygen 然后一直回车
  3. 执行 ssh-copy-id 用户名@ip地址
  4. ssh-copy-id root@123.4.4.22
  5. 使得A机器可以访问B机器
  6. 然后把A机器的私钥添加到 验证管理

高级配置

比如修改java path路径
Jenkins部署jar文件到节点服务器 - 图2
Jenkins部署jar文件到节点服务器 - 图3
Jenkins部署jar文件到节点服务器 - 图4

2. 节点运行结果
  • 大致步骤: 通过节点配置的credentials连接到slave服务器—-》输出当前用户的环境变量—-》检查节点服务器java版本—-》开启sftp传输slave.jar到节点服务器的工作目录—》java -jar启动节点服务器上的slave进程
    Jenkins部署jar文件到节点服务器 - 图5
  • 当标签和服务器名称一样时这里不会显示标签
    Jenkins部署jar文件到节点服务器 - 图6

3. job配置
  • General中勾选:Restrict where this project can be run
  • 输入节点的名称或标签(jenkins所在机子默认节点名称master),从而关联job到节点服务器。注意:下拉框选中节点名称或标签时末尾会有空格需要手动去掉该空格。
    Jenkins部署jar文件到节点服务器 - 图7

4. job运行结果
  • 节点服务器的job工作目录:节点配置的远程工作目录/workspace/
    Jenkins部署jar文件到节点服务器 - 图8

slave节点为windows平台

1. 节点配置
  • Launch method: windows 选择 Launch slave agent via java Web Start

2. 运行节点
  • 方式一 Launch agent from browser: 点击Launch图标下载slave-agent.jnlp—-》拷贝slave-agent.jnlp到配置的远程工作目录—-》双击运行文件(会检测你本地的java版本是否合适);或者直接输入:javaws D:\jenkins-workspace\slave-agent.jnlp
  • 方式二 Run from agent command line
    Jenkins部署jar文件到节点服务器 - 图9
  • JNLP(Java Network Launching Protocol,java网络加载协议 )是java提供的一种可以通过浏览器直接执行java应用程序的途径,它使你可以直接通过一个网页上的url连接打开一个java应用程序。
  • javaws命令运行.jnlp文件,javaws -viewer在java控制面板中显示高速缓存查看器,可看到客户端已经安装的webstart应用程序
    我的配置
    Jenkins部署jar文件到节点服务器 - 图10
    Jenkins部署jar文件到节点服务器 - 图11
    启动shell
  1. BUILD_ID=DONTKILLME
  2. echo "当前路径:"
  3. pwd
  4. # 定义变量
  5. appName="zhiyuan-1.0.0.jar"
  6. jenkinsDir="/home/jenkins/workspace/zhiyuan/target/$appName"
  7. runDir="/home/zhiyuan"
  8. appDir="/home/zhiyuan/$appName"
  9. mkdri runDir
  10. echo "停止应用"
  11. PID=$(ps -ef | grep $appName | grep -v grep | awk '{ print $2 }')
  12. if [ -z "$PID" ]
  13. then
  14. echo "应用已经是停止状态"
  15. else
  16. echo kill $PID
  17. kill $PID
  18. fi
  19. echo "移动应用目录"
  20. rm -rf $appDir
  21. cp $jenkinsDir $runDir
  22. echo "启动应用"
  23. cd $runDir
  24. nohup java -jar $appDir > log.log &
  25. echo "启动成功"