1. 程式人生 > 其它 >|NO.Z.00037|——————————|^^ 配置 ^^|——|CI/CD&Jenkins_pipeline操作.V11|-------------------------------------------|Jenkins_Master_Slave|

|NO.Z.00037|——————————|^^ 配置 ^^|——|CI/CD&Jenkins_pipeline操作.V11|-------------------------------------------|Jenkins_Master_Slave|



[CloudNative:CI/CD&Jenkins_pipeline操作.V11]                                                     [Applications.CloudNative] [|Jenkins-master-slave|JDK環境獲取失敗解決方案|]








一、Jenkins Master-slave:Jenkins Master-Slave架構
### --- Jenkins Master-slave架構說明

~~~     jenkins的Master-slave分散式架構主要是為了解決jenkins單點構建任務多、負載較高、效能不足的場景。
~~~     Master/Slave相當於Server和agent的概念。
~~~     Master提供web介面讓使用者來管理job和slave,
~~~     job可以執行在master本機或者被分配到slave上執行構建。
~~~     一個master(jenkins服務所在機器)可以關聯多個slave用來為不同的job或相同的job不同配置來服務。
二、安裝Jenkins-slave
### --- 安裝說明

~~~     **前提: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)