|NO.Z.00037|——————————|^^ 配置 ^^|——|CI/CD&Jenkins_pipeline操作.V11|-------------------------------------------|Jenkins_Master_Slave|
阿新 • • 發佈:2022-03-28
[CloudNative:CI/CD&Jenkins_pipeline操作.V11] [Applications.CloudNative] [|Jenkins-master-slave|JDK環境獲取失敗解決方案|]
一、Jenkins Master-slave:Jenkins Master-Slave架構
二、安裝Jenkins-slave### --- Jenkins Master-slave架構說明 ~~~ jenkins的Master-slave分散式架構主要是為了解決jenkins單點構建任務多、負載較高、效能不足的場景。 ~~~ Master/Slave相當於Server和agent的概念。 ~~~ Master提供web介面讓使用者來管理job和slave, ~~~ job可以執行在master本機或者被分配到slave上執行構建。 ~~~ 一個master(jenkins服務所在機器)可以關聯多個slave用來為不同的job或相同的job不同配置來服務。
### --- 安裝說明
~~~ **前提:slave 所在伺服器必須有 java環境**
~~~ jenkins web 端進行操作:
~~~ 系統管理->管理節點->新建節點
### --- 進行基礎配置
~~~ ——>配置選項中的內容是可變的,根據情況來
~~~ ——>注意這裡需要配置憑據,也就是配置slave所在伺服器使用者和密碼
~~~ ——>之後儲存,如果無誤的話就會直接啟動了,如圖下所示是有問題的
### --- ——>通過看輸出日誌,發現是 jdk 的問題,一般來說, ~~~ 其會判斷 slave 所在伺服器有沒有 jdk,如果有就會進行檢測, ~~~ 如下圖所示,就是沒有檢查到(因為jdk是我們自己裝的,路徑並不是預設的路徑)。 SSHLauncher{host='10.10.10.11', port=22, credentialsId='a12986da-f7bd-4ae3-96e5-f6c5e74899ba', jvmOptions='', javaPath='', prefixStartSlaveCmd='', suffixStartSlaveCmd='', launchTimeoutSeconds=60, maxNumRetries=10, retryWaitTime=15, sshHostKeyVerificationStrategy=hudson.plugins.sshslaves.verifiers.ManuallyTrustedKeyVerificationStrategy, tcpNoDelay=true, trackCredentials=true} [03/30/21 15:18:27] [SSH] Opening SSH connection to 10.10.10.11:22. [03/30/21 15:18:27] [SSH] The SSH key with fingerprint 41:6d:e3:57:28:fa:ee:a9:e1:82:7f:19:e8:f0:f1:76 has been automatically trusted for connections to this machine. [03/30/21 15:18:28] [SSH] Authentication successful. [03/30/21 15:18:28] [SSH] The remote user's environment is: BASH=/usr/bin/bash BASHOPTS=cmdhist:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() BASH_EXECUTION_STRING=set BASH_LINENO=() BASH_SOURCE=() BASH_VERSINFO=([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu") BASH_VERSION='4.2.46(2)-release' DIRSTACK=() EUID=0 GROUPS=() HOME=/root HOSTNAME=jenkins HOSTTYPE=x86_64 ID=0 IFS=$' \t\n' LANG=en_US.UTF-8 LESSOPEN='||/usr/bin/lesspipe.sh %s' LOGNAME=root MACHTYPE=x86_64-redhat-linux-gnu MAIL=/var/mail/root OPTERR=1 OPTIND=1 OSTYPE=linux-gnu PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin PIPESTATUS=([0]="0") PPID=21781 PS4='+ ' PWD=/root SHELL=/bin/bash SHELLOPTS=braceexpand:hashall:interactive-comments SHLVL=1 SSH_CLIENT='10.10.10.11 45740 22' SSH_CONNECTION='10.10.10.11 45740 10.10.10.11 22' TERM=dumb UID=0 USER=root XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share/:/var/lib/flatpak/exports/share/:/usr/local/share/:/usr/share/ XDG_RUNTIME_DIR=/run/user/0 XDG_SESSION_ID=80 _=/etc/bashrc flatpak_dirs=/root/.local/share/flatpak/exports/share/:/var/lib/flatpak/exports/share/ command_not_found_handle () { local runcnf=1; local retval=127; [[ $- =~ i ]] || runcnf=0; [[ ! -S /run/dbus/system_bus_socket ]] && runcnf=0; [[ ! -x '/usr/libexec/packagekitd' ]] && runcnf=0; [[ -n ${COMP_CWORD-} ]] && runcnf=0; if [ $runcnf -eq 1 ]; then '/usr/libexec/pk-command-not-found' "$@"; retval=$?; else if [[ -n "${BASH_VERSION-}" ]]; then printf 'bash: %scommand not found\n' "${1:+$1: }" 1>&2; fi; fi; return $retval } [03/30/21 15:18:28] [SSH] Checking java version of /var/lib/jenkins/jdk/bin/java Couldn't figure out the Java version of /var/lib/jenkins/jdk/bin/java bash: /var/lib/jenkins/jdk/bin/java: No such file or directory
### --- ——>沒有檢查到的話其就會去oracle官網下載,來為 slave 所在伺服器進行安裝, ~~~ 但是因為中國的原因,被牆了,所以也會下載失敗,最終就導致徹底失敗了,失敗如圖下: [03/30/21 15:18:28] [SSH] Checking java version of java [03/30/21 15:18:28] [SSH] java -version returned 1.8.0_161. [03/30/21 15:18:28] [SSH] Starting sftp client. [03/30/21 15:18:33] [SSH] Copying latest remoting.jar... [03/30/21 15:18:34] [SSH] Copied 1,506,923 bytes. Expanded the channel window size to 4MB [03/30/21 15:18:34] [SSH] Starting agent process: cd "/var/lib/jenkins" && java -jar remoting.jar -workDir /var/lib/jenkins -jar-cache /var/lib/jenkins/remoting/jarCache Mar 30, 2021 3:18:35 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir INFO: Using /var/lib/jenkins/remoting as a remoting work directory Mar 30, 2021 3:18:35 PM org.jenkinsci.remoting.engine.WorkDirManager setupLogging INFO: Both error and output logs will be printed to /var/lib/jenkins/remoting <===[JENKINS REMOTING CAPACITY]===>channel started Remoting version: 4.6 This is a Unix agent Evacuated stdout Agent successfully connected and online
slave構建失敗解決方案——JDK環境原因
### --- slave構建失敗解決方案——JDK環境原因
~~~ # 方案一:
~~~ ——>在配置時高階的選項裡指定java路徑:如下圖所示:
~~~ # 方案二:
~~~ ——>為 java 路徑做一個軟連結,保證 jenkins 可以檢測到 java。
[root@jenkins ~]# ln -s /usr/local/jdk1.8/bin/java /usr/bin/java
[root@jenkins ~]# ll /usr/bin/java
lrwxrwxrwx 1 root root 26 Jul 25 17:33 /usr/bin/java -> /usr/local/jdk1.8/bin/java
~~~ 執行構建——之後在看已經成功了!
[03/30/21 15:18:28] [SSH] Checking java version of java
[03/30/21 15:18:28] [SSH] java -version returned 1.8.0_161.
[03/30/21 15:18:28] [SSH] Starting sftp client.
[03/30/21 15:18:33] [SSH] Copying latest remoting.jar...
[03/30/21 15:18:34] [SSH] Copied 1,506,923 bytes.
Expanded the channel window size to 4MB
[03/30/21 15:18:34] [SSH] Starting agent process: cd "/var/lib/jenkins" && java -jar remoting.jar -workDir /var/lib/jenkins -jar-cache /var/lib/jenkins/remoting/jarCache
Mar 30, 2021 3:18:35 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
INFO: Using /var/lib/jenkins/remoting as a remoting work directory
Mar 30, 2021 3:18:35 PM org.jenkinsci.remoting.engine.WorkDirManager setupLogging
INFO: Both error and output logs will be printed to /var/lib/jenkins/remoting
<===[JENKINS REMOTING CAPACITY]===>channel started
Remoting version: 4.6
This is a Unix agent
Evacuated stdout
Agent successfully connected and online
~~~ ——>並且也可以在 slave 所在伺服器看到:
~~~ ——>jar 包就是負責接收 master 任務的。
[root@jenkins ~]# ps -ef |grep slave
root 22545 20414 0 15:30 pts/2 00:00:00 -c cd -/var/lib/jenkins" && java -jar slave.jar
root 22545 20414 0 15:30 pts/2 00:00:00 java -jar slave.jar
root 22545 20414 0 15:30 pts/2 00:00:00 grep --color=auto slave
三、配置job,執行構建
### --- 配置job,執行構建
~~~ # 在專案 job 中進行配置:
~~~ ——>可通過標籤或者名稱進行匹配(標籤可在安裝時配置)
~~~ # 構建
~~~ ——>可以發現控制檯的日誌,其也是 slave 構建的
~~~ ——>之後檢視構建完的工作目錄,也有預想中的檔案。
[root@tomcat ~]# ls /var/lib/jenkins/workspace/A-web1
index1.html index.html
~~~ ——>這樣基本上就實現了藉助 jenkins 的 slave 去構建 job了。
~~~ 目前是在 slave 構建也在 slave 上部署,之後我們可以通過指令碼,
~~~ 比如藉助 rsync、ansible 等部署在其他伺服器上。
四、擴充套件### --- 擴充套件
~~~ ——>可以為slave伺服器在配置時候加上標籤,這樣也會方便我們選擇,
~~~ 用法也不單單侷限在一臺伺服器上,可以讓多臺 slave 去競選。
===============================END===============================
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart ——W.S.Landor
來自為知筆記(Wiz)