1. 程式人生 > >在搭建基於jenkins+maven+git+docker的全自動化部署時遇到的問題

在搭建基於jenkins+maven+git+docker的全自動化部署時遇到的問題

系統版本

由於docker的安裝要求linux系統核心必須在3.10以上,因此,系統版本我選擇的是centos7.2,採用的是淘寶的雲伺服器,因此在更換系統以及在今後的docker等方面都簡單了不少,不得不說阿里的東西還是很不錯的,由於公司要求,我們將root使用者禁掉了,但在我的部署過程中有不少小的問題,大多是由於許可權的問題或者由於使用者的問題。

docker:

由於採用的系統版本較高,因此,在安裝docker的時候就不用那麼費勁了,一條命令搞定:

yum install docker-engine

然後啟動docker:

service docker start

在選擇映象時,千萬不要選擇直接下載dockerhub上的映象,因為下載的速度會讓你抓狂,這裡不得不再次提起“淘寶”,阿里為docker提供了映象雲加速功能,網址是這個:

https://dev.aliyun.com/search.html?spm=5176.100208.8.1.xzVy1v下載映象的速度提高了好多倍。
我選擇下載了幾個映象,安裝了jdk8的映象,安裝了jenkins的映象,安裝了redis的映象。

jdk:

由於專案採用的是spring boot,因此jdk版本採用的是jdk1.8。jdk的安裝在我之前的部落格中有詳細步驟。

maven:

maven採用的目前最新的3.3.9版本,maven的安裝就不說了,在官網下載然後找個資料夾解壓,將maven的主目錄新增的PATH中就可以了。這裡推薦一個依舊是“淘寶”的福利,阿里巴巴的Maven映象,速度槓槓的!

<mirror>
 <id>alimaven</id>
 <name>aliyun maven</name>
 <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
 <mirrorOf>central</mirrorOf>        
</mirror>

jenkins:

jenkins在這我要多說幾句,jenkins安裝方式非常簡單,只需要在官網下載war包,然後找個tomcat容器,把war包扔進去,啟動就可以了。因為我這裡採用的docker,因此我在docker官網找了一個jenkins的映象,直接啟動的jenkins的映象,但因此讓我走了不少的彎路,為自己後面的部署安裝埋下了不少坑,因此我建議各位如果選用jenkins,最好還是在宿主機上直接安裝,這樣可以省掉不少麻煩。

坑1.由於我採用的jenkins是一個docker映象,因此,映象內部並沒有maven等一些程式,在配置maven的時候真是藍瘦香菇,後來通過採用docker持久化儲存的方法將這個坑填了起來。接下來我貼出我的啟動命令:

sudo docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v /home/ziteng/mysoft/jenkins:/var/jenkins_home -v /home/ziteng/mysoft/apache-maven-3.3.9:/usr/local/maven -v /usr/java/jdk1.8.0_112:/usr/local/jdk jenkins

-v後面就是我將宿主機的安裝路勁對映到映象中,這樣在jenkins中就可以配置了。

坑2.用過jenkins的人肯定知道,jenkins的外掛下載真是一種折磨,無數次失敗,讓人崩潰。後來通過找資料發現國內的一個映象:http://mirror.esuni.jp/jenkins/updates/update-center.json,感覺速度提高了不少,當然還是會失敗,只能多試幾次,而且在使用中我發現,jenkins的外掛有相互依賴的問題,如果被依賴的外掛沒有下載成功,那麼隨後會有一連串的失敗下載,因此我在發現一連串的外掛下載失敗後,不要慌,只需要從第一個錯誤開始逐個嘗試下載,我的外掛下載問題就這樣實現的。

坑3.在jenkins映象通過ssh連線到宿主機以後,會發現好多命令都執行不了了,這個問題糾結了我好久,後來查資料發現,原來沒有了環境變數,因此,在執行ssh遠端指令碼時,需要首先採用:

export PATH="/bin:/usr/local/sbin:/usr/local/bin..."

將PATH宣告,然後就可以繼續執行命令了。
坑4.由於我的jenkins安裝在映象中,在執行自動化構建專案的時候,需要執行maven和docker的命令,但是這些命令在宿主機中,因此jenkins需要通過ssh連線到宿主機,然後進行執行。在jenkins中配置ssh時需要下載一個Publish Server的外掛,在系統管理中配置ssh的主機資訊,然後在jenkins中就可以選擇執行遠端ssh的shell指令碼了。在這裡有一個小技巧如果在指令碼中執行sudo提權語句的時候,可以採用:

echo "你的密碼"|sudo -S 你的命令

當然這種方法會導致密碼在shell指令碼中的暴露,請謹慎使用。