Jenkins的分布式環境構建


1.簡介

jenkins分布式環境是由master機和多個slave機組成的

2.master安裝jenkins

環境:centos

假如有多台機器,我會選擇儲存空間較大的機器來安裝master,master主消耗的是儲存空間

2.1 安裝JDK

yum install -y java

2.2 安裝jenkins

添加Jenkins庫到yum庫,Jenkins將從這里下載安裝。

wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key yum install -y jenkins

如果不能安裝就到官網下載jenkis的rmp包,官網地址(http://pkg.jenkins-ci.org/redhat-stable/

 wget http://pkg.jenkins-ci.org/redhat-stable/jenkins-2.7.3-1.1.noarch.rpm  rpm -ivh jenkins-2.7.3-1.1.noarch.rpm

配置jenkis的端口

vi /etc/sysconfig/jenkins

找到修改端口號:

JENKINS_PORT="8080"  此端口不沖突可以不修改 

2.3 啟動jenkins

yum安裝的jenkins能直接使用 systemctl start/stop/restart jenkins 控制jenkins服務,不需要配置

為保證環境的穩定性,我一般會設置systemctl enable jenkins,保證機器掛掉之后,重啟能自動啟動jenkins

 

    • 安裝成功后Jenkins將作為一個守護進程隨系統啟動
    • 系統會創建一個“jenkins”用戶來允許這個服務,如果改變服務所有者,同時需要修改/var/log/jenkins, /var/lib/jenkins, 和/var/cache/jenkins的所有者
    • 啟動的時候將從/etc/sysconfig/jenkins獲取配置參數
    • 默認情況下,Jenkins運行在8080端口,在瀏覽器中直接訪問該端進行服務配置
    • Jenkins的RPM倉庫配置被加到/etc/yum.repos.d/jenkins.repo

2.4 打開jenkins

在瀏覽器中訪問 

首次進入會要求輸入初始密碼如下圖, 

初始密碼在:/var/lib/jenkins/secrets/initialAdminPassword 

image

選擇“Install suggested plugins”安裝默認的插件,下面Jenkins就會自己去下載相關的插件進行安裝。 

image

image

創建超級管理員賬號 

image

image

 

3.Slave部署

我部署slave時使用的JNLP的方式,使用的agent,但我推薦使用ssh方式

首先保證slave的機器和master是在同一網段,能互相ping通

3.1 新建節點

image

image

image

3.2 JNLP方式連接Slave

3.2.1 node配置

 

image

3.2.2 agent安裝與配置

image.png

1.右擊slave.jar (現在已改名為slave-agent.jar) 復制路徑

2.進入slave機器,下載agent:wget agent路徑

 

3.准備env.sh

/opt/jenkins/env.sh中,寫入以下環境變量:

JNLP_URL=http://jenkins.example.com/computer/NODE-NAME/slave-agent.jnlp JNLP_SECRET=a3868b087f3935cbb5195b26b4732aaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx JNLP_WORKDIR=/home/jenkins/

其中,JNLP_URLJNLP_SECRET需要根據節點信息而修改。

 

4.配置systemd

新增文件/etc/systemd/system/jenkins-agent.service

[Unit] Description=Jenkins agent of http://jenkins.example.com [Service] User=jenkins Group=jenkins Type=simple EnvironmentFile=/opt/jenkins/env.sh ExecStart=/usr/bin/java -jar /opt/jenkins/agent.jar -jnlpUrl $JNLP_URL -secret $JNLP_SECRET -workDir "$JNLP_WORKDIR" ExecStop=/usr/bin/pkill -f 'java -jar /opt/jenkins/agent.jar' Restart=on-failure RestartSec=30 [Install] WantedBy=multi-user.target

 

5.啟動

配置完成后,可以通過systemctl管理,實現開機自啟。

sudo systemctl daemon-reload sudo systemctl enable jenkins-agent.service sudo systemctl start jenkins-agent.service

 

6.檢查node是否已在線

image

 

3.3 SSH方式連接Slave

3.3.1新建節點

系統管理>管理節點>新建節點

image

選擇固定代理,輸入節點名稱,點擊ok

image

    • Name是節點名字;
    • Description是節點描述;
    • # of executors是該節點可以同時運行job的數量;
    • Remote root directory主要是添加了workspace的目錄;
    • Label是該節點的標簽名,在運行job的時候,可以使用該標簽指定job運行的node;
    • Usage是你如何使用該節點,通常選擇Utilize this node as much as possible,即盡量使用該節點。
    • Lance method:是將該node掛載到master上的方法。這里有四個選項,常用的是前兩選項,即“Launch slave agents on Unix machine via SSH”和“Launch slave agents via Java Web Start”。本文將詳細介紹這兩種掛載node的方法。
    • Availability是你何時連接該節點。通常選擇一直連接即可,即“Keep this slave on-line as much as possible”

 

關於SSH連接slave,jenkins有如下描述:

Launch slave agents on Unix machines via SSH

Starts a slave by sending commands over a secure SSH connection. The slave needs to be reachable from the master, and you will have to supply an account that can log in on the target machine. No root privileges are required.

這段描述的意思是說,選擇此種方式連接時,master和slave必須是能夠通過ssh進行連接的,必須有slave機器的賬號才行,但不要求必須是root賬號。這種方式的前提是需要安裝SSH Slaves plugin插件。

3.3.2 連接步驟

1、輸入slave節點的IP。

2、Add Credentials:

有如下兩種方式:

1)方式一:通過Username with password方式(個人覺得這個方式比較方便)

