持續整合工具之Jenkins安裝部署

1874發表於2020-10-12

  一、DevOps理念

  所謂DevOps是指development和Operations的組合,中文意思就是開發和運維的簡寫。devops理念主要是針對企業中的研發人員、運維人員和測試人員的工作理念,是他們在應用開發、程式碼部署和質量測試等整條生命週期中協作和溝通的最佳實踐DevOps 強調整個組織的合作以及交付和基礎設施變更的自動化、從而實現持續整合、持續部署和持續交付。傳統的模式的開發人員只顧開發程式,運維只負責基礎環境管理和程式碼部署及監控等,其並不是為了一個共同的目標而共同實現最終的目的,而DevOps 則實現團隊作戰,即無論是開發、運維還是測試,都為了最終的程式碼釋出、持續部署和業務穩定而付出各自的努力,從而實現產品設計、開發、測試和部署的良性迴圈,實現產品的最終持續交付。

  以上這張圖詮釋了什麼是DevOps,devops在研發、運維、測試當中是三者的交集;有了devops理念,研發開發流程高效,穩定快速,交付結果可預期;測試根據開發提交的程式碼,進行持續測試,提升了交付的質量;而運維也可以利用一些自動化部署工具,將測試過得程式碼,部署到線上;通過這樣一個過程,降低了運維維護的成本;研發開發的程式碼,提交到倉庫,由測試人員從倉庫中拉去程式碼進行測試,如果這中間有bug,測試會把測試的結果拿給開發看,讓開發改,經過多次修改,程式碼沒有問題,然後再由運維人員將測試過的程式碼,部署到線上,通常在正式部署到線上時,一般都不會一下子將所有伺服器都更新,一般採取分批部署,灰度釋出;所謂灰度釋出指在業務訪問不高的情況下,將一部分伺服器從生產環境摘下,進行程式碼更新,然後再上線;經過一段時間新上線的程式碼沒有bug,然後再分批將其他伺服器更新;如果上線後業務有異常,運維人員會將上線都程式碼立即回滾;這樣做可以最大化減少線上業務故障;

  devops流程

  上圖是devops理念的一個流程,從專案最早的計劃,到專案上線交付,後續的監控形成了一個閉環,這也體現了DevOps的核心理念團隊協作、相互協助、持續發展;中間任何環節出現問題,都會將專案回退到上一步,它們之間都是環環相扣的;比如在t測試沒有通過,那麼測試會將測試的結果告訴開發,說程式碼測試有bug,然後研發修改,直到測試通過才會到運維手裡,當然運維將專案部署到線上後,也要做監控,如果上線後監控到部分指標有問題,比如記憶體消耗嚴重,cpu負載過高,這些問題運維一方面要考慮伺服器本身是否有問題,另一方面要考慮程式碼的問題;所以運維要和開發共同去協作,最終將問題解決;

  持續整合(Continuous integration)簡稱CI;所謂持續整合指多名開發者在開發不同功能程式碼的過程當中,可以頻繁的將程式碼行合併到一起並切相互不影響工作。

  持續部署(continuous deployment)簡稱CD;持續部署指是基於某種工具或平臺實現程式碼自動化的構建、測試和部署到線上環境以實現交付高質量的產品,持續部署在某種程度上代表了一個開發團隊的更新迭代速率。

  持續交付(Continuous Delivery)簡稱CD;持續交付是在持續部署的基礎之上,將產品交付到線上環境,因此持續交付是產品價值的一種交付,是產品價值的一種盈利的實現。

  devops中常用的工具

  jenkins在devops中主要做持續整合的工作,它可以將開發寫的專案程式碼從程式碼倉庫中拉去下來,進行程式碼掃描、編譯、測試,部署到線上;

  jenkins是java語言編寫的一款高度外掛化的軟體,它的很多功能都是由外掛實現,擴充套件功能我們安裝對應的外掛即可,非常方便靈活;除此之外,jenkins還可以在多臺機器上進行分散式地構建和負載測試。Jenkins是根據MIT許可協議釋出的,因此可以自由地使用和分發。

  瞭解了上面的簡介,我們再來說說jenkins的部署;

  二、環境準備

  硬體環境:記憶體建議4G+,Cpu:建議4核;當然根據自身環境的規模,確定硬體配置是比較妥當的做法;

  準備java環境

  1、安裝java8

