由於公司需要,這邊記錄一下自己在學習Jenkins的一些過程,以及遇到的一些坑。
安裝
安裝Jenkins
Jenkins的安裝還是比較簡單的,我用的是CentOs 6,安裝步驟如下:
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins
參考網址:https://pkg.jenkins.io/redhat-stable/
安裝JDK
安裝完後不要着急啓動,Jenkins需要JAVA環境,我這裏用的是:jdk-8u161-linux-x64.tar.gz
tar -zxvf jdk-8u161-linux-x64.tar.gz
mv /upload/jdk1.8.0_161/ /usr/local/java/jdk1.8/
解壓完成後添加一下環境變量vi /etc/profile
,在文件的最前面添加:
export JAVA_HOME=/usr/local/java/jdk1.8
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
然後刷新一下文件,讓修改生效source /etc/profile
,檢查一下:
[root@localhost upload]# java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
修改Jenkins啓動文件
JAVA環境安裝好了,但這裏Jenkins還是啓動不了的,這也是一個坑,嘗試啓動:
[root@localhost upload]# service jenkins start
Starting Jenkins bash: /usr/bin/java: No such file or directory
[FAILED]
根據提示,知道jenkins沒有找到java這個文件,我們需要幫他找,修改jenkins的啓動文件vi /etc/init.d/jenkins
,裏面有這麼一段代碼:
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/bin/java
"
加上我們剛剛安裝JDK的位置/usr/local/java/jdk1.8/bin/java
,注意這裏需要的事java這個可執行文件的路徑,修改後是這樣:
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/bin/java
/usr/local/java/jdk1.8/bin/java
"
再次重啓,成功了,我們可以查看啓動日誌tail -f /var/log/jenkins/jenkins.log
。
日誌中會打印出第一次解鎖Jenkins的密碼
或者在這裏查看cat /var/lib/jenkins/secrets/initialAdminPassword
開放端口
如果防火牆是永久關閉的,跳過這一步。
Jenkins默認用8080端口啓動,可以在vi /etc/sysconfig/jenkins
裏面搜索JENKINS_PORT="8080"
看到,然後在vi /etc/sysconfig/iptables
裏面添加一行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
保存退出後,重啓iptables:service iptables restart
初始化Jenkins
訪問Jenkins服務器的8080端口,需要填寫前面提到的解鎖密碼,然後安裝推薦的插件,等待安裝完成。
推薦插件安裝完成後,需要增加一個賬戶,根據需要自己填寫。
下一步的實例配置用默認的即可。
全部配置完成後,進入Jenkins主界面。
搭建Git + Maven + SSH Server 的CI(持續集成)環境
Jenkins相關插件安裝
安裝推薦插件後,Git Plugins
已經有了,還需要安裝Maven Integration
和Publish Over SSH
,我們通過 系統管理 -> 插件管理 -> 可選插件,搜索前面提到的倆個插件,全部勾選後點擊直接安裝,等待安裝完成後重啓Jenkins:service jenkins restart
。
Maven 安裝
下載maven:http://maven.apache.org/download.cgi ,我這裏用的是當前的最新版apache-maven-3.6.0-bin.tar.gz
上傳到Jenkins服務器上,解壓:tar -zxvf apache-maven-3.6.0-bin.tar.gz
解壓後移動到:mv apache-maven-3.6.0 /usr/local/maven
增加環境變量vi /etc/profile
:
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
刷新配置文件後測試是否成功:
[root@localhost maven]# source /etc/profile
[root@localhost maven]# mvn -version
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T11:41:47-07:00)
Maven home: /usr/local/maven
Java version: 1.8.0_161, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-754.2.1.el6.x86_64", arch: "amd64", family: "unix"
Maven安裝結束
Git 安裝
直接使用:yum -y install git
,等待安裝完成即可。
測試是否安裝成功:
[root@localhost maven]# git --version
git version 1.7.1
Jenkins全局工具配置
系統管理 -> 全局工具配置 ,對JDK、git、Maven做相關配置:
保存即可。
目標服務器免密配置
Jenkins有時需要對其他服務器發送文件或者是命令,這時就需要免密配置了。
由於Jenkins是使用jenkins用戶執行操作的,所以我們先切換到jenkins用戶:su jenkins
默認情況下可能是切換不了的,我們需要修改vi /etc/passwd
,找到jenkins相關的那條:
jenkins:x:496:493:Jenkins Automation Server:/var/lib/jenkins:/bin/false
修改爲:
jenkins:x:496:493:Jenkins Automation Server:/var/lib/jenkins:/bin/bash
修改後再次執行:su jenkins
,成功切換至jenkins用戶。
生成密鑰:ssh-keygen -t rsa
,全部回車通過,使用默認值。
成功後會在 /var/lib/jenkins/.ssh/ 目錄下生成一對公私鑰文件,查看公鑰:cat /var/lib/jenkins/.ssh/id_rsa.pub
,複製公鑰的內容,在目標服務器的/root/.ssh
目錄下會有一個authorized_keys
文件,沒有就自己創建,然後將公鑰的內容複製到文件中。
設置authorized_keys權限
$ chmod 600 authorized_keys
設置.ssh目錄權限
$ chmod 700 -R .ssh
設置權限後重啓一下sshd服務service sshd restart
重啓成功後來到Jenkins服務器測試一下:ssh root@目標服務器IP
,如果無需輸入密碼則配置成功。
增加SSH Server
系統管理 -> 系統配置 -> Publish over SSH
我們在Path to key 這一欄填上Jenkins服務器的私鑰位置/var/lib/jenkins/.ssh/id_rsa
,其他的配置像這樣:
Remote Directory:是Jenkins鏈接目標服務器後的工作目錄
創建項目
經過以上的準備,我們終於可以創建項目了,點擊主界面下的新建任務,輸入任務名稱,選擇Maven項目。
源碼
進入項目的詳細配置頁面,首先設置項目源碼的位置:
這裏我使用的是碼雲,如果我們沒有把Jenkins的公鑰放在碼雲上,是不能連接到這個倉庫的,就像圖中一樣,設置好公鑰就不會有圖上的提示了,這裏注意一點,第一次設置完公鑰需手動連接一次git倉庫,比如手動git clone一次項目,因爲在第一次連接會有一個連接提示,可能會導致Jenkins連接失敗。
編譯
Root POM:這裏天pom.xml的位置,從項目的根路徑開始。
Goals and options:這裏填mvn後跟的命令及參數,這裏是對我們的項目打了包。
部署
這是編譯後的操作,首選我們選擇:
也就是說在編譯成功後纔會執行下面的操作。
編譯成功後我們只需將其複製到目標服務器並運行即可。
添加一個:
Name:這裏選擇的就是我們剛剛配置的SSH Server
Source files:要傳輸的文件在哪,相對於項目根路徑
Remove prefix:忽略的前綴,作用是在傳輸過後不攜帶前綴的目錄
Remote directory:傳輸的文件存放在那個目錄下,這裏是相對於SSH Server中配置的Remote directory目錄的
Exec command:傳輸完成後執行的命令
到這裏,一個簡單的Maven + Git + SSH Server的CI環境就搭好了。
構建項目
進入項目詳情,點擊立即構建。
構建過程中可以進入控制檯查看日誌。
等待其構建完成即可。