1. 程式人生 > >使用 Docker 安裝 Jenkins 並構建Maven專案

使用 Docker 安裝 Jenkins 並構建Maven專案

環境: Ubuntu 16.04   + Docker兩篇官方文件歸納為”一句話搞定“:docker run \  -u root \  --rm \  -d \  -p 8080:8080 \  -p 50000:50000 \  -v jenkins-data:/var/jenkins_home \  -v /var/run/docker.sock:/var/run/docker.sock \--name jenkins-blueocean\  jenkinsci/blueocean

一探究竟:

執行完上面的命令後,就算完成了平臺在伺服器上的安裝,下面需要完成平臺的自身的初始化和專案的構建。由於是初次配置,難免因為各種差錯而歸零、覆盤,故刪除命令可以幫助心手處理問題——解決不了問題,就把出現問題的部分解決。Docker 常用命令刪除相關命令:#停止所有的container,這樣才能夠刪除其中的images:docker stop $(docker ps -a -q)#如果想要刪除所有container的話再加一個指令:docker rm $(docker ps -a -q)#檢視當前有些什麼imagesdocker images#刪除images,通過image的id來指定刪除誰docker rmi <image id>#想要刪除untagged images,也就是那些id為<None>的image的話可以用docker rmi $(docker images | grep "^<none>" | awk "{print $3}")#要刪除全部image的話docker rmi $(docker images -q)#檢視當前執行的容器資訊docker -ps
#使用命令列中的bashdocker exec -it ${contanierId}  bash

洞若觀火:

在上一目中,我們瞭解了一點會用到的Docker命令,但是我們的Jenkins配置過程其實並沒有往前推進,讓我們繼續。訪問主機的8080埠,會進入要求輸入初始密碼,這一點官方文件裡提到了。但是,Jenkins 裝在 Docker 中,如何能進入虛擬Volume下的的目錄呢,但答案已經有了:#先檢視Jenkins Containar 的iddocker ps#再根據id 進入即可docker exec -it ${contanierId}  bash#然後進入jenkins_home目錄cd /var/jenkins_home/secrets#檢視初始密碼cat initialAdminPassword將密碼填入即可進入愉快的”下一步下一步“,然後Jenkins就可以登入使用了。

只欠東風:

Jenkins Container 中安裝 JDK宿主(真機 Ubuntu 16.04)的 JDK 在Jenkins容器裡是不能用的,就像Windows裝的 VirtualBox裡的虛擬機器不能用 Windows 真機裡的JDK一樣,所以需要在容器裡再配置JDK。配置JDK這一套操作,從初學Java就開始一把梭:去Oracle下載映象,解壓到/usr/lib/jvm 或者  /opt/java 又或者任何你喜歡的地方,配置~/.bashrc 並更更新。只是這裡有一個需要用到的新命令:#拷貝宿主的檔案到容器的目錄下docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
#拷貝docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-拷貝,解壓,移動,配置環境變數一把梭之後,執行java -version 報錯了,說***/bin/java:No such file or directory有方案說:docker exec -it ${containerId} bash 是不能執行命令的,但之後使用bash 執行 java -version 命令又沒有任何問題。當時解決辦法 不用 bash 用 sh 來驗證是否配置成功:docker exec -it #映象id shecho ${JAVA_HOME}# 找到OpenJDK的位置

殊途同歸:

經過以上的配置,Jenkins可以正常工作了。但是,偏偏發現 Jenkins 新建專案是沒有“構建Maven專案”的選項。不用慌張,在Jenkins 中 安裝Maven專案外掛:Maven Integration plugin ,就有了(為了避免其他外掛的確實,我把名稱裡帶 Maven 的外掛全裝上了)。之後一切順風順水:新增原始碼管理,新增構建規則,諸如此類。終於可以愉快的使用 Jenkins 了。