[root@node05 ~]# yum install ./jdk-8u191-linux-x64.rpm 
Loaded plugins: fastestmirror
Examining ./jdk-8u191-linux-x64.rpm: 2000:jdk1.8-1.8.0_191-fcs.x86_64
Marking ./jdk-8u191-linux-x64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package jdk1.8.x86_64 2000:1.8.0_191-fcs will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================
 Package           Arch              Version                          Repository                       Size
============================================================================================================
Installing:
 jdk1.8            x86_64            2000:1.8.0_191-fcs               /jdk-8u191-linux-x64            288 M

Transaction Summary
============================================================================================================
Install  1 Package

Total size: 288 M
Installed size: 288 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 2000:jdk1.8-1.8.0_191-fcs.x86_64                                                         1/1 
Unpacking JAR files...
        tools.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
        rt.jar...
        jsse.jar...
        charsets.jar...
        localedata.jar...
  Verifying  : 2000:jdk1.8-1.8.0_191-fcs.x86_64                                                         1/1 

Installed:
  jdk1.8.x86_64 2000:1.8.0_191-fcs                                                                          

Complete!
[root@node05 ~]#

  提示:java8我們可以直接安裝openjdk;也可以去oracle官網下載二進位制包解壓安裝;我這裡直接安裝oracle的rpm包jdk;

  驗證java環境

[root@node05 ~]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
[root@node05 ~]# 

  提示:如果安裝了jdk以後,一定要確認能夠使用java -version列印出java對應的版本,列印出版本說明我們安裝的java環境才沒有問題;以上是yum安裝rpm包的方式部署java環境;

  配置二進位制包java環境

[root@node06 ~]# cd /usr/local/src/
[root@node06 src]# rz
rz waiting to receive.
 zmodem trl+C ȡ

  100%  185366 KB 37073 KB/s 00:00:05       0 Errors.gz...

[root@node06 src]# ll
total 185368
-rw-r--r-- 1 root root 189815615 Aug 20  2019 jdk-8u162-linux-x64.tar.gz
[root@node06 src]# tar xf jdk-8u162-linux-x64.tar.gz 
[root@node06 src]# ll
total 185368
drwxr-xr-x 8   10  143       255 Dec 20  2017 jdk1.8.0_162
-rw-r--r-- 1 root root 189815615 Aug 20  2019 jdk-8u162-linux-x64.tar.gz
[root@node06 src]# ln -sv /usr/local/src/jdk1.8.0_162 /usr/local/jdk
‘/usr/local/jdk’ -> ‘/usr/local/src/jdk1.8.0_162’
[root@node06 src]# 

  以上把jdk安裝到/usr/local/目錄下,接下來到處java環境

[root@node06 src]# cat /etc/profile.d/java.sh 
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jie/lib:$JAVA_HOME/lib/tools.jar
[root@node06 src]#

  驗證:重啟伺服器,等伺服器啟動好了,看看在命令列能否使用java -version命令列印出對應java8的版本資訊

[root@node06 ~]# java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
[root@node06 ~]# 

  提示:如果重啟後使用java -version能夠看到對應java的版本,說明java環境就沒有問題;

  準備好java環境,接著我們下載去官網下載jenkins;jenkins的官方網站是https://www.jenkins.io/;找到download頁面,選擇對應的系統

  提示:官方告訴我們說,配置jenkins的倉庫,然後使用yum install jenkins 命令來安裝jenkins;並且官方建議使用openjdk;

  安裝openjdk

[root@node04 ~]# yum install -y java-1.8.0-openjdk-devel

  驗證java環境

  2、配置jenkins倉庫

