Jenkins(6):Jenkins节点管理


我们在使用jenkins的时候,一般来说肯定是有slave节点的。任务一般是在slave上面运行的。当然不是讲master节点不能跑任务,master节点主要是处理调度构建作业,把构建分发到slave节点进行实际执行,监视slave节点的状态(必要时让它们进行上线或者离线),记录和发布构建产物。

主要常用的的连接slave节点的方式就是通过ssh和jnlp

  • ssh来说,我们一般用的服务器都是linux系统,当然最方便的就是通过ssh启动jenkins节点,但是这个有个前提的要求就是master和slave之前能进行ssh连接
  • jnlp连接方式有个好处就是不用master和slave之间能够ssh连接,只需要能够ping即可。并且如果slave的机器是windows的话,也是可以的这个其实是非常实用的,因为有时候,可能一些权限或者防火墙的原因,这master和slave真的不能够ssh连接,还有一些未知的原因无法ssh到slave节点(我下面说的公司这个例子就是这样),都可以通过jnlp的方式进行连接。

 

Ssh方式连接slave

必须有slave机器的账号才行,但不要求必须是root账号。
这种方式的前提是需要安装SSH Slaves plugin插件。
这种方式的步骤如下:

 

1、输入slave节点的IP。

2、Add Credentials:

有如下两种方式:

  1)通过Username with password方式

  需要知道slave机器的用户名和密码

 

  2)通过SSH Username with private key方式

  需要先在master机器上生成ssh key pair。生成的 public key放到slave机器的 ~/.ssh/authorized_keys里面。然后chmod 600 ~/.ssh/authorized_keys。

  然后,添加连接slave的credential,

 

这两种方式的Scope选项,我选择的是System,表示这个Credentials仅仅是用来master和node进行连接用的。还有另外一种是“Global(Jenkins、nodes、items、child items)”,这种scope的Credential可以用来连接git等其他机器。具体选择哪种scope,根据自己的需要。就连接slave这个需求来说,哪种scope的credential都可以。
Username填写在master上生成key pair时使用的用户名。
Private key选择From the jenkins master ~/.ssh

Jenkins的SSH Credentials Plugin插件,可以集中管理这些ssh 的key。安装完这个插件,可以在Jenkins上看到这样的页面

这个页面可以对credentials进行添加、删除、修改等操作。在这里设置的credentials在jenkins的其他需要credentials的地方,可以通过下拉菜单选择使用,比如添加slave时,可以直接在Credentials下拉菜单里选择对应的credential就行

 

Jenkins pipeline 多节点 jenkins节点管理_java

 

还有git clone代码时:

此时一定要把在master上生成的 public key添加到github账号的的Profile setting页面里的SSH Keys Settings中。

用户密码方式

 

Jenkins pipeline 多节点 jenkins节点管理_git_02

Jenkins pipeline 多节点 jenkins节点管理_Jenkins_03

 

 

Jenkins pipeline 多节点 jenkins节点管理_git_04

Jenkins pipeline 多节点 jenkins节点管理_Jenkins_05

Jenkins pipeline 多节点 jenkins节点管理_java_06

 

 

Jenkins pipeline 多节点 jenkins节点管理_hg_07

 

 

sshbug

下线重连就好了



<===[JENKINS REMOTING CAPACITY]===>ERROR: Unexpected error in launching a agent. This is probably a bug in Jenkins.

java.lang.IllegalStateException: Already connected

        at hudson.slaves.SlaveComputer.setChannel(SlaveComputer.java:594)

        at hudson.slaves.SlaveComputer.setChannel(SlaveComputer.java:432)

        at hudson.plugins.sshslaves.SSHLauncher.startAgent(SSHLauncher.java:607)

        at hudson.plugins.sshslaves.SSHLauncher.access$400(SSHLauncher.java:113)

        at hudson.plugins.sshslaves.SSHLauncher$1.call(SSHLauncher.java:441)

        at hudson.plugins.sshslaves.SSHLauncher$1.call(SSHLauncher.java:406)

        at java.util.concurrent.FutureTask.run(FutureTask.java:266)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

        at java.lang.Thread.run(Thread.java:745)

[06/26/19 16:36:45] Launch failed - cleaning up connection

[06/26/19 16:36:45] [SSH] 连接关闭。



 

 

私钥方式

记住是私钥,不是公钥,cat .ssh/id_rsa

Jenkins pipeline 多节点 jenkins节点管理_java_08

 

 



-----BEGIN RSA PRIVATE KEY-----

MIIEpAIBAAKCAQEAzOx9ORYwSAKdyRBRsfD85MmXv3PurJoST1nJE4QqumygHcsU

HnkQp6NfDjCiJKJjXRpxDijvoQGa+xMpJySbiL5LzFlEWk17RX+fs3ztEk7ot8l9

jWKoTDWUsD7zMKXTTllKO6bOivvyUPPWqhgZ4Cuu29Fsxq2chU4Wg63eq2b7wKbg

rFgDkL9XMqVMtxxTbhyXjBRFkHtIWIFOSeDBlfuvfW3odDZh3sfUqTjdPAPGlQUA

K9eIplaQkVyN33FZ3eXwr5ylLBca1aCM7WKRVVOuZKFrv4Uqb6WB454ln7jlmz2r

MYaD4nk1IXcBjXGAshpAVd/IBC5nEJgpPeZFVwIDAQABAoIBAEkzCKAFrwVp+dbC

f4wiWxOWdyAqV01MU9IIbm0MPv8Moj1CN1OTR0G6d8/ny2NupjOxqES4lrBalHOv

KnoS94PnBche8q2XE7uFlRRWQZDSowpTbQe+AAQI963lLpVoBozsFDouoYS/7pTA

JSPpLAUJVZKrwkFN7qUneZ9b0jhDEsri5rSSI5xzMIYKMcNm2ZMpVzVCTQhRgPo2

LzGz76boTzFBXZ3y5QM1LPG3rbpRWE1vXSpvx6Q2onG7VdWGz6fwlEQC6KjksrKP

UymevpzD+RBuWC5JAlZ1Q6XBRVJdqE+p6pTobkdHGDGy/WeI5JUTYBC9oGnyvIi4

PFeQu9ECgYEA+p717KJtWfmXlbCYlSC7C5AFwQc7vkKPVeCdKNLXW13VB7Ke8yuo

u5Vl1Z4vvBZNqmCn0kK07vJMnIjSbQ/BTPefQ0NikZWQ8/eBZ8THNgti2aEpaH9R

r1juqScahgWbS8ARrFuGBHo/rkz/jOML66jhkYBtSW6ZgPWJuL7ExsUCgYEA0VJx

7O+6U1i/o6mbQKhJH92ITPc28UM4jAywUY7it3Bhulf1Ldlr05SSvruMtiHwFVmz

kC3jIUKA5wQfwJz70glVLPfLchg/eCBj+ejJztxLiDBTxAlmt74ptkGtNdZ9oQ8i

hcr3x7GnCmAT/wmkSPgTNJhz0OO20MP6xAvFfWsCgYEA+lh5ffROWVdKBVwPPsAg

N4+ZP9Vy5z3jojwpoRLjzr+vQe46etu8xAybWcSXGEILOMsuOIkr5Zgh0SeXUxwu

0ix0aaNRPe3yitFM8ZQODr1W89/Z1imANjEWzd9izkehdgyZWttdxvE61WjSyTAv

wyrCkC6CfJy/N6ON+/6L36UCgYEAhsWifH9NZGR73xBQ2ayAiHfGTmfNhEFXozR4

QcrRxnIhOi1vuvmGJ1A9u3hd/NaVEeoTZv1khAGhpRxOpWFt8an4oV9aKjfaham1

NS7g4MOODj2vcUTsUdmqWaKnt0ZG1PA9tg8cwgJsHo4F0euPTzwKgY624wP6rSfB

yYAaw8kCgYAJ4NKVWy3Zy4iPeUE+h1paQQEgJpqwpeMPnEXn5RJ/FN1bwseTIa3n

ZqN9toDLdNH8w0qnhUiAqqa5qrkREbvYPb9QSYt7pi3iV7nOsw2o0BDqT+AusdLz

A37TQC2jih/YyMJ1eepmTtJN9T4LmtsuZLa43817MAkgu9geRqzdJg==

-----END RSA PRIVATE KEY-----



 

 

复制节点

在节点环境配置好之后,我们再添加节点就可以复制了,修改IP和其他自定义配置即可。

 

Jenkins pipeline 多节点 jenkins节点管理_git_09

 

 

JNLP方式连接salve (回头补上)

不需要master必须能够ssh连接到slave,只需要两者能够ping通即可。

接下来的任务是将该节点连到master上。与ssh方式是master主动连接slave不同,这种JNLP方式是slave主动连接master。
登陆到slave机器上,运行上图中的java -jar 命令,即可将slave连接到master上了。
,自动重启。
脚本地址:
https://github.com/liuchunming033/setup_jenkins_slave">https://github.com/liuchunming033/setup_jenkins_slave
参考资料
http://www.nerdnuts.com/2014/06/jenkins-managing-ssh-keys/

 

 

job调用节点

  • 限制项目运行的节点

 

Jenkins pipeline 多节点 jenkins节点管理_java_10

 

  • 参数选择node或label

并发构建

需要安装Node and Label parameter plugin插件

需要配置node类型参数

  • 如果两个都配置,node参数优先生效

 

label方式

Jenkins pipeline 多节点 jenkins节点管理_运维_11

Jenkins pipeline 多节点 jenkins节点管理_git_12

 

Jenkins pipeline 多节点 jenkins节点管理_hg_13

 

 

 

 

node方式

可能是我配置的问题,看起来像是并发构建了

 

Jenkins pipeline 多节点 jenkins节点管理_Jenkins_14

Jenkins pipeline 多节点 jenkins节点管理_git_15

Jenkins pipeline 多节点 jenkins节点管理_java_16