天天看點

企業實戰(23)基于Docker平台的Jenkins添加node節點與報錯詳解(2)

相關文章

企業實戰(23)基于Docker平台部署Jenkins中國定制版(1)

添加node節點前配置

企業實戰(23)基于Docker平台的Jenkins添加node節點與報錯詳解(2)

在這裡插入圖檔描述

企業實戰(23)基于Docker平台的Jenkins添加node節點與報錯詳解(2)

在這裡插入圖檔描述

開始添加node節點

企業實戰(23)基于Docker平台的Jenkins添加node節點與報錯詳解(2)

在這裡插入圖檔描述

企業實戰(23)基于Docker平台的Jenkins添加node節點與報錯詳解(2)

在這裡插入圖檔描述

企業實戰(23)基于Docker平台的Jenkins添加node節點與報錯詳解(2)

在這裡插入圖檔描述

 在添加node節點時,填好“名稱”、“描述”、“執行器數量”、“遠端工作目錄”、“标簽”、“用法(一般預設)”、“啟動方式(根據情況)”,完成後儲存。

企業實戰(23)基于Docker平台的Jenkins添加node節點與報錯詳解(2)

在這裡插入圖檔描述

企業實戰(23)基于Docker平台的Jenkins添加node節點與報錯詳解(2)

在這裡插入圖檔描述

這時node1節點還是未線上狀态,點選“node1”名稱會有節點連接配接Jenkins的方法。

企業實戰(23)基于Docker平台的Jenkins添加node節點與報錯詳解(2)

在這裡插入圖檔描述

注意:

這裡必須用

--user root

使用者進入容器才可以建立工作目錄,預設進入是

jenkins

使用者,會提示權限不足。

[root@localhost ~]# docker ps -a    //容器運作時需要映射代理連接配接端口50000
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS                        PORTS                                              NAMES
1dad787d6f46        myjenkins:v1           "/sbin/tini -- /usr/…"   38 minutes ago      Up 11 minutes                 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   myjenkins

[root@localhost ~]# docker exec -it --user root jenkins /bin/bash

root@367402ec96bf:/# mkdir -p /opt/jenkins    //建立工作目錄

root@367402ec96bf:/# cd /opt/jenkins/

root@367402ec96bf:/opt/jenkins# wget http://192.168.1.8:8080/jnlpJars/agent.jar

root@367402ec96bf:/opt/jenkins# ls
agent.jar

root@367402ec96bf:/opt/jenkins# java -jar agent.jar -jnlpUrl http://192.168.1.8:8080/computer/node1/slave-agent.jnlp -secret 90e0e5a0d61f67d551d029a22584632fb96f314acf1f3789372adbb747e81b11 -workDir "/opt/jenkins"
......
Nov 16, 2020 6:19:14 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Trying protocol: JNLP4-connect
Nov 16, 2020 6:19:14 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Remote identity confirmed: 33:34:ca:16:46:58:d8:12:94:38:4b:eb:ee:33:a9:4c
Nov 16, 2020 6:19:14 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Connected    //連接配接成功
           

複制

企業實戰(23)基于Docker平台的Jenkins添加node節點與報錯詳解(2)

在這裡插入圖檔描述

`報錯`

 如果在容器中下載下傳好agent.jar後,執行節點連接配接指令的時候出現下面的錯誤:

WARNING: Connection refused (Connection refused)

root@367402ec96bf:/opt/jenkins# java -jar agent.jar -jnlpUrl http://192.168.1.8:8080/computer/node1/slave-agent.jnlp -secret 5cb49ff710c0dde742725fcb82dc2e8ccf4f612819e2b6889cfcb93207fc734a -workDir "/opt/jenkins"
......
WARNING: Connection refused (Connection refused)
Nov 16, 2020 3:57:42 AM hudson.remoting.jnlp.Main$CuiListener error
SEVERE: http://192.168.1.8:8080/ provided port:50000 is not reachable
java.io.IOException: http://192.168.1.8:8080/ provided port:50000 is not reachable
        at org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver.resolve(JnlpAgentEndpointResolver.java:314)
        at hudson.remoting.Engine.innerRun(Engine.java:693)
        at hudson.remoting.Engine.run(Engine.java:518)
           

複制

解決:

1.檢視正在運作的容器是否已經映射了前面在Jenkins管理界面設定中的“全局安全配置”裡配置的代理指定端口(詳情見頂圖)

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS                        PORTS                                              NAMES
1dad787d6f46        myjenkins:v1           "/sbin/tini -- /usr/…"   38 minutes ago      Up 11 minutes                 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   myjenkins
           

複制

