部署Jenkins
- 創(chuàng)建本地數(shù)據(jù)保存目錄
mkdir /root/jenkins
删豺。 - 啟動容器
docker run -itd --name jenkins \
-u root \
-p 8080:8080 -p 50000:50000 \
--env JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m" \
-v /root/jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean:latest
參數(shù)說明
-u root
: Jenkins容器用戶uid為1000鳖昌,而我們前面創(chuàng)建的目錄Jenkins用戶不一定能訪問到询微,因此我們此處以root用戶來運行Jenkins容器角虫。也可以用當前用戶來運行咳燕,或者chmod 777 /root/jenkins
也祠。建議以root用戶運行插龄,方便后續(xù)在容器內(nèi)安裝軟件等操作愿棋。-p 8080:8080 -p 50000:50000
: 其中的50000端口用于master和slave的通信,8080端口用于前端界面訪問均牢。-
--env ...
:如果我們的機器配置較低糠雨,內(nèi)存較小,很可能啟動容器的時候徘跪,因為內(nèi)存不足而導(dǎo)致容器被殺死137退出甘邀。建議啟動容器的同時琅攘,配置一下java環(huán)境變量,約束下內(nèi)存使用松邪。
其中的含義如下:- -Xms JVM初始分配的堆內(nèi)存
- -Xmx JVM最大允許分配的堆內(nèi)存坞琴,按需分配
- -XX:PermSize JVM初始分配的非堆內(nèi)存
- -XX:MaxPermSize JVM最大允許分配的非堆內(nèi)存,按需分配
參考: https://blog.csdn.net/baidu_37107022/article/details/78277027
Java 虛擬機具有一個堆逗抑,堆是運行時數(shù)據(jù)區(qū)域剧辐,所有類實例和數(shù)組的內(nèi)存均從此處分配。堆是在 Java 虛擬機啟動時創(chuàng)建的邮府∮兀“在JVM中堆之外的內(nèi)存稱為非堆內(nèi)存(Non-heap memory)”。
可以看出JVM主要管理兩種類型的內(nèi)存:堆和非堆褂傀。簡單來說堆就是Java代碼可及的內(nèi)存忍啤,是留給開發(fā)人員使用的;非堆就是JVM留給自己用的仙辟。
-
-v /root/jenkins:/var/jenkins_home
: 掛載本地目錄到容器中作為工作目錄同波。 -
-v /var/run/docker.sock:/var/run/docker.sock
: 后續(xù)我們可能使用其他docker容器作為agent,因此需要將docker socket文件掛載到容器中叠国,才能啟動docker容器未檩。 - 最后,容器鏡像建議使用blueocean版本煎饼,可以可視化配置讹挎、查看流水線運行狀況校赤。也可以使用
jenkins/jenkins:lts
版本吆玖。
Jenkins基本使用
設(shè)置用戶名密碼
- 查看初始admin密碼
cat /root/jenkins/secrets/initialAdminPassword
- 在前端界面打開部署Jenkins的機器地址及端口,如
192.168.1.1:8080
马篮,在界面上輸入前面得到的密碼沾乘,就能使用Jenkins了。
其他說明
Jenkins架構(gòu)說明
Jenkins是一種主從架構(gòu)浑测,有一個master和多個slave,master負責提供界面、處理HTTP請求及管理構(gòu)建環(huán)境吝沫,匯總構(gòu)建結(jié)果僵刮;slave是一個在遠程機器上運行的Java可執(zhí)行文件,構(gòu)建的執(zhí)行則由Jenkins slave負責岖圈。(master也可以執(zhí)行構(gòu)建操作讹语,默認executor數(shù)量為2個,表示能并行執(zhí)行兩個Job蜂科。)
- node:節(jié)點顽决,指包含Jenkins環(huán)境及有能力執(zhí)行項目的機器短条。Master和Slave都被認為是節(jié)點。一個Master可以關(guān)聯(lián)多個Slave用來為不同的Job或相同的Job的不同配置來服務(wù)才菠。
? executor:執(zhí)行器茸时,是真正執(zhí)行項目的單元。一個執(zhí)行器可以被理解為一個單獨的進程(事實上是線程)赋访。在一個節(jié)點上可以運行多個執(zhí)行器(添加節(jié)點的時候指定)可都。
? agent:代理,在概念上指的是相對于Jenkins master的一種角色蚓耽,實際上是指運行在機器或容器中的一個程序汹粤,它會連接上Jenkins master,并執(zhí)行Jenkins master分配給它的任務(wù)田晚。
定時備份數(shù)據(jù)
通過上面方法啟動的容器嘱兼,只要定時打包備份/root/jenkins
目錄就可以了。升級Jenkins版本時贤徒,直接使用該目錄芹壕,使用新鏡像重新啟動容器就可以了。
調(diào)整executor數(shù)量接奈。
通過executors.groovy
groovy腳本文件踢涌,重新打包鏡像,可以修改executor的數(shù)量序宦,如調(diào)整為5個睁壁。
import jenkins.model.*
Jenkins.instance.setNumExecutors(5)
Dockerfile
FROM jenkins
COPY executors.groovy /usr/share/jenkins/ref/init.groovy.d/executors.groovy
問題解決
- 啟動容器時,報
Error response from daemon .... iptables failed
原因是docker啟動后互捌,iptables規(guī)則更新過潘明。只需要重啟docker即可。systemctl restart docker