一.CI,CD,Jenkins的介紹
CI:持續集成(Continuous integration,簡稱 CI),在傳統的軟件開發環境中,有集成,但是沒有持續集成這種說法,長時間的分支與主干脫離,導致分支與主干可能存在較大偏差,在集成代碼的時候可能需要花費數小時更久的時間來修復代碼,以便最終將代碼集成主干(俗稱"集成地獄"或"集成災難");而CI旨在鼓勵團隊成員進行頻繁集成(例如每小時或至少每天一次)來避免這種情況的出現,通過自動檢測、拉取、構建和(在大多數情況下)進行單元測試的過程,來保障代碼的質量可以進行下一步的使用,這也是持續集成的目的,CI是屬於開發人員的自動化流程。
CD:持續交付(Continuous Delivery)和持續部署(Continuous Deployment),這里查閱了一些資料,並簡單總結了一下:
1.持續交付意味着所有的變更都可以隨時交付生產使用,強調的是一種可交付的能力
2.持續部署意味着所有被發現的release candidate 並且通過所有質量測試的變更都會被自動部署到生產環境中,強調的是一種方式
Jenkins:Jenkins是開源CI&CD軟件領導者,並擁有眾多插件來支持它用於持續、自動的構建/測試軟件項目、監控外部任務的運行
二.在docker上安裝Jenkins
選擇jenkins的鏡像文件,這里推薦使用jenkinsci/blueocean,該鏡像包含當前的長期支持 (LTS) 的Jenkins版本 (可以投入使用) ,捆綁了所有Blue Ocean插件和功能。這意味着你不需要單獨安裝Blue Ocean插件,鏡像地址:
https://hub.docker.com/r/jenkinsci/blueocean/
docker run \ -u root \ --rm \ -d \ -p 8083:8080 \ -p 50000:50000 \ -v /data/jenkins:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ jenkinsci/blueocean
參數說明:
--rm 關閉時自動刪除Docker容器(下圖為實例)。如果您需要退出Jenkins,這可以保持整潔;
-d 在后台運行容器;
-p 映射容器服務的8080端口到宿主機的8090(我的8080已經被Apollo占用,所以改為8083,沒被占用的可以不用改,發現很多工具都喜歡用8080端口,比如:Apollo,SkyWalking,還有這里的Jenkins等)端 口,下面的50000也是一樣,將容器的端口50000 映射到主機上的端口50000;
-v 這里是將本機的“/data/jenkins”目錄掛載到容器中的/var/jenkins_home中,作為jenkins的存儲目錄;/var/run/docker.sock 表示Docker守護程序通過其監聽的基於Unix的套接字。該映射允許jenkinsci/blueocean 容器與Docker守護進程通信。
jenkinsci/blueocean 是鏡像名稱
docker run的時候,如果鏡像文件不存在,則會先自動拉取該鏡像,然后再啟動容器,通過下圖可以看到有提示說明本地不存在該鏡像,然后自動拉取的過程

等待安裝完成之后,打開瀏覽器訪問:http://部署的機器ip:8083 (沒改的話默認8080),就可以看到Jenkins的界面
然后通過以下命令訪問Jenkins控制台日志,復制出密碼(在兩組星號之間的就是生成好的管理員密碼)如圖
docker logs <CONTAINER ID>
復制出密碼后,按照頁面的提示,粘貼過去,點擊繼續就進入下一步驟了
這里點擊安裝推薦的插件,然后等待安裝完成

插件安裝完成后,可根據提示創建用戶或者繼續使用admin,后面默認點擊保存並完成,就可以進入Jenkins的首頁了

到這里,Jenkins部署流程就已經結束了,再分享兩個可能用到的命令:
1.訪問Jenkins / Blue Ocean Docker容器
docker exec -it <CONTAINER ID> bash
2.訪問Jenkins控制台日志
docker logs <CONTAINER ID>
上面獲取管理員密碼就是就是用的這個命令,部署下來還挺快的,大家動手試試吧!