Jenkins
特性
- 開源java語言開發持續集成,持續部署工具
- 易于安裝:yum/docker/war
- 消息通知及測試報告:集成RSS/e-mail,通過rss發布構建結果或當構建完成時候通過email通知,生成junit測試報告
- 分布式構建:支持jenkins能夠讓多臺計算機一起構建/測試
- 豐富插件支持:git,maven,docker
持續集成流程
(1)提交代碼到git倉庫(gitlab)
(2)使用git工具到git倉庫拉取代碼到安裝jenkins的集成服務器,再配合jdk,maven等軟件完成代碼編譯,代碼測試與審查,打包工作
(3)jenkins將編譯生成的jar/war分發到測試服務器/生產服務器,完成發布,即可訪問
持續集成服務器安裝:jenkins,jdk,maven,git
安裝
(1)先安裝jdk,然后獲取jenkins安裝包
https://jenkins.io/zh/download/
如果centos地址:
https://pkg.jenkins.io/redhat-stable/
國內鏡像位置:wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.235.2-1.1.noarch.rpm
(2)安裝文件
rpm -ivh jenkins-2.235.2-1.1.noarch.rpm
(3)修改jenkins配置
vim /etc/sysconfig/jenkins
修改為:
JENKINS_USER="root"
JENKINS_PORT="8888"
(4)啟動jenkins
systemctl start jenkins
啟動jenkins報錯: Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.
按提示輸入:systemctl status jenkins.service檢查原因
解決方法:
- 查看當前Java的環境變量 echo $JAVA_HOME
-
復制Java的環境變量地址, 編輯/etc/init.d/jenkins文件, 指定位置添加該地址, 后綴附上/bin/java vim /etc/init.d/jenkins
image.png
修改完重啟jenkins
systemctl start jenkins
可以看到啟動成功
(5)訪問服務器地址/8888端口
(6)獲取并輸入admin賬戶密碼
cat /var/lib/jenkins/secrets/initialAdminPassword
(7)跳過插件安裝
jenkins插件默認連接官網下載,速度很慢,暫時跳過
選擇自己選擇插件安裝,無需推薦安裝,然后選擇無
插件安裝
jenkins自身不提供一些功能,我們利用插件實現從gitlab拉取代碼,使用maven構建項目
(1)修改jenkins插件下載地址
將默認官網插件下載地址更改為國內插件地址
jenkins->manage jenkins->manage plugins->available
查出我們可以用的官方插件,這一個tab頁面加載速度慢,因為查詢是走的官網
通過這一步驟我們就將jenkins官方的插件列表下載到了本地,然后修改地址文件,替換為國內插件地址
cd /var/lib/jenkins/updates
## 替換命令 將jenkins官方地址更改為國內鏡像地址,將里面的google地址更改為百度
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
通過上面的操作,我們以后下載插件的速度將會很快
(2)jenkins操作界面manager plugins點擊advanced,將update site地址更改為國內插件地址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
(3)更改完配置,重啟jenkins,不需要去服務器重啟,只需要在jenkins網頁訪問端口如8888后加上/restart命令,然后選擇yes進行重啟
(4)在上一步重啟完成之后,頁面重新登錄,我們準備下載安裝jenkins中文漢化插件(部分漢化)
manage jenkins->manage plugins->available
等頁面加載完畢,然后在查找框中輸入chinese
找到以后,勾選第二項,下載完后直接重啟,該插件需要重啟生效
選擇restart選項以后如果頁面沒重啟刷新頁面即可重啟,再一次進入可以看到中文界面
jenkins用戶權限管理
不同的用戶登錄jenkins應該有不同的權限,我們使用role-based authorization strategy
插件來管理jenkins用戶權限
(1)安裝該插件
這次我們選擇直接安裝,因為該插件不需要重啟生效
(2)安裝完成后,選擇主菜單->系統管理-> 全局安全配置
進來以后可以發現授權策略,默認為登錄用戶具有一切權限,很明顯是不合理的,我們需要不同的人員擁有不同的角色,進而有不同的權限,因此我們修改為role based strategy(安裝了插件才會顯示該選項),然后保存
(3)創建角色,主菜單-> manage jenkins選擇下面的manage and assign roles
manage roles角色主要有3種,
第一種 global roles:用于管理jenkins,比如admin
我們在這里面增加baseRole全局基礎角色,用于給project roles下面的角色增加訪問jenkins的權限,給baseRole的權限有overall中的read,有了這個就這個角色有了基本的登錄權限
第二種 project roles:根據項目來分配的角色,不同的項目被不同的人訪問
這里填入角色名稱和角色能訪問項目的正則表達式(pattern)
比如role1 pattern=radientApi.*,即能訪問radientApi開頭的項目,同時勾選job下面的所有權限
第三種 slave roles:節點角色,場景:jenkins主從下的角色,暫時用不到
最后保存
(4)創建用戶:再次選擇manage jenkins-> manage users-> 新增用戶
然后我們如果不分配角色給用戶,我們直接用該用戶賬戶進行登錄的話,結果如下
因此我們重新用管理員賬戶登錄,選擇主菜單 manage jenkins-> manage and assign roles-> 分配角色
其中又分為global roles,item roles,node roles
我們在global roles中為我們的創建的radientApiTestUser用戶分配baseRole角色,讓他具有登錄權限
此時如果重新登錄radientApiTestUser用戶,是可以看到基本的列表的,但是無法看到項目
然后在item roles為其添加role1角色
(5)建立項目測試
任務名稱輸入radientApi,然后暫時選擇自有風格項目選項,然后確定,我們radientApiTest測試用戶就可以在項目列表看到這個項目了,因為他的角色對于項目pattern radientApi.* 具有查看權限
jenkins憑證管理
憑證可以用來存儲需要密文保護的DB密碼,gitlab密碼信息,docker倉庫密碼等,以便jenkins和這些第三方應用交互
(1)安裝credentials binding插件
manage jenkins->manage plugins ->可選插件->等加載完畢再去搜索
點擊直接安裝,然后回到主界面
(2)安裝完后,在系統配置中可以看到憑據菜單
點擊右側的提供者-> 全局
然后點擊左側,新建憑證
可選的憑證類型有5種,前兩種常見:
- username with password:(常見)
存儲一些用戶名和密碼來登錄的憑證,比如我們使用gitlab去拉取代碼,需要用到gitlab賬戶信息,那我們就可以使用這個憑證 - ssh username with private key:(常見)
應用在ssh的免密登錄的情況下,gitlab和github均支持這種登錄方式 - secret file
密碼文件,即支持密鑰文件的方式存儲 - secret text
密鑰文本 -
certificate
證書類型
image.png
(3)測試前兩種憑證
image.png
在github,gitlab上拉取代碼有兩種方式,http方式用的是普通的用戶名密碼方式,ssh方式即可以免去密碼的方式拉取代碼
(3.1)安裝git插件和git工具
為了讓jenkins支持從gitlab上拉取代碼,需要jenkins網頁端安裝git插件以及在安裝有jenkins的centos服務器上安裝git
直接安裝完畢后,我們在主控制臺,選擇new item來隨便創建一個項目
點擊確定以后
可以在git選項的repositories填寫需要拉取代碼的git倉庫的信息
然后我們下一步在安裝有jenkins的服務器上裝上git(不裝的話,jenkins是無法到git上拉取代碼)
yum install git -y 安裝
git --version 安裝后查看版本
(3.2)上一步將git裝好以后,我們就可以在利用jenkins去gitlab上拉取代碼,我們首先創建一個username with password的憑證
用戶名,密碼就是登陸gitlab的用戶名和密碼,點擊確定,這樣就可以看到我們創建的這個憑證
(3.3)使用上面創建的憑證
點擊自己的某個項目進入項目管理頁面,點擊項目管理頁面左側的配置,進入項目配置頁面
源碼管理用于在git拉取代碼,倉庫地址根據登錄類型(username password,ssh)的不同,地址不一樣,我們在gitlab上復制http形式的倉庫url填入下面第一個選項,然后在沒有選擇第二項的時候,將會報錯,因為沒有權限去這個地址拉取代碼,因此我們在下面的credentials中選擇我們剛剛創建好的憑證
最后點擊應用,保存
然后我們點擊立即構建來構建這個項目(這里的構建其實就是將gitlab上的代碼拉到jenkins服務器磁盤上指定目錄)
然后可以點擊構建歷史中的記錄來進入構建詳情,選擇控制臺輸出查看項目構建情況,最后jenkins會將項目的代碼拉取到jenkins服務器的/var/lib/jenkins/workspace這個目錄下面,我們可以在安裝jenkins的對應服務器目錄進行查看
可以看到磁盤上已經將gitlab上的項目的源代碼下載到了磁盤本地
(3.4)ssh免登陸憑證
需要在jenkins服務器防止我們的私鑰,將我們的公鑰上傳到gitlab服務器
(3.4.1)使用root用戶生成公鑰和私鑰
ssh-keygen -t rsa
在/root/.ssh/目錄保存了公鑰和私鑰
(3.4.2)將上一步生成的公鑰 id_rsa.pub的內容復制到gitlab上,我們首先用管理員的賬戶登錄gitlab,然后選擇用戶設置,將公鑰內容填入
至于私鑰,我們可以用到jenkins的憑證管理來管理私鑰,來到jenkins的憑證管理,添加一個ssh憑證
保存,然后跟上面一樣,在項目的配置界面的源碼管理中,倉庫地址改成gitlab的ssh地址不再用http,然后憑證選擇ssh方式,繼續點擊構建(目前的構建僅僅是拉取代碼到jenkins服務器磁盤)就可以
maven安裝配置
在jenkins繼承服務器上,我們需要安裝maven來編譯和打包項目
(1)安裝maven
https://maven.apache.org/download.cgi
下載maven包,上傳到jenkins服務器
tar -xzvf apache-maven-3.6.3-bin.tar.gz
mkdir -p /home/develop/maven_3.6.3
mv apache-maven-3.6.3/* /home/develop/maven_3.6.3 移動文件
(2)配置環境變量
vim /etc/profile
export JAVA_HOME=/home/develop/jdk1.8.0_161
export MAVEN_HOME=/home/develop/maven_3.6.3
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
使配置生效
source /etc/profile
查看maven版本
mvn -v
(3)jenkins的后臺系統管理-> 全局工具配置
在這里我們需要配置jdk和maven,配置jdk的時候,點擊新增jdk,然后取消勾選自動安裝,因為我們已經在jenkins服務器上自己安裝了jdk了,然后界面會更換到下一個界面
下一步配置maven,同樣,我們點擊新增maven并取消勾選自動安裝install automatically
最后,我們點擊應用,再點擊保存,即可保存輸入
(4)manage jenkins->configure system(系統配置)
我們需要在系統配置中加入一些全局的變量,讓jenkins知道maven的一些命令
第三個屬性的key是固定的,即往linux的path追加了maven的命令
最后點擊應用,保存
(5)為了提高下載速度,修改maven的鏡像為國內鏡像
// 創建本地倉庫目錄
mkdir -p /home/maven_repo
// 修改maven的settings.xml
vim /home/develop/maven_3.6.3/conf/settings.xml
本地倉庫改為:
<localRepository>/home/maven_repo</localRepository>
添加阿里云私服地址
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
(6)上一步我們將代碼拉取下來,這一步我們完成代碼的編譯和打包
我們點擊增加構建步驟,選擇執行shell腳本,然后在命令中輸入測試命令
點擊應用保存,然后回到項目配置界面,左側選擇build now,然后jenkins界面看控制臺輸出,可以看到首次構建會拉取依賴到裝有jenkins服務器上的maven倉庫中,最后完成編譯和打包,成功即證明我們之前的maven配置是有效的
我們然后到jenkins拉取在jenkins所在服務器的磁盤上的項目的target目錄中已經有了編輯構建的war/jar包
tomcat安裝配置
(1)在所有的項目要部署的負載節點安裝jdk和tomcat
(2)登錄tomcat頁面,因為jenkins是需要tomcat的賬戶才能將構建好的項目的war包遠程傳輸到裝tomcat的負載節點,因此需要為tomcat服務器開啟賬戶權限(默認情況是沒有開啟的),驗證方式:點擊manager webapp
我們將會看到403的無權限界面,即目前是沒有配置賬戶的,配置完以后,該界面是允許我們去管理我們的項目的
(3)我們去兩個負載節點的tomcat的文件夾里面conf目錄,然后
vim tomcat-users.xml
默認沒有配置,我們按照這個示范進行配置
我們直接將所有的role標簽和<user>標簽賦值到哪個tomcat-users.xml中的tomcat-users范圍內,然后保存
(4)修改/webapps/manager/META-INF/context.xml ,注釋掉下面的代碼,因為默認是不允許我們遠程訪問tomcat的,注釋了就允許遠程訪問了
這時候我們就完成了tomcat用戶和角色的配置,接著進行重啟tomcat操作
然后重新在tomcat界面,選擇manager tomcat,輸入tomcat用戶賬戶名和密碼進入tomcat管理頁面