基於Jenkins+Git+Docker的持續整合(上)

dbasdk發表於2018-02-28
Git是目前最為流行的版本管理工具之一;
Jenkins是目前最為流行的持續整合工具之一;
Docker則是目前最為火熱的輕量化容器解決方案;
前兩者的組合已經非常普遍,那麼能不能再與Docker結合起來呢?當然是肯定的,我們希望透過Jenkins結合docker,即能最大化的利用系統資源,又能實現應用服務的快速構建,本文將詳細介紹,如何基於Jenkins+Git+Docker搭建一套支援快速構建的持續整合方案。

本文所演示環境涉及三臺(類)伺服器,不過在文中僅涉及到對後兩類伺服器的配置:
Git伺服器:172.16.1.8,現有服務,用於管理程式碼;
Docker宿主機伺服器:172.19.10.157,待搭建,用於執行docker容器;
Jenkins伺服器:172.19.10.232,待搭建,用於執行Jenkins服務。

一、安裝和初始化Jenkins
Jenkins伺服器中已經安裝配置好JDK/MAVEN/TOMCAT幾個軟體的執行環境。在本例中,所使用的上述三軟體的版本為:apache-maven-3.3.3、jdk1.7.0_09、tomcat-7.0.34,並均執行於作業系統使用者tomcat下。
提示1:以下操作是在Jenkins伺服器執行,如非特別說明,均是在tomcat使用者下操作。
提示2:在啟動tomcat服務之前,建議先修改相關環境變數,透過JAVA_OPS引數為JAVA虛擬機器分配適當的記憶體空間,避免Tomcat執行過程中出現記憶體溢位的情況。
例如:
[tomcat@web01 ~]$ vi /home/tomcat/tomcat-7.0.34/bin/catalina.sh
檔案頭部增加下列內容(考慮到本地測試伺服器配置較差,因此分配記憶體較小,大家可基於個人實際情況對引數值進行修改):
JAVA_OPTS="-server -Xms512M -Xmx1024M -XX:PermSize=128M -XX:MaxPermSize=256m -Dcom.sun.management.jmxremote  -Duser.timezone=GMT+08 -Djava.awt.headless=true"

Jenkins的安裝十分簡單,下載好的Jenkins就是一個war包,直接複製到Tomcat的webapps目錄下即可執行。
那麼我們就先來下載最新版本的jenkins,並儲存到Tomcat應用目錄下:
[tomcat@web01 ~]$ wget -P /home/tomcat/tomcat-7.0.34/webapps

啟動tomcat服務:

[tomcat@web01 ~]$ tomcat-7.0.34/bin/catalina.sh start
Using CATALINA_BASE:   /home/tomcat/tomcat-7.0.34
Using CATALINA_HOME:   /home/tomcat/tomcat-7.0.34
Using CATALINA_TMPDIR: /home/tomcat/tomcat-7.0.34/temp
Using JRE_HOME:        /home/tomcat/jdk1.7.0_60
Using CLASSPATH:       /home/tomcat/tomcat-7.0.34/bin/bootstrap.jar:/home/tomcat/tomcat-7.0.34/bin/tomcat-juli.jar

啟動過程中注意觀察tomcat的輸出日誌,我們下載的jenkins War會自動進行解壓縮和初始化,過程中建立的預設管理員帳戶和密碼資訊,在日誌檔案中會有所體現,例如:

[tomcat@web01 ~]$ tail -100f tomcat-7.0.34/logs/catalina.out 
...............
Jan 21, 2017 13:04:11 PM jenkins.install.SetupWizard init
INFO: 

*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

8c5abb9fcc7b4258aadac65ed5113b5a

This may also be found at: /home/tomcat/.jenkins/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

............
INFO: Finished Download metadata. 20,529 ms
............

然後透過瀏覽器訪問jenkins,未登入的情況下會跳轉到登入頁,第一次登入時需要輸入初始化帳戶的密碼,也就是前面我們在日誌檔案中提示的那段欄位:

 

