Devops學習實踐(二) Jenkins安裝、配置、任務構建
隨著工作的要求,devops作為今年工作的一個重點,由此也引發了自己對於devops相關的工具和技術的學習和實踐。基於上述背景,這個系列將逐步的介紹SVN的安裝和配置、jenkins安裝和配置、reviewboard、findbugs、checkstyle、sonar、testng、mockito等。【每個合格的程式設計師都是耐操的】
上一節說了SVN的安裝和配置,這一節說Jenkins的持續整合
一、目標
Jenkins是一個開源軟體專案,旨在提供一個開放易用的軟體平臺,使軟體的持續整合變成可能。它用於監控持續重複的工作,功能包括:1、持續的軟體版本釋出/測試專案。
2、監控外部呼叫執行的工作
上面這一小段化來自百度百科,那麼這是什麼意思呢?這可以從下面這樣的場景來說。我們開發一個軟體,設計、編碼、測試、整合、釋出,尤其編碼後進行測試、整合、釋出這樣的環節,隨著開發模式越來越向敏捷、迭代模式流行,也就會面對持續交付的問題越來越有壓力,需要對這些環節進行有效的、持續的管理。Jenkins就是這樣一個平臺,可以有效的納入,測試、整合、釋出這些環節,串起來,給所有參與的人,一個可以檢視和監控的平臺。
簡單的說,它是提高測試、整合、釋出效率的工具。
本次實踐的目標是:
1、安裝jenkins
2、通過Jenkins 來構建任務,通過Jenkins,與SVN,Maven配合起來,完成從SVN上獲取程式碼,通過Maven進行編譯打包,完成後傳送郵件,
(釋出以後再說)
二、實踐環境說明
Jenkins現在發展的很快,很多資料與自己的版本不一致,其實是因為版本的不同,所以有必要交待一下環境:
1、windows 虛擬機器:192.168.136.100 SVN伺服器
2、Linux Centos虛擬機器: 192.168.136.144 Jenkins服務、Maven 服務
3、Jenkins的版本是 2.32 ,安裝包為:jenkins-2.32.1-1.1.noarch.rpm
三、Jenkins的安裝
Jenkins的安裝非常簡單,可以下載war包,直接啟動。Jenkins的war包,用Jetty來發布Http;也可以採用rpm包來安裝,我採用的rpm包安裝。
首先從網站上下載Jenkins,官網為:https://jenkins.io/index.html
我的目標機是Centos,選擇這個,
下載後,將安裝包上傳到Centos伺服器上,採用rpm包安裝的命令如下:
rpm -ivh jenkins-2.32.1-1.1.noarch.rpm
這個執行後,就安裝好了,要執行或者重啟採用如下命令:
啟動命令: service jenkins
start
重啟命令: service jenkins restart
安裝完成後,jenkins實際的安裝目錄在: /var/lib/jenkins
這裡紅色框出來的內容,需要注意一下,要不以後也是一個坑。 jenkins預設是用 jenkins使用者安裝的,這裡mark一下,以後碰到坑時,知道如何處理。
四、Jenkins的配置
4.1 Jenkins的初次安裝和使用
在本機瀏覽器裡開啟Jenkins網址: http://192.168.136.144:8080/
第一次安裝,會彈出輸入key的介面
根據提示,從上述目錄下,cat 一下這個檔案,複製 password 到這裡填入,繼續,如果出現下面的視窗,說明是網路問題,檢查網路。
如果網路正常,那麼會出現下面的安裝外掛的介面,讓它自己安裝就好了。
如果一切順利,那麼會彈出如下介面:
點選 Start 按鈕,進入Jenkins 環境
4.2 Jenkins 環境,構建任務
Jenkins 提供了多種構建方式,本次實踐就是構建一個簡單的maven專案。下面看看如何進行的。在正式構建專案之前,需要做一下全域性的工具設定
從上圖中標註的位置,進入具體的工具配置。其中重點是 jdk 和maven的配置。 雖然jenkins裡面集成了自動下載的方法,但是在網路受到各種受限制的環境下(基於安全的考慮,很多公司有設定各種網路策略),強烈建議先從網路上下載安裝包進行安裝,然後再jenkins裡面設定HOME路徑,就可以不需要通過Jenkins來安裝了。我一開始通過jenkins安裝,構件任務失敗了3,4次,都是因為下載地址無法下載。在Tool configuration開啟的介面裡面,我們可以這樣設定:
再配置一下maven
這個配置完成後,點save。 這裡配置的內容比較,包括git,docker,以後有用到再摸索。
現在返回jenkins主選單,正式構建一個新任務。選擇新建任務,
這裡選擇構建一個自由風格的軟體專案,和很多網頁不同,這裡是沒有顯示maven 2/3 專案選項的。 在project 名字裡面,輸入自己想構建的專案名稱。這裡用的是 cwq_projecttest1
然後,進行基本的構建內容設定,主要包含如下內容:
在general 這裡,通過開啟高階選項,這裡強烈建議使用自定義的工作空間
svn的設定,URL 是一個基於MAVEN建立,並上到SVN伺服器的專案,在Credentials這裡,通過add的方式,新增SVN的使用者名稱和密碼
在構件觸發器這裡,進行如下配置,是一種每天定時的配置
這裡要注意一下 Poll SCM, 這個是指,如果配置有變化,就會觸發自動配置,裡面可以配置檢測配置變化的時間策略。
在構件這一步,選擇 invoke top-level maven targets
然後進行Maven工程具體的配置
然後點save,就可以儲存構建一個任務的基本資訊了。
儲存後,可以手工進行構建動作看是否能正常工作,如果可以正常工作,以後就靠定時機制進行自動構建了。
萬事開頭難,手工構建就報錯,通過檢視日誌,可以發現建立mkdir 錯誤,這個就涉及到前面說的jenkins 預設使用者是用jenkins使用者安裝和執行的。下圖顯示瞭如何手工構建和構建日誌如何查
通過分析,很明顯是因為jenkins使用者沒有許可權,所以需要修改jenkins啟動的使用者,本例採用設定啟動使用者為root的方式:這個設定檔案的全路徑在 /etc/sysconfig/jenkins, 修改JENKINS_UESR="root" 來進行控制啟動jenkins
儲存後,執行下列命令
service jenkins restart
通過重啟後,繼續構建,每次錯誤,都是檢視日誌,一個辦法,就是可以手工將構件的內容,在命令列環境下再執行一下。
我這裡還遇到過pom.xml 檔案錯誤的問題
這個是通過修改pom.xml 來完成的,具體pom.xml 為
[[email protected] cwq_testproject1]# cat pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.newland</groupId>
<artifactId>StudyKafkaMavenTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>kafka-demo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.8.2.0</version>
</dependency>
</dependencies>
<build>
<defaultGoal>compile</defaultGoal>
</build>
</project>
最後,構件成功,狀態紅色會改變,日誌看也提示成功
五、小結
通過構建任務開始,只是jenkins很小的一個功能起步,後面還會持續整合各種外掛,來豐富jenkins的平臺
1、網路的通暢很重要
2、許可權的控制
3、不同版本的介面是有差異的
六、補充:
1、修改jenkins的埠
jenkins的預設埠為8080,這個埠在多應用環境下,很不合適,因此需要修改。
jenkins的配置檔案為/etc/sysconfig/jenkins, 找到JENKINS_PORT="8080" 將埠修改成自己的埠。埠不要配置為1000以下,否則需要更高的許可權。
重啟後,進入jenkins 會報告 反向代理錯誤,只要進入“系統設定”,修改url ,就可以解決反向代理錯誤的問題
2、jenkins 反應比較慢
jenkins 安裝了findbugs和checkstyle後,反應很慢,因此需要修改一下jenkins引數:
vi /etc/sysconfig/jenkins
找到JENKINS_JAVA_OPTIONS="-Djava.awt.headless"
修改成
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m"
具體引數根據自己的機器實際情況調整。