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,出現如下界面:

然后再點擊左側的添加憑據,添加有三種方式,這里我們通過用戶名密碼的方式:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM