1. 程式人生 > 其它 >Jenkins 的安裝和使用方式

Jenkins 的安裝和使用方式

楔子

下面來了解一下 Jenkins,Jenkins 是一個開源的、提供友好操作介面的持續整合(CI)工具,起源於 Hudson(商用的),主要用於持續、自動地構建/測試軟體專案,監控外部任務的執行等等。Jenkins 使用 Java 語言編寫,可在 Tomcat 等流行的 servlet 容器中執行,也可獨立執行,通常與版本控制工具(SCM)、構建工具結合使用。常見的版本控制工具有 Svn、Git,構建工具有 Maven、Ant、Gradle 等等。

那麼為什麼要有 Jenkins 呢?首先我們來回顧一下以前的常規開發流程是怎麼樣的。

來了一個專案之後先進行需求分析,然後進行設計,設計完了之後編寫程式碼,開發完畢之後再測試,測試通過最後部署。

整個流程看似沒有問題,但是這隻適用於功能明確、並且需求變化不大的場景。但是對現在的開發而言,功能往往是不明確的、而且需求經常變,因此傳統的開發流程已經不適用了,現在提倡敏捷開發。而敏捷開發並不追求前期完美的設計、完美的編碼,而是力求在很短的週期內開發出產品的核心功能,儘早釋出出可用的版本,然後在後續的生產週期內,按照新需求不斷迭代升級,完善產品。

說白了敏捷開發就是直接擼起袖子就開始幹,然後遇見 bug 再重新改。因此這意味著會頻繁地合併程式碼到主分支,而這一步就是持續整合(Continuous Integration,CI)。我們經常說 CI、CD,其中 CI 就是持續整合,指的就是頻繁地(一天多次)將程式碼整合(合併)到主分支,而持續整合有兩個好處:

  • 1. 快速發現錯誤:每完成一點更新,就整合到主分支,可以快速發現錯誤,定位錯誤也比較容易
  • 2. 防止分支大幅度偏離主分支:如果不是經常整合,主分支又在不斷更新,會導致以後整合的難度變大,甚至難以整合

持續整合的目的,就是讓產品可以快速迭代,同時還能保持高質量。它的核心措施是,程式碼整合到主分支之前,必須通過自動化測試,只要有一個測試用例失敗,就不能整合。

所以持續整合不單單是將程式碼整合到主分支,還有構建、測試,只有測試通過了,才能整合到主分支,而這幾步都是自動完成的。

Martin Fowler(提出敏捷開發概念的美國大叔)曾說過:" 持續整合並不能消除 bug,而是讓它們非常容易發現和改正 "。

Jenkins 就是一個專門用來做持續整合的工具,可能有人覺得使用 Git 就行,雖然理論上確實如此。但是光有 Git 的話,明顯沒有使用專門的整合工具來的方便, 當然像 Jenkins 這種專業的 CI 工具也是需要搭配版本控制工具(Git)使用的。

持續交付、持續部署

CI 我們說完了,下面再說一下 CD,CD 指的是持續交付(Continuous Delivery)和持續部署(Continuous Deployment)。

持續交付指的是:頻繁地將軟體的新版本交付給質量團隊或者客戶,以供評審。如果評審通過,就部署到生產環境中,持續交付可以看做是持續整合的下一步。它強調的是,不管怎麼更新,軟體是隨時隨地可以交付的。

持續部署可以看做是持續交付的下一步,指的是程式碼通過評審之後,自動部署到生產環境。持續部署的目標是,程式碼在任何時刻都是可部署的,可以進入生產階段。持續部署和持續互動的區別就是,前者是程式碼評審通過之後自動部署到生產環境,後者是手動部署。

當然我們這裡的主角是 Jenkins,下面就來安裝它。

安裝 Jenkins

Jenkins 使用 Java 語言編寫,所以我們首先要安裝 Java,安裝過程比較簡單這裡就不細說了。

然後安裝 Jenkins,但是不建議去官網下載,速度會很慢,這裡推薦一個清華映象:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable

進入該地址之後選擇相應版本的 Jenkins 即可,當然顯示的都是針對 CentOS 系統。如果你是別的系統,那麼就把網址結尾的redhat-stable 去掉,然後進去選擇合適的系統,這裡我就以 CentOS 為例,下載地是 jenkins-2.289.2-1.1.noarch.rpm。然後直接安裝:

[root@satori ~]# rpm -ivh jenkins-2.289.2-1.1.noarch.rpm

安裝之後我們需要修改 Jenkins 的配置檔案 /etc/sysconfig/jenkins,我們先來介紹一下里面的配置項。

  • JENKINS_HOME="/var/lib/jenkins":Jenkins 工作檔案的儲存目錄
  • JENKINS_JAVA_CMD="":Java 可執行檔案路徑,預設查詢 /usr/bin/java
  • JENKINS_USER="jenkins":Jenkins 啟動時使用的使用者,這裡我們修改成 root,不然可能會有許可權問題
  • JENKINS_PORT="8080":Jenkins 監聽的埠,8080 太常見了,建議改成別的,這裡我們改成 8008
  • JENKINS_LISTEN_ADDRESS="":Jenkins 監聽的 IP,預設是 0.0.0.0,任何機器都可以訪問
  • JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true":JVM 相關引數,一般不需要關心

還有幾個配置項,不過不是很常用,瞭解一下即可。

  • JENKINS_HTTPS_PORT="":Jenkins 監聽的埠(預設被禁用),針對 HTTPS 協議
  • JENKINS_HTTPS_LISTEN_ADDRESS="":Jenkins 監聽的 IP(預設被禁用),針對 HTTPS 協議
  • JENKINS_HTTPS_KEYSTORE="":SSL 金鑰檔案的路徑
  • JENKINS_HTTPS_KEYSTORE_PASSWORD="":SSL 金鑰檔案的密碼
  • JENKINS_HTTP2_PORT="":Jenkins 監聽的埠(預設被禁用),針對 HTTP2 協議
  • JENKINS_DEBUG_LEVEL="5":日誌的除錯級別,值越高,日誌記錄越詳細
  • JENKINS_ENABLE_ACCESS_LOG="no":是否啟用訪問日誌記錄
  • JENKINS_HTTP2_LISTEN_ADDRESS="":Jenkins 監聽的 IP(預設被禁用),針對 HTTP2 協議
  • JENKINS_HANDLER_MAX="100":Jenkins 服務的最大工作執行緒數量
  • JENKINS_HANDLER_IDLE="20":空閒工作執行緒的最大數量
  • JENKINS_EXTRA_LIB_FOLDER="":用於新增到 Jetty 類載入器的 Jar 包的所在目錄
  • JENKINS_ARGS="":像 Jenkins 傳遞的其它引數

所以大部分配置都是不需要改的,只需要改三個:

# 指定 Java 可執行檔案路徑,因為預設是 /usr/bin/java,所以需要根據你當前 Java 安裝路徑進行修改
JENKINS_JAVA_CMD=/opt/jdk1.8.0_221/bin/java 
# 避免許可權問題,如果不改的話,後面會無法啟動,因為許可權不足
JENKINS_USER="root" 
# 避免埠衝突,其實也可以不改,如果確定此埠不會衝突的話
JENKINS_PORT="8008"  
  • 啟動 Jenkins:systemctl start jenkins
  • 關閉 Jenkins:systemctl stop jenkins
  • 重啟 Jenkins:systemctl restart jenkins

由於 Jenkins 是 Java 語言編寫,可以輸入 jps 檢視 Java 啟動的程序,如果出現 jenkins.war,則說明啟動成功了。然後我們通過 http://ip:8008進行檢視,注意要保證埠是開放的,我這裡使用的是阿里雲伺服器,8008 是對外開放的。

然後會提示你解鎖 Jenkins,按照提示將密碼輸入進去、點選繼續即可。再接下來會提示你安裝外掛:

Jenkins 本身的功能是非常簡單的,能做的事情比較有限,而我們日常工作所需要的功能基本上都是通過外掛來完成的。這裡可以點選 "安裝推薦的外掛",會自動將 Jenkins 推薦的外掛下載下來並安裝,但由於會從 Jenkins 官網上去下載,整個過程非常的慢,因此我們點選"選擇外掛來安裝"。

點選 "選擇外掛來安裝" 的話,可以自己選擇要安裝的外掛,注意:該過程仍然是從官網上下載,因此這裡我們點選上面的"無",點選之後會將方框裡面的對鉤全部去掉,也就是不選擇安裝的外掛。後續我們可以替換外掛的下載地址,再進行安裝。

然後點選安裝,會提示你建立第一個管理員使用者,按照提示隨便建立一個,然後點選儲存並完成即可。

點選之後會提示如下該頁面:

47.94.174.89 是我伺服器的公網 IP,8008 就是我們設定的埠,這裡不用管,還是點選 "儲存並完成" 即可。然後會提示 Jenkins 已經安裝完成,我們點選"開始使用 Jenkins"。

會進入到如下頁面,顯然此時已經可以開始正常使用了,不過在介紹使用方法之前,我們先來把外掛安裝上。我們說 Jenkins 本身功能很簡單,但是可以通過外掛來使 Jenkins 變得強大,只不過 Jenkins 預設是從官網下載,會很慢,因此我們需要將下載地址改成國內的地址。

修改 /var/lib/jenkins/updates/default.json,第一個鍵值對就是 "connectionCheckUrl":"http://www.google.com/",Jenkins 在下載外掛之前會先檢查網路連線,相當於先 ping 一下connectionCheckUrl。顯然對於國內而言,谷歌是 ping 不通的,我們需要改成 https://www.baidu.com/

然後我們還要將https://updates.jenkins.io/download改成http://mirrors.tuna.tsinghua.edu.cn/jenkins,由於改的不止一處,所以使用 sed 命令進行替換即可。

sed -i s/原字串/新字串/g 檔名,這樣即可實現全域性替換,由於 url 中本身包含 /,所以需要使用 \ 進行轉義。

[root@satori updates]# sed -i "s/http:\/\/www.google.com/https:\/\/www.baidu.com/g" default.json
[root@satori updates]# sed -i "s/https:\/\/updates.jenkins.io\/download/http:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g" default.json 

別急,還沒結束,我們還要進入到剛才的 Jenkins web 介面,點選 Manage Jenkins,然後點選 Manage Plugins。

得到如下介面,然後點選 Advanced,將頁面拖到底部。

https://updates.jenkins.io/update-center.json換成 http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json,然後點選 submit 即可。

重啟讓配置生效,我們可以通過 systemctl restart jenkins 進行重啟,也可以通過 http://ip:8008/restart進行重啟,重啟之後配置就生效了。

然後我們再來安裝外掛,還是點選Manage Jenkins,然後點選 Manage Plugins,再點選 Available。

這些都是可用外掛,可以不管三七二十一直接全部安裝,也可以安裝指定的外掛,下面推薦幾個建議(必須)安裝的外掛。

Localization: Chinese (Simplified),漢化外掛,安裝之後介面會變成中文。

SSH Credentials,可以在 Jenkins 裡面儲存 SSH 憑證,以及使用者名稱、密碼。這個外掛是非常有必要的,因為我們要從倉庫拖程式碼、將程式碼上傳到倉庫等等,這些是需要配置免密碼登入的。

SSH,可以使用 SSH 協議遠端執行命令。

Git,將 Git 整合到 Jenkins,這個無需多言。

然後點選 Install without restart,安裝完畢之後進行重啟:

重啟可以通過 systemctl 和http://ip:8008/restart進行重啟,也可以點選圖中的小方框,重啟之後我們再來看看介面:

發現大部分都變成了中文,有一部分還沒有完全漢化,但是關鍵部分已經變成中文了。

使用 Jenkins 構建專案

進入介面,點選新建任務,然後輸入任務名稱(隨便起一個):

輸入任務名稱之後還沒法點選確定,我們需要點一下 "構建一個自由風格的軟體專案",然後再點選確定。

此時我們就可以構建任務了,如果你不小心把當前的配置介面關閉了,那麼可以再點選 Dashboard,然後就會顯示建立的任務:

點選 task-test,之後再點選配置,之前的配置介面就又出來了。

由於我們是往 Git 中拖程式碼,所以要配置倉庫地址以及使用者名稱密碼。點選系統管理,然後點選 Manage Credentials,出現如下介面:

然後再點選左側的新增憑據,新增有三種方式,這裡我們通過使用者名稱密碼的方式:

未完待續,暫時不想寫了。