[root@node04 ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
--2020-10-12 22:26:39--  https://pkg.jenkins.io/redhat-stable/jenkins.repo
Resolving pkg.jenkins.io (pkg.jenkins.io)... 151.101.110.133, 2a04:4e42:1a::645
Connecting to pkg.jenkins.io (pkg.jenkins.io)|151.101.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 85
Saving to: ‘/etc/yum.repos.d/jenkins.repo’

100%[==================================================================>] 85          --.-K/s   in 0s      

2020-10-12 22:26:57 (3.30 MB/s) - ‘/etc/yum.repos.d/jenkins.repo’ saved [85/85]

[root@node04 ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
  [root@node04 ~]#   

  三、安裝jenkins

[root@node04 ~]# yum install -y jenkins
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package jenkins.noarch 0:2.249.2-1.1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================
 Package                 Arch                   Version                       Repository               Size
============================================================================================================
Installing:
 jenkins                 noarch                 2.249.2-1.1                   jenkins                  64 M

Transaction Summary
============================================================================================================
Install  1 Package

Total download size: 64 M
Installed size: 64 M
Downloading packages:
jenkins-2.249.2-1.1.noarch.rpm                                                       |  64 MB  00:01:41     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : jenkins-2.249.2-1.1.noarch                                                               1/1 
  Verifying  : jenkins-2.249.2-1.1.noarch                                                               1/1 

Installed:
  jenkins.noarch 0:2.249.2-1.1                                                                              

Complete!
[root@node04 ~]# 

  檢視jenkins安裝了那些檔案

[root@node04 ~]# rpm -ql jenkins
/etc/init.d/jenkins
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/var/cache/jenkins
/var/lib/jenkins
/var/log/jenkins
[root@node04 ~]# 

  提示:/etc/sysconfig/jenkins是jenkins的配置檔案;/usr/lib/jenkins/jenkins.war這個是jenkins的主程式war包;/var/lib/jenkins這個是jenkins的資料目錄,通常這個目錄我們應該掛載一個較大的儲存,後續jenkins拉取程式碼就存放在此處;/var/log/jenkins這個是jenkins的日誌存放目錄;

  編輯jenkins的配置檔案

  提示:JENKINS_HOME用來指定jenkins的資料目錄;預設是在/var/lib/jenkins目錄;JENKINS_USER是用來指定jenkins的啟動使用者,預設是jenkins;如果不更改啟動使用者,使用預設使用者,後續我們拖程式碼,編譯,測試都是基於這個使用者的許可權去做,所以後續要注意其他伺服器上對這個使用者的許可權;通常jenkins平臺都不會對外,都是在內網中使用,所以更改成root也是可以的,如果你不想麻煩,建議修改成root;後續其他配置幾乎不用更改,儲存上面的配置,我們就可以啟動jenkins了;

  啟動jenkins,並把它設定為開機啟動

  提示:設定jenkins開機啟動,需要用chkconfig命令去設定,原因是它沒有提供unit file指令碼檔案;當然啟動也是可以使用service命令去啟動;

  用瀏覽器訪問8080埠

  提示:jenkins的啟動稍微有點慢,我們這裡耐心等待就好;如果記憶體小了,會等很久才起來;

  提示:這裡提示我們把上面輸入管理員密碼;這個管理員密碼預設儲存在/var/lib/jenkins/secrets/initialAdminPassword,我們把密碼複製過來貼到此處就好;

  提示:這裡我們選擇推薦安裝就好,因為第一次執行,我們也不知道安裝那些外掛,後續如果用到其他外掛,我們再安裝即可;

  提示:這裡我們耐心等待外掛全部安裝好;這裡安裝外掛和本地伺服器網路有關,如果在這一步外掛有些沒有安裝成功,可以重試,或者直接到jenkins主頁裡面的外掛管理裡面找到對應的外掛,安裝即可;

 

  提示:這裡是建立一個管理員帳號,如果我們不想使用預設的admin帳號可以建立一個管理員帳號,當然我們也可以直接使用admin帳號;

  提示:這裡是填寫訪問jenkins的url地址;保持預設就好;

  提示:到此jenkins就安裝好了;我們可以點選開始使用jenkins,看看jenkins的首頁;

  提示:這裡有些地方漢化的不是很好,重啟jenkins再登入jenkins就好了;

  好了jenkins首頁就長這樣,到此jenkins的初始化配置就完成了;後續我們可以在裡面用到什麼功能再下載相應的外掛,配置對應的功能就好;

相關文章