20230306--Jenkins遠(yuǎn)程部署方法之配置Slave節(jié)點(diǎn)

20230306--Jenkins遠(yuǎn)程部署方法之配置Slave節(jié)點(diǎn)

1.Jenkins遠(yuǎn)程部署方法Publish over SSH和slave的區(qū)別

  • publish over ssh

    • jenkins運(yùn)行時,獲取的代碼是放在jenkins所在主機(jī)的工作空間(默認(rèn)的工作空間目錄是:用戶名/.jenkins/workspace/下,如果想要修改工作空間,最好是在啟動jenkins之前添加環(huán)境變量:JENKINS_HOME=你想要指定的目錄),再通過ssh登錄遠(yuǎn)程主機(jī)將代碼發(fā)送到遠(yuǎn)程主機(jī)上(需要配置遠(yuǎn)程主機(jī)存放這些文件的目錄),包括shell腳本或者執(zhí)行命令,都是從本地發(fā)送到遠(yuǎn)程上去的(或者這些shell腳本已經(jīng)在遠(yuǎn)程主機(jī)上,使用命令執(zhí)行即可。
    • 需要安裝插件:publish over ssh;如果git拉去項目需要在jenkins服務(wù)器上安裝git,并配置git登錄管理
  • slave

    • slave即是創(chuàng)建一個分身節(jié)點(diǎn),用于支持操作多個節(jié)點(diǎn)來支持分布式。
    • 在jenkins構(gòu)建時:先登錄遠(yuǎn)程主機(jī),通過遠(yuǎn)程主機(jī)這臺電腦去拉取代碼存放在遠(yuǎn)程主機(jī)的工作空間,再執(zhí)行shell腳本或者執(zhí)行命令(也就是說文件本身就是在遠(yuǎn)程主機(jī)上的,不需要從jenkins本地發(fā)送到配置的遠(yuǎn)程主機(jī)上)。
    • 需要安裝插件:SSH agent;

2.SSH方法添加Slave節(jié)點(diǎn)

1)Jenkins安裝或確認(rèn)必要插件

jenkins安裝或確認(rèn)必要插件SSH agent。
Dashboard--Manage Jenkins--Plugin Manager


2)SSH Slave Node配置

Dashboard--Manage Jenkins--Configure Global Security;指定代理端口為50000,默認(rèn)為禁用;SSH Server 設(shè)置為啟用,默認(rèn)是禁用;保存Save。



添加節(jié)點(diǎn):Dashboard--Manage Jenkins--Nodes-NewNode;填寫Node name,選擇Permanent Agent,Create。

配置節(jié)點(diǎn):Dashboard--Manage Jenkins--Nodes,選擇節(jié)點(diǎn)--選擇Configuration


設(shè)置啟動方式Launch agents via SSH,Host Key Verification Strategy 選擇Non verifying Verification Strategy


SSH節(jié)點(diǎn)安裝和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)

確認(rèn)Slave Node狀態(tài)


3.Docker添加Slave節(jié)點(diǎn)

1)Jenkins安裝或確認(rèn)必要插件

jenkins安裝或確認(rèn)必要插件SSH agent。
Dashboard--Manage Jenkins--Plugin Manager


2)Docker服務(wù)器允許遠(yuǎn)程連接

修改docker服務(wù)啟動文件「/usr/lib/systemd/system/docker.service」,并重啟docker服務(wù)

# 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,測試連通性。


點(diǎn)擊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一致

執(zhí)行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服務(wù)器的java版本和docker環(huán)境中jenkins/slave的java不一致引起;

Jenkins服務(wù)器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/
http://www.itdecent.cn/p/7cf4dc902e88
https://blog.csdn.net/weixin_39658716/article/details/111257698

未完待續(xù)。。。

計劃還有Kubernetes添加Slave節(jié)點(diǎn)(Jenkins Slave Pod)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容