Jenkins+kubernetes(第1節)

Jenkins

特性

  • 開源java語言開發持續集成,持續部署工具
  • 易于安裝:yum/docker/war
  • 消息通知及測試報告:集成RSS/e-mail,通過rss發布構建結果或當構建完成時候通過email通知,生成junit測試報告
  • 分布式構建:支持jenkins能夠讓多臺計算機一起構建/測試
  • 豐富插件支持:git,maven,docker

持續集成流程

image.png

(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檢查原因

image.png

解決方法:

  • 查看當前Java的環境變量 echo $JAVA_HOME
  • 復制Java的環境變量地址, 編輯/etc/init.d/jenkins文件, 指定位置添加該地址, 后綴附上/bin/java vim /etc/init.d/jenkins


    image.png

修改完重啟jenkins
systemctl start jenkins

image.png

可以看到啟動成功
(5)訪問服務器地址/8888端口
(6)獲取并輸入admin賬戶密碼
cat /var/lib/jenkins/secrets/initialAdminPassword
(7)跳過插件安裝
jenkins插件默認連接官網下載,速度很慢,暫時跳過
選擇自己選擇插件安裝,無需推薦安裝,然后選擇無

image.png

插件安裝

jenkins自身不提供一些功能,我們利用插件實現從gitlab拉取代碼,使用maven構建項目
(1)修改jenkins插件下載地址
將默認官網插件下載地址更改為國內插件地址
jenkins->manage jenkins->manage plugins->available

image.png

image.png

查出我們可以用的官方插件,這一個tab頁面加載速度慢,因為查詢是走的官網
image.png

通過這一步驟我們就將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
image.png

通過上面的操作,我們以后下載插件的速度將會很快
(2)jenkins操作界面manager plugins點擊advanced,將update site地址更改為國內插件地址

image.png

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
image.png

找到以后,勾選第二項,下載完后直接重啟,該插件需要重啟生效
image.png

選擇restart選項以后如果頁面沒重啟刷新頁面即可重啟,再一次進入可以看到中文界面

jenkins用戶權限管理

不同的用戶登錄jenkins應該有不同的權限,我們使用role-based authorization strategy插件來管理jenkins用戶權限
(1)安裝該插件

image.png

這次我們選擇直接安裝,因為該插件不需要重啟生效
(2)安裝完成后,選擇主菜單->系統管理-> 全局安全配置
image.png

進來以后可以發現授權策略,默認為登錄用戶具有一切權限,很明顯是不合理的,我們需要不同的人員擁有不同的角色,進而有不同的權限,因此我們修改為role based strategy(安裝了插件才會顯示該選項),然后保存


image.png

(3)創建角色,主菜單-> manage jenkins選擇下面的manage and assign roles


image.png

manage roles角色主要有3種,
第一種 global roles:用于管理jenkins,比如admin
image.png

我們在這里面增加baseRole全局基礎角色,用于給project roles下面的角色增加訪問jenkins的權限,給baseRole的權限有overall中的read,有了這個就這個角色有了基本的登錄權限
第二種 project roles:根據項目來分配的角色,不同的項目被不同的人訪問
這里填入角色名稱和角色能訪問項目的正則表達式(pattern)
比如role1 pattern=radientApi.*,即能訪問radientApi開頭的項目,同時勾選job下面的所有權限

image.png

第三種 slave roles:節點角色,場景:jenkins主從下的角色,暫時用不到

最后保存
(4)創建用戶:再次選擇manage jenkins-> manage users-> 新增用戶


image.png

然后我們如果不分配角色給用戶,我們直接用該用戶賬戶進行登錄的話,結果如下


image.png

因此我們重新用管理員賬戶登錄,選擇主菜單 manage jenkins-> manage and assign roles-> 分配角色
其中又分為global roles,item roles,node roles
我們在global roles中為我們的創建的radientApiTestUser用戶分配baseRole角色,讓他具有登錄權限


image.png

此時如果重新登錄radientApiTestUser用戶,是可以看到基本的列表的,但是無法看到項目

image.png

然后在item roles為其添加role1角色


image.png

(5)建立項目測試


image.png

任務名稱輸入radientApi,然后暫時選擇自有風格項目選項,然后確定,我們radientApiTest測試用戶就可以在項目列表看到這個項目了,因為他的角色對于項目pattern radientApi.* 具有查看權限


image.png

jenkins憑證管理

憑證可以用來存儲需要密文保護的DB密碼,gitlab密碼信息,docker倉庫密碼等,以便jenkins和這些第三方應用交互
(1)安裝credentials binding插件
manage jenkins->manage plugins ->可選插件->等加載完畢再去搜索


image.png

點擊直接安裝,然后回到主界面
(2)安裝完后,在系統配置中可以看到憑據菜單


image.png
image.png

點擊右側的提供者-> 全局


image.png

然后點擊左側,新建憑證


image.png

可選的憑證類型有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


image.png

直接安裝完畢后,我們在主控制臺,選擇new item來隨便創建一個項目


image.png

點擊確定以后


image.png

可以在git選項的repositories填寫需要拉取代碼的git倉庫的信息
然后我們下一步在安裝有jenkins的服務器上裝上git(不裝的話,jenkins是無法到git上拉取代碼)
yum install git -y 安裝
git --version 安裝后查看版本

(3.2)上一步將git裝好以后,我們就可以在利用jenkins去gitlab上拉取代碼,我們首先創建一個username with password的憑證

image.png

用戶名,密碼就是登陸gitlab的用戶名和密碼,點擊確定,這樣就可以看到我們創建的這個憑證
(3.3)使用上面創建的憑證
點擊自己的某個項目進入項目管理頁面,點擊項目管理頁面左側的配置,進入項目配置頁面

image.png

源碼管理用于在git拉取代碼,倉庫地址根據登錄類型(username password,ssh)的不同,地址不一樣,我們在gitlab上復制http形式的倉庫url填入下面第一個選項,然后在沒有選擇第二項的時候,將會報錯,因為沒有權限去這個地址拉取代碼,因此我們在下面的credentials中選擇我們剛剛創建好的憑證


image.png

最后點擊應用,保存

然后我們點擊立即構建來構建這個項目(這里的構建其實就是將gitlab上的代碼拉到jenkins服務器磁盤上指定目錄)

image.png

然后可以點擊構建歷史中的記錄來進入構建詳情,選擇控制臺輸出查看項目構建情況,最后jenkins會將項目的代碼拉取到jenkins服務器的/var/lib/jenkins/workspace這個目錄下面,我們可以在安裝jenkins的對應服務器目錄進行查看

image.png

可以看到磁盤上已經將gitlab上的項目的源代碼下載到了磁盤本地

image.png

(3.4)ssh免登陸憑證

image.png

需要在jenkins服務器防止我們的私鑰,將我們的公鑰上傳到gitlab服務器
(3.4.1)使用root用戶生成公鑰和私鑰
ssh-keygen -t rsa
在/root/.ssh/目錄保存了公鑰和私鑰
image.png

(3.4.2)將上一步生成的公鑰 id_rsa.pub的內容復制到gitlab上,我們首先用管理員的賬戶登錄gitlab,然后選擇用戶設置,將公鑰內容填入
image.png

至于私鑰,我們可以用到jenkins的憑證管理來管理私鑰,來到jenkins的憑證管理,添加一個ssh憑證
image.png

保存,然后跟上面一樣,在項目的配置界面的源碼管理中,倉庫地址改成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

image.png

(3)jenkins的后臺系統管理-> 全局工具配置


image.png

在這里我們需要配置jdk和maven,配置jdk的時候,點擊新增jdk,然后取消勾選自動安裝,因為我們已經在jenkins服務器上自己安裝了jdk了,然后界面會更換到下一個界面

image.png
image.png

下一步配置maven,同樣,我們點擊新增maven并取消勾選自動安裝install automatically

image.png

最后,我們點擊應用,再點擊保存,即可保存輸入
(4)manage jenkins->configure system(系統配置)
我們需要在系統配置中加入一些全局的變量,讓jenkins知道maven的一些命令

image.png

第三個屬性的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>

image.png

添加阿里云私服地址

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

(6)上一步我們將代碼拉取下來,這一步我們完成代碼的編譯和打包
我們點擊增加構建步驟,選擇執行shell腳本,然后在命令中輸入測試命令

image.png

點擊應用保存,然后回到項目配置界面,左側選擇build now,然后jenkins界面看控制臺輸出,可以看到首次構建會拉取依賴到裝有jenkins服務器上的maven倉庫中,最后完成編譯和打包,成功即證明我們之前的maven配置是有效的


image.png

我們然后到jenkins拉取在jenkins所在服務器的磁盤上的項目的target目錄中已經有了編輯構建的war/jar包

tomcat安裝配置

(1)在所有的項目要部署的負載節點安裝jdk和tomcat
(2)登錄tomcat頁面,因為jenkins是需要tomcat的賬戶才能將構建好的項目的war包遠程傳輸到裝tomcat的負載節點,因此需要為tomcat服務器開啟賬戶權限(默認情況是沒有開啟的),驗證方式:點擊manager webapp


image.png

我們將會看到403的無權限界面,即目前是沒有配置賬戶的,配置完以后,該界面是允許我們去管理我們的項目的


(3)我們去兩個負載節點的tomcat的文件夾里面conf目錄,然后


image.png

vim tomcat-users.xml
默認沒有配置,我們按照這個示范進行配置

image.png

我們直接將所有的role標簽和<user>標簽賦值到哪個tomcat-users.xml中的tomcat-users范圍內,然后保存
(4)修改/webapps/manager/META-INF/context.xml ,注釋掉下面的代碼,因為默認是不允許我們遠程訪問tomcat的,注釋了就允許遠程訪問了

image.png

這時候我們就完成了tomcat用戶和角色的配置,接著進行重啟tomcat操作


image.png

然后重新在tomcat界面,選擇manager tomcat,輸入tomcat用戶賬戶名和密碼進入tomcat管理頁面

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380