需要知道slave機器的用戶名和密碼,見下圖:

image

2)方式二:通過SSH Username with private key方式

需要先在master機器上生成ssh key pair。生成的 public key放到slave機器的~/.ssh/authorized_keys里面。然后chmod 600 ~/.ssh/authorized_keys。

然后,添加連接slave的credential,見下圖:

image

這兩種方式的Scope選項,我選擇的是System,表示這個Credentials僅僅是用來master和node進行連接用的。還有另外一種是“Global(Jenkins、nodes、items、child items)”,這種scope的Credential可以用來連接git等其他機器。具體選擇哪種scope,根據自己的需要。就連接slave這個需求來說,哪種scope的credential都可以。

Username填寫在master上生成key pair時使用的用戶名。

Private key選擇From the jenkins master ~/.ssh

 

3、開啟agent

image

【擴展知識】

Jenkins的SSH Credentials Plugin插件,可以集中管理這些ssh 的key。安裝完這個插件,可以在Jenkins上看到這樣的頁面

image

這個頁面可以對credentials進行添加、刪除、修改等操作。在這里設置的credentials在jenkins的其他需要credentials的地方,可以通過下拉菜單選擇使用,比如添加slave時,可以直接在Credentials下拉菜單里選擇對應的credential就行:

image

還有git clone代碼時:

image

此時一定要把在master上生成的 public key添加到github賬號的的Profile setting頁面里的SSH Keys Settings中。

 

 

 

4.插件安裝方法

如果要真正熟悉Jenkins,還是要能靈活使用其插件,目前已有1700多個插件,所以jenkins功能強大到似乎有點過分了,具體的插件我就不介紹了,大家可以自己去熟悉,以下我只講述以下插件的安裝以及優化插件安裝速度。

4.1 離線安裝

手工下載(*.hpi): http://updates.jenkins-ci.org/download/plugins/

進入:系統管理 / 管理插件 / 高級,然后上傳插件進行安裝。 

無需重啟 Jenkins 插件即生效。

4.2 在線安裝

進入:系統管理 / 管理插件 / 可選插件 

查找並勾選所需插件,點擊“直接安裝”; 

需重啟 Jenkins 插件才生效。

 

image.png

4.3 插件下載加速

國外鏡像下載較慢,會導致插件下載失敗,可優化插件的鏡像地址,以下是jenkins插件清華大學鏡像地址

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

點擊高級,修改升級站點的地址為清華大學鏡像地址

image    有的時候更換鏡像之后下載插件還是走的官方地址,原因:配置了清華的鏡像之后他還是走的jenkins官方去拉取的,是因為清華鏡像的配置文件里面的插件下載地址並不是指向的清華鏡像,仍然指向的是jenkins官方的地址,我的解決方案是把jenkins官方的地址通過nginx吞掉直接轉發到清華鏡像去。

host配置

127.0.0.1 updates.jenkins-ci.org

nginx配置

rewrite ^/download/plugins/(.*)$ https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/$1? last;

location /download/plugins {  proxy_next_upstream http_502 http_504 error timeout invalid_header;  proxy_set_header Host mirrors.tuna.tsinghua.edu.cn;  proxy_set_header X-Real-IP $remote_addr;  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  rewrite /download/plugins(.*) /jenkins/plugins/$1 break;  proxy_pass https://mirrors.tuna.tsinghua.edu.cn; }

解決:可以通過在nginx上配置代理,將官方的插件下載地址映射到                 https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/

這樣下載插件也會從鏡像網站下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM