美文网首页自动化运维
20230306--Jenkins远程部署方法之配置Slave节

20230306--Jenkins远程部署方法之配置Slave节

作者: 負笈在线 | 来源:发表于2023-03-05 18:29 被阅读0次

20230306--Jenkins远程部署方法之配置Slave节点

1.Jenkins远程部署方法Publish over SSH和slave的区别

  • publish over ssh

    • jenkins运行时,获取的代码是放在jenkins所在主机的工作空间(默认的工作空间目录是:用户名/.jenkins/workspace/下,如果想要修改工作空间,最好是在启动jenkins之前添加环境变量:JENKINS_HOME=你想要指定的目录),再通过ssh登录远程主机将代码发送到远程主机上(需要配置远程主机存放这些文件的目录),包括shell脚本或者执行命令,都是从本地发送到远程上去的(或者这些shell脚本已经在远程主机上,使用命令执行即可。
    • 需要安装插件:publish over ssh;如果git拉去项目需要在jenkins服务器上安装git,并配置git登录管理
  • slave

    • slave即是创建一个分身节点,用于支持操作多个节点来支持分布式。
    • 在jenkins构建时:先登录远程主机,通过远程主机这台电脑去拉取代码存放在远程主机的工作空间,再执行shell脚本或者执行命令(也就是说文件本身就是在远程主机上的,不需要从jenkins本地发送到配置的远程主机上)。
    • 需要安装插件:SSH agent;

2.SSH方法添加Slave节点

1)Jenkins安装或确认必要插件

jenkins安装或确认必要插件SSH agent。
Dashboard--Manage Jenkins--Plugin Manager


2)SSH Slave Node配置

Dashboard--Manage Jenkins--Configure Global Security;指定代理端口为50000,默认为禁用;SSH Server 设置为启用,默认是禁用;保存Save。



添加节点:Dashboard--Manage Jenkins--Nodes-NewNode;填写Node name,选择Permanent Agent,Create。

配置节点:Dashboard--Manage Jenkins--Nodes,选择节点--选择Configuration


设置启动方式Launch agents via SSH,Host Key Verification Strategy 选择Non verifying Verification Strategy


SSH节点安装和jenkins相同版本的Java.

# yum install java-11-openjdk -y
# java -version
openjdk version "11.0.18" 2023-01-17 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.18.0.10-2.el8_7) (build 11.0.18+10-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.18.0.10-2.el8_7) (build 11.0.18+10-LTS, mixed mode, sharing)

确认Slave Node状态


3.Docker添加Slave节点

1)Jenkins安装或确认必要插件

jenkins安装或确认必要插件SSH agent。
Dashboard--Manage Jenkins--Plugin Manager


2)Docker服务器允许远程连接

修改docker服务启动文件「/usr/lib/systemd/system/docker.service」,并重启docker服务

# cp -p  /usr/lib/systemd/system/docker.service /root/docker.service.bak
# vi -H /usr/lib/systemd/system/docker.service
# diff /usr/lib/systemd/system/docker.service /root/docker.service.bak
13,14c13
< #ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=172.26.37.126:80
< ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=172.26.37.126:80
---
> ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=172.26.37.126:80

# systemctl daemon-reload
# systemctl restart docker
3)Docker下载一个jenkins slave镜像

通过docker search slave 找到需要的镜像,然后pull镜像

# docker search slave
# docker pull jenkins/slave
4)Docker Slave Node配置

Dashboard--Manage Jenkins--Nodes,选择Configure Clouds;Add a new cloud,选择Docker,填写Docker Host URI,测试连通性。


点击Docker Agent templates;填写Labels,选择Enabled,填写docker Image,也就是刚才下载镜像



5)测试

新建一个pipeline来测试这个docker agent是否可用


pipeline {
    agent {
        label 'docker_slave'
    }

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
                sh 'pwd'
                sh 'sleep 20'
                echo 'Finish'
            }
        }
    }
}
要指定agent.label文件docker-slave,这个名字是上面配置master时的Docker Agent templates一致

执行Job,一直报如下错误

Started by user admin
[Pipeline] Start of Pipeline
[Pipeline] node
Still waiting to schedule task
All nodes of label ‘docker-slave’ are offline
Aborted by admin
[Pipeline] // node
[Pipeline] End of Pipeline

查看jenkins log

2023-03-06 09:08:12.457+0000 [id=344]   INFO    c.n.j.p.docker.DockerTemplate#doProvisionNode: Started container ID 7734ae758bfbccdf7b668494a7d15fa06e0db974ca9794205365e3deb302af71 for node docker-slave-1-0000kg3e51g2z from image: jenkins/slave:latest
2023-03-06 09:08:13.600+0000 [id=37]    INFO    hudson.slaves.NodeProvisioner#update: Image of jenkins/slave:latest provisioning successfully completed. We have now 3 computer(s)
2023-03-06 09:08:13.771+0000 [id=342]   INFO    i.j.d.c.DockerMultiplexedInputStream#readInternal: stderr from docker-slave-1-0000kg3e51g2z (7734ae758bfbccdf7b668494a7d15fa06e0db974ca9794205365e3deb302af71): Error: A JNI error has occurred, please check your installation and try again
2023-03-06 09:08:13.774+0000 [id=342]   INFO    i.j.d.c.DockerMultiplexedInputStream#readInternal: stderr from docker-slave-1-0000kg3e51g2z (7734ae758bfbccdf7b668494a7d15fa06e0db974ca9794205365e3deb302af71):
Exception in thread "main"
2023-03-06 09:08:13.776+0000 [id=342]   INFO    i.j.d.c.DockerMultiplexedInputStream#readInternal: stderr from docker-slave-1-0000kg3e51g2z (7734ae758bfbccdf7b668494a7d15fa06e0db974ca9794205365e3deb302af71): java.lang.UnsupportedClassVersionError: hudson/remoting/Launcher has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

有最后一句基本判断原因是由于jenkins服务器的java版本和docker环境中jenkins/slave的java不一致引起;

Jenkins服务器Java版本是openjdk 11.0.17 2022-10-18 LTS

jenkins/slave的Java版本是openjdk version "1.8.0_292"

jenkins@9ee753738ba6:~$ java -version
openjdk version "1.8.0_292"

此处暂不解决。基本上可以确定整个过程没问题。

参考URL

https://www.shuzhiduo.com/A/xl56QXm7Jr/
https://www.jianshu.com/p/7cf4dc902e88
https://blog.csdn.net/weixin_39658716/article/details/111257698

未完待续。。。

计划还有Kubernetes添加Slave节点(Jenkins Slave Pod)

相关文章

网友评论

    本文标题:20230306--Jenkins远程部署方法之配置Slave节

    本文链接:https://www.haomeiwen.com/subject/zbcpldtx.html