2.沒有映射代理端口需要重新映射才能正常連接配接,有下面兩種方法:

  • 2.1 `将目前已經運作的容器通過docker commit指令送出為一個鏡像,然後重新執行docker run指令添加完整的端口映射。`(推薦)`
[root@localhost ~]# docker stop jenkins

[root@localhost ~]# docker commit -m "my jenkins" 367402ec96bf myjenkins:v1

[root@localhost ~]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
myjenkins              v1                  5349fdcc8533        7 minutes ago       662MB
jenkinszh/jenkins-zh   latest              2cb4cce6db0a        5 months ago        656MB

[root@localhost ~]# docker run -itd --name=myjenkins -p 8080:8080 -p 50000:50000 myjenkins:v1

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                              NAMES
1dad787d6f46        myjenkins:v1        "/sbin/tini -- /usr/…"   5 seconds ago       Up 4 seconds        0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   myjenkins
           

複制

進入浏覽器通路Jenkins頁面,重新完成入門步驟後進入Jenkins管理界面首頁,按照本教程從頭開始進行“添加node節點前配置”、“開始添加node節點”步驟,進行至“節點連接配接Jenkins方式”時,按照下面步驟重新操作即可。

[root@localhost ~]# docker exec -it --user root myjenkins /bin/bash

root@1dad787d6f46:/# cd /opt/jenkins/

root@1dad787d6f46:/opt/jenkins# rm -rf *    //删除之前的檔案

root@1dad787d6f46:/opt/jenkins# wget http://192.168.1.8:8080/jnlpJars/agent.jar  //重新複制連接配接代理的agent.jar連結

root@1dad787d6f46:/opt/jenkins# ls
agent.jar

root@1dad787d6f46:/opt/jenkins# java -jar agent.jar -jnlpUrl http://192.168.1.8:8080/computer/node1/slave-agent.jnlp -secret 90e0e5a0d61f67d551d029a22584632fb96f314acf1f3789372adbb747e81b11 -workDir "/opt/jenkins"
......
INFO: Agent discovery successful
  Agent address: 192.168.1.8
  Agent port:    50000
  Identity:      33:34:ca:16:46:58:d8:12:94:38:4b:eb:ee:33:a9:4c
Nov 16, 2020 6:19:14 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Handshaking
Nov 16, 2020 6:19:14 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Connecting to 192.168.1.8:50000
Nov 16, 2020 6:19:14 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Trying protocol: JNLP4-connect
Nov 16, 2020 6:19:14 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Remote identity confirmed: 33:34:ca:16:46:58:d8:12:94:38:4b:eb:ee:33:a9:4c
Nov 16, 2020 6:19:14 AM hudson.remoting.jnlp.Main$CuiListener status
INFO: Connected
           

複制

  • 2.2 `通過配置檔案修改已經運作的docker容器端口映射`

優化

 在上面代理連接配接Jenkins的時候,可以看到我們是直接通過執行指令連接配接,這種方式會一直占用系統終端,這時我們可以通過編寫一個腳本來實作不占用終端一直運作腳本達到代理連接配接Jenkins的效果。(在容器中可以通過主控端寫好腳本後,與jenkins容器共享腳本目錄,這樣容器中也可以直接通路腳本目錄執行腳本)

nohup

不挂斷地運作指令

&

在背景運作 (一般這兩個一起用)

nohup command &

[root@localhost jenkins]# vim start.sh
#!/bin/bash
nohup java -jar agent.jar -jnlpUrl http://192.168.1.8:8080/computer/node1/slave-agent.jnlp -secret 90e0e5a0d61f67d551d029a22584632fb96f314acf1f3789372adbb747e81b11 -workDir "/opt/jenkins" &

(可以通過commit新鏡像重新執行docker run 映射端口跟共享目錄)

# sh start.sh

# ps -aux | grep start.sh    //通過ps檢視背景運作的腳本
root      15269  0.0  0.0 112720   996 pts/0    S+   15:13   0:00 grep --color=auto start.sh

# tail -f nohup.out    //檢視腳本背景執行啟動日志
十一月 16, 2020 3:10:11 下午 hudson.remoting.jnlp.Main$CuiListener status
資訊: Handshaking
十一月 16, 2020 3:10:11 下午 hudson.remoting.jnlp.Main$CuiListener status
資訊: Connecting to 192.168.1.8:50000
十一月 16, 2020 3:10:11 下午 hudson.remoting.jnlp.Main$CuiListener status
資訊: Trying protocol: JNLP4-connect
十一月 16, 2020 3:10:12 下午 hudson.remoting.jnlp.Main$CuiListener status
資訊: Remote identity confirmed: 33:34:ca:16:46:58:d8:12:94:38:4b:eb:ee:33:a9:4c
十一月 16, 2020 3:10:12 下午 hudson.remoting.jnlp.Main$CuiListener status
資訊: Connected
           

複制

企業實戰(23)基于Docker平台的Jenkins添加node節點與報錯詳解(2)