一、Jenkins
Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重復的工作,旨在提供一個開放易用的軟件平台,使軟件的持續集成變成可能。
二、安裝JenKins的前提條件
硬件 | 最低要求 | 推薦 |
---|---|---|
內存 | 256M | 1GB或更高 |
硬盤 | 1GB(作為一個Docker容器運行jenkins的話推薦10GB) | 50GB或更高 |
三、部署規划
服務器IP | 192.168.113.48 |
---|---|
端口 | 8928 |
安裝目錄 | /home/work/docker-jenkins |
數據卷映射目錄 | /home/work/docker-jenkins/data |
四、安裝JenKins
-
在安裝目錄下創建docker-jenkins目錄,創建成功后進入該目錄
mkdir docker-jenkins cd docker-jenkins
-
新建並按照規划編輯docker-compose.yml文件,編輯完后保存退出
vim docker-compose.yml
version: '3' services: jenkins: image: 'jenkins/jenkins:lts' container_name: jenkins restart: always environment: - TZ=Asia/Shanghai ports: - '8928:8080' - '50000:50000' volumes: - '/etc/localtime:/etc/localtime' - './data:/var/jenkins_home' - '/var/run/docker.sock:/var/run/docker.sock' - '/usr/bin/docker:/usr/bin/docker'
-
在安裝目錄下執行相關命令,啟動容器
docker-compose up -d
執行命令后發現服務並沒有運行,查看日志:
[root@node03 docker-jenkins]# docker-compose ps Name Command State Ports ------------------------------------------------------------- jenkins /sbin/tini -- /usr/local/b ... Restarting [root@node03 docker-jenkins]# docker-compose logs -f Attaching to jenkins jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? jenkins | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
通過日志發現,是由於權限不足導致服務沒有正常運行, 因為當映射本地數據卷時,/home/work/docker-jenkins目錄的擁有者為root用戶,而容器中jenkins user的uid為1000;執行以下命令即可。
chown -R 1000:1000 /home/work/docker-jenkins
執行命令后會發現服務已正常啟動:
[root@node03 docker-jenkins]# chown -R 1000:1000 /home/work/docker-jenkins You have new mail in /var/spool/mail/root [root@node03 docker-jenkins]# docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------------------- jenkins /sbin/tini -- /usr/local/b ... Up 0.0.0.0:50000->50000/tcp, 0.0.0.0:8928->8080/tcp
五、驗證Jenkins
-
在瀏覽器輸入ip:端口,頁面提示解鎖Jenkins
根據頁面提示信息,密碼路徑(路徑為容器中路徑)如上圖所示,在此之前已經做了數據映射,不用登錄容器,直接在宿主機查看即可:
[root@node03 docker-jenkins]# cat /home/work/docker-jenkins/data/secrets/initialAdminPassword d1d17726052b4716acd6315a276fd0fb
將查出來的密碼復制到瀏覽器中即可。點擊"繼續"就會出現以下界面:
根據自己所需進行選擇即可。(建議選擇“安裝推薦的插件”,若插件安裝失敗,多試幾次即可)
插件下載較慢是由於服務器在國外,所以下載緩慢,可以更換為國內插件源:
Jenkins更換國內插件鏡像源教程