輸入管理員密碼,點選Continue按鈕後,會有一個初始化的過程,需要等待個幾秒鐘,而後將跳轉到選裝外掛的頁面,如下所示:

 

我們選擇後者,以自定義的方式安裝需要的元件。

 

預設情況下,它也仍為幫我們選擇一些必備/常用元件(點上圖紅色箭頭所指的標籤,會對外掛進行預設勾選),在此基礎之上,我們又新增了一些元件,主要包括:


? Git plugin:支援基於Git進行構建的外掛;

? Git Parameter Plug-In:我們的軟體釋出是基於分支,而不是的基於master,透過Git Parameter外掛方便我們選擇要構建的分支版本,當然如果您沒有這方面的需求,那麼也可以不安裝本外掛;
? GitLab Plugin:因為我們本地的Git是基於GitLab搭建的一套私服,選擇這一元件主要是為了能夠觸發一些自動化構建相關的操作;
? Maven Integration plugin:釋出Maven2/3專案的外掛;
? Publish Over SSH:基於SSH釋出到另外的節點;
? SSH plugin :與上同理;

當然大家也可以直接全選,安裝所有的外掛,儘管可能有很多外掛都用不上。其實這裡想告訴大家,不必過於糾結安裝什麼外掛,以及安裝的正確與否,那個都不重要,因為我們隨時可以根據需求來呼叫我們安裝的外掛。


選擇完要安裝的外掛後點選Install:

 

之後就需要等待一會了,根據你選擇外掛的多寡,耗費的時間也不同。等到所有的外掛全部安裝完之後,還有一個步驟,建立管理員帳戶:

 

然後,就能看到Jenkins的主介面了。

 
二、搭建docker宿主機
提示:以下操作是在docker宿主機端執行,如非特別說明,均是在root使用者下操作。

增加一個軟體安裝源,將docker官方地址做為軟體的安裝源加入本地三方源地址,編輯檔案如下:

root@docker01:~# vi /etc/apt/sources.list.d/docker.list 

只需增加一行:

deb [arch=amd64] debian-jessie main

接下來別忙著執行apt-get,先更新一下apt源,以確保能夠檢測到最新的資源,執行命令如下:

root@docker01:~# apt-get update 

如果執行apt-get update時遇到:E: The method driver /usr/lib/apt/methods/https could not be found.那麼先執行:# apt-get install apt-transport-https

然後就可以透過apt-get安裝docker了,執行命令如下:
root@docker01:~# apt-get install docker-engine
Reading package lists... Done
Building dependency tree       
Reading state information... Done
...................

安裝成功之後,透過docker命令檢視當前docker版本:

root@docker01:~# docker --version
Docker version 1.13.1, build 092cba3

接下來我們建立一個專用使用者docker並設定初始密碼(為演示方便也設定為docker):

root@docker01:~# useradd docker -d /home/docker -s /bin/bash -g docker
root@docker01:~# echo "docker:docker" | chpasswd

這一步的目的主要是為了在jenkins中配置ssh釋出時,不必直接使用root這樣一個具備超大許可權的使用者。

此時映象、容器都是空的。
root@docker01:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
root@docker01:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

考慮到我們接下來執行的JAVA工程要執行於tomcat容器,因此我們先拉取一個tomcat映象,做為基礎映象,執行命令如下:

root@docker01:~# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
5040bd298390: Pulling fs layer 
fce5728aad85: Pulling fs layer 
c42794440453: Pulling fs layer 
9789263043d1: Waiting 
6c6ea13aad15: Waiting 
...............
...............
Digest: sha256:2c72f00904dc057441c388bb9101f7ca254174c9b061f99789e48bf495226deb
Status: Downloaded newer image for tomcat:latest
root@docker01:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              latest              99765a0d7f44        14 hours ago        355 MB
Ok,這樣Docker宿主機環境就搭建好了。(未完待續

更多內容請掃描二維碼,關注【IT營養師】!




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-2151375/,如需轉載,請註明出處,否則將追究法律責任。

相關文章