本章節做爲<<使用Jenkins持續交付與部署>>系列文章的第一篇,主要介紹一下持續集成工具Jenkins的安裝配置以及平常維護Jenkins的一些系統管理說明。本次持續交付/持續部署教程主要是針對Jenkins以及與之集成的一些開源工具進行擴展說明的,下面開始本章的內容介紹。html
本小節課程主要涉及到的內容以下:java
在開始正式安裝Jenkins以前,首先須要瞭解一下Jenkins是什麼。linux
[Jenkins](https://jenkins.io/zh)是一款由Java編寫的開源的可擴展持續集成工具。容許持續集成和持續交付項目,並經過各類擴展插件能夠處理任何類型的集成構建或部署操做。
Jenkins 提供了軟件開發的持續集成服務。當前持續集成(CI)已成爲許多開發團隊在整個軟件生命週期內保證代碼質量的必要流程。它是一種實踐,旨在緩和和穩固軟件的構建過程,而Jenkins使持續集成變成可能。它的主要目標是監控軟件開發流程,快速定位並報告問題。豐富而衆多的擴展插件,使得Jenkins可以幫助研發、運維、QA團隊在軟件測試(接口測試、單元測試等)、軟件構建(maven、ant、gradle)、軟件部署(shell、docker、ansible等等)等CI/CD整個環節進行良好的協做,提升工做效率。git
簡單瞭解了jenkins是什麼,接下來安裝一下Jenkins。Jenkins的安裝相對簡單,能夠經過war包、rpm包、Docker等方式安裝,這裏簡單介紹兩種安裝方式,雖然安裝方式不同,但訪問方法和配置都是同樣的,因此憑我的喜愛及實際狀況選擇安裝方式。github
使用rpm方式安裝web
使用rpm安裝,首先要確保已經安裝好jdk1.8+,使用最新版本時,若是jdk的版本低於1.8,對於jenkins的使用沒有問題,可是在後續使用某個插件的時候可能會出現問題。正則表達式
配置jdkdocker
去 jdk官網 下載jdk1.8shell
$ tar xf jdk-8u231-linux-x64.tar.gz -C /usr/local/ # /etc/profile 添加以下內容 export JAVA_HOME=/usr/local/jdk1.8.0_231 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH $ source /etc/profile $ java -version java version "1.8.0_231" Java(TM) SE Runtime Environment (build 1.8.0_231-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
配置好jdk後,安裝Jenkins。express
#去官網下載最新的jenkins rpm包 $ wget https://pkg.jenkins.io/redhat-stable/jenkins-2.204.2-1.1.noarch.rpm # 下載完成後安裝 $ yum localinstall jenkins-2.204.2-1.1.noarch.rpm # 啓動 $ systemctl start jenkins
使用docker啓動
$ docker run -u root -it -d --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home jenkins/jenkins
獲取鏡像能夠從docker hub搜索關鍵字獲取。
第一次啓動時會拉取鏡像。
$ docker run -u root -it -d --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home jenkins/jenkins Unable to find image 'jenkins/jenkins:latest' locally latest: Pulling from jenkins/jenkins 3192219afd04: Pull complete 17c160265e75: Pull complete cc4fe40d0e61: Pull complete 9d647f502a07: Pull complete d108b8c498aa: Pull complete 1bfe918b8aa5: Pull complete dafa1a7c0751: Pull complete 78d3391dc013: Pull complete c1c87cf7f0bf: Pull complete 4bfacf44cce2: Pull complete 9eaefa421a64: Pull complete 043144b011c9: Pull complete 3d9c8a4a5cb8: Pull complete 05fca0659bbd: Pull complete 14241c82960f: Pull complete 41a13492424a: Pull complete d7aa64814e63: Pull complete 19049899ad6a: Pull complete 3b23f8338127: Pull complete Digest: sha256:676448a326f96a991d2d32ffbe52f239c0d2c40de3538af2ae6f18d88bf3cb56 Status: Downloaded newer image for jenkins/jenkins:latest 11f86c1472fc4d89e1af5c9340f68e8318b6b7322d46abe30bff23f092a62fe5 # 查看啓動的容器 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11f86c1472fc jenkins/jenkins "/sbin/tini -- /usr/…" 6 minutes ago Up 6 minutes 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp jenkins
容器啓動時映射了8080和50000端口,其中:
8080端口是web訪問的端口。
50000端口是基於JNLP的Jenkins代理(slave)經過TCP與Jenkins master
進行通訊的端口。
-v jenkins-data:/var/jenkins_home
爲掛載的volume卷,將容器內的/var/jenkins_home
目錄掛載到jenkins-data
卷;這個卷若是不存在,啓動容器的時候會自動建立,也能夠經過docker volume create jenkins-data
命令手動建立或者映射到宿主機指定的目錄。
容器啓動成功後,經過訪問IP:8080,以下Jenkins界面:
提示管理員祕密從/var/jenkins_home/secrets/initialAdminPassword
路徑獲取(對於使用war包或者rpm包安裝的Jenkins路徑可能會有所差別),若是使用rpm方式或者war包安裝,直接在jenkins所在服務器上cat一下該文件便可,若是是docker方式安裝,可根據上面獲取的Container_ID或者Container_name執行docker命令:
$ docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword 1dc17f65d83c4c56b13cbae230b5e7c6
獲取到密碼,密碼輸入成功後:
選擇安裝所需插件(如:gradle,maven,ant……),一樣也可忽略這一步,後面有須要再安裝所需插件,因爲網絡緣由,安裝時間可能有點長,須要耐心等待(或者參考下面的"修改插件更新源")。而後設置好管理員用戶名和密碼登陸便可,下面就是安裝好後的jenkins界面。
到這裏 jenkins 就安裝完成。
安裝好Jenkins後,首先來看一下Jenkins中的系統管理(Manage Jenkins)面板。系統管理面板是整個Jenkins管理、配置、維護的入口。該面板下包含多個菜單項,默認包括以下:
Configure System(系統配置):該菜單用來設置Jenkins的全局配置以及各類工具插件的全局配置,包括jenkins的工做目錄、可同時構建的job的數量、jdk環境變量等等。
configure Global Security(全局工安全配置):Jenkins的全局安全配置入口,能夠配置用戶權限、API Token、agent代理等信息。
Configure Credentials(憑據配置):該菜單項用來建立各類類型的憑據,用於對系統或者服務進行認證,好比登陸服務器,登陸源碼倉庫的認證等。
Global Tool Configuration(全局工具配置):該菜單項用來對Jenkins項目裏使用到的全局工具進行配置,好比Jdk的配置,代碼編譯工具 maven/ant/gradle工具的配置,代碼拉取命令git的配置等等。
Manage Plugins(插件管理):Jenkins各類插件得入口,用來對插件進行增刪更新等操做,jenkins強大的功能和擴展離不開各類插件的支持,因此在初期這是一個使用比價頻繁的菜單。
System Information(系統信息):該菜鳥用來顯示Jenkins系統的各類屬性信息,包括jenkins所在系統的配置信息,jenkins環境變量信息,jenkins所安裝的插件信息等。
System Log(系統日誌):用來展現jenkins的系統日誌。
Jenkins Cli(Jenkins命令行):該菜單項介紹瞭如何使用jenkins-cli.jar
在命令行操做jenkins,這個菜單提供了大量能夠在命令行操做jenkins的命令以及使用說明,好比重啓jenkins,可使用以下方式。
java -jar jenkins-cli.jar -s ${jenkins_url} restart
Manage Nodes(管理節點):該菜單項用於管理jenkins的節點信息,好比增長或減小jenkins slave節點,修改master或者slave節點的配置等,如何配置將在後面章節介紹。
Manage Users(用戶管理):該菜單項用於管理jenkins的系統用戶信息,包括用戶信息的增刪改查等操做。
上面列出了jenkins的一些經常使用的配置菜單,在使用jenkins的時候,對於上面的菜單或多或少的都會接觸到,而且在之後的學習中會對某個菜單裏的使用進行詳細的配置說明,這裏先很少作介紹,固然若是你有些火燒眉毛了,也能夠本身試一下。
瞭解了Jenkins的面板配置,再來看一下jenkins的配置文件。Jenkins安裝好之後,使用的默認端口爲8080,經過ip加端口訪問jenkins面板,點擊"Manage Jenkins"-->"Configure System",進入系統配置界面,能夠看到jenkins的默認配置,好比下圖所示:
經過該圖能夠看到jenkins的主目錄爲/var/lib/jenkins
,該目錄爲Jenkins的實際工做目錄,對於jenkins的配置修改以及存放jenkins項目配置的文件都會放到此目錄下, 並非運行Jenkins程序的目錄。由上圖發現該目錄並不能在jenkins ui界面修改,對於要想修改Jenkins的工做目錄路徑的需求應該怎麼實現呢,或者若是想要修改jenkins的啓動端口,jvm內存等,又要如何修改呢?本小節就簡單介紹一下如何修改這些配置。
對於使用Tomcat方式啓動的Jenkins服務,直接修改tomcat的端口和jvm內存設置便可。有關工做目錄的修改,大致就與使用rpm安裝的jenkins服務相同了(建議保持默認便可);對於使用容器鏡像方式啓動的jenkins服務如何配置,可參考docker hub
倉庫下jenkins鏡像的Dockerfile 。
因此有關使用Tomcat方式或者容器化安裝的Jenkins服務配置文件的說明這裏很少說,主要介紹一下使用rpm方式安裝的jenkins的配置文件的管理。
我這裏使用rpm方式安裝的jenkins服務,默認啓動命令爲systemctl start jenkins
(以centos7爲例),可是在系統默認存放啓動文件的目錄有沒有找到與jenkins有關的service文件,該如何下手呢?經過systemctl status jenkins
命令,能夠獲取jenkins啓動的腳本文件,好比下面示例:
找到了該啓動文件,首先看一下該文件的內容。
$ cat /etc/rc.d/init.d/jenkins |grep -v "^#\|^$"|grep "^JENKINS\|^PARAMS" JENKINS_WAR="/usr/lib/jenkins/jenkins.war" JENKINS_CONFIG=/etc/sysconfig/jenkins JENKINS_PID_FILE="/var/run/jenkins.pid" JENKINS_LOCKFILE="/var/lock/subsys/jenkins" PARAMS="--logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon"
說明
而後經過ps命令查看一下Jenkins的進程信息。
$ ps -ef|grep jenkins root 15655 1 2 Apr15 ? 00:31:11 /usr/local/jdk1.8.0_231/bin/java -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
由上面信息能夠看到,jenkins服務主要配置文件爲/etc/sysconfig/jenkins
,使用的 java爲自定義的/usr/local/jdk1.8.0_231/bin/java
,啓動方式也是經過war包啓動,日誌文件存放在/var/log/jenkins/jenkins.log
文件裏,jenkins服務運行所須要的程序文件放到了/var/cache/jenkins/war
目錄。固然,這些配置的路徑,都是能夠修改的。
瞭解完基本配置信息,下面看一下jenkins的主配置文件。
$ cat /etc/sysconfig/jenkins|grep -v "^#\|^$" JENKINS_HOME="/var/lib/jenkins" JENKINS_JAVA_CMD="" JENKINS_USER="root" JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true" JENKINS_PORT="8080" JENKINS_LISTEN_ADDRESS="" JENKINS_HTTPS_PORT="" JENKINS_HTTPS_KEYSTORE="" JENKINS_HTTPS_KEYSTORE_PASSWORD="" JENKINS_HTTPS_LISTEN_ADDRESS="" JENKINS_HTTP2_PORT="" JENKINS_HTTP2_LISTEN_ADDRESS="" JENKINS_DEBUG_LEVEL="5" JENKINS_ENABLE_ACCESS_LOG="no" JENKINS_HANDLER_MAX="100" JENKINS_HANDLER_IDLE="20" JENKINS_EXTRA_LIB_FOLDER="" JENKINS_ARGS=""
在這裏,就能夠看到jenkins的詳細配置了,包括Jenkins的主要工做目錄,Jenkins的端口,運行Jenkins的用戶(默認爲jenkins)以及jenkins啓動時的java參數等。若是要修改jenkins的jvm參數,只須要將配置放到JENKINS_JAVA_OPTIONS
參數裏便可,多個參數使用空格隔開,修改完配置文件,不要忘了重啓Jenkins服務。
大部分版本的Jenkins安裝好之後,默認的語言爲英文,有些同窗可能不太習慣英文版的jenkins,這時就須要對jenkins進行漢化,漢化比較簡單,下面進行配置。
"Manage Jenkins"---> "Manage Plugins"在可選插件中找到Locale plugin
插件,點擊安裝便可。安裝完之後在"Config System"菜單中找到Locale選項配置,設置"Default Language"爲zh_CN
,並勾選Ignore browser preference and force this language to all users
以下圖所示:
配置好後重啓Jenkins,重新登陸界面就發現英文菜單變成了中文菜單。
Jenkins針對不一樣的安裝方式或者不一樣的版本漢化方法可能不同,大多數版本使用上面的方法就能漢化成功。可是有的版本安裝該插件後,重啓jenkins後發現面板仍是英文的,漢化不成功。那麼接下來就須要在安裝Localization: Chinese (Simplified)
插件了,安裝好後重啓Jenkins便可。若是漢化完發現面板有一部分是中文一部分是英文的話,可能與jenkins的版本或者安裝方式有關了。
Jenkins強大的功能和擴展離不開插件的支持。在安裝jenkins時,或者安裝完jenkins之後,須要安裝不少必須的插件,使用官方默認的jenkins插件源安裝插件時,要麼速度很慢,要麼安裝失敗,使得不管是工做效率仍是學習效率都大大下降,爲了解決此問題,須要修改一下jenkins下載插件的鏡像源。
進入"Manage-Jenkins"-->"Manage Plugins" ---> "高級"頁面,網上大多數方法都是修改該頁面下的"升級站點"下URL輸入框的值,改成清華源或者Jenkins插件中心國內源。以下圖所示:
然而修改完成後,下載鏡像仍是很慢,這是由於Jenkins經過解析update-center.json
文件的方式來獲取插件版本以及下載插件,可是jenkins使用私鑰來給update-center.json
文件作了簽名,只有經過了公鑰驗證的update-center.json
文件,纔會被使用。因此還須要替換Jenkins中使用的祕鑰和私鑰文件。
替換證書文件
到https://github.com/jenkins-zh/mirror-adapter/rootCA
下載mirror-adapter.crt
文件,放到$JENKINS_HOME/war/WEB-INF/update-center-rootCAs
目錄下便可。
對於該配置流程,Jenkins中文社區幫你們把祕鑰和地址的問題解決了,可使用以下方式:
在jenkins面板的右下角,點擊Jenkins中文社區,在跳轉的界面會有"更新中心鏡像設置"。以下所示:
說明:
先點擊使用,而後在點擊"設置更新中心地址",在跳轉的頁面輸入上面給出的地址便可。
若是沒有上面的Jenkins中文社區按鈕,多是你沒有漢化致使的。
在使用Jenkins的時候經常遇到了忘記Jenkins管理員登陸密碼的狀況,若是忘記了密碼怎麼辦?能夠修改Jenkins的配置文件${JENKINS_HOME}/config.xml
,找到:
<useSecurity>true</useSecurity>
將true 改成false,而後重啓jenkins。
Jenkins重啓後,訪問Jenkins 就能夠直接跳過驗證,直接跳轉到Jenkins面板界面了。而後點擊"Manage Jenkins"-->"Config Global Security",勾選"啓用安全",在"訪問控制"選項的"安全域"屬性,選中"Jenkins’ own user database",受權策略屬性選中"Logged-in users can do anything"。以下如所示:
保存後,到"Manage Users"界面重置管理員用戶密碼便可。
使用jenkins另外一個必不可少的配置就是對jenkins的備份。Jenkins的全部的數據都是以文件的形式存放在${JENKINS_HOME}
目錄中。因此無論是遷移仍是備份,只須要將${JENKINS_HOME}
打包後在拷貝,而後將打包的文件解壓到新的${JENKINS_HOME}
目錄就好了。備份jenkins的方法有不少種,本文就簡單介紹一下經常使用的備份方法,使用ThinBackup插件。
在插件管理頁面找到ThinBackup
插件,安裝便可(若是你不會安裝,看一下第二篇的內容吧)。安裝完之後,在manage jenkins
界面會出現ThinBackup
菜單項,點擊進去後進入settings設置界面,進行備份設置。以下所示設置:
說明:
Backup directory:備份目錄,用於存儲備份的文件,若是指定的目錄不存在,默認在進行備份以前會自動建立。
Backup schedule for full backups:進行備份的計劃任務,與linux下的crontab同樣,其中上面的H,表明哈希,爲了容許按期調度的任務在系統上產生均勻負載,應儘量使用符號H(用於「散列」)。例如,若是多個job都設置使用0 0 * * *
將致使負載大幅飆升。相比之下,使用H H *仍然會天天執行一次每一個job,但不會同時執行,更好地使用有限的資源。
Backup schedule for differential backups:進行差別化備份的計劃任務,同上。
Max number of backup sets:備份的最大數量。
Files excluded from backup (regular expression):不須要進行備份的文件的正則表達式。
Wait until Jenkins/Hudson is idle to perform a backup:等待jenkins空閒多長時間後進行備份。
Backup build results:若是啓用此選項,還將備份構建結果,通常不建議勾選此選項。
Backup 'userContent' folder:備份${jenkins_home}/userContent
目錄下的文件。
Backup next build number file:備份jenkins構建的build id文件。
Backup plugins archives:備份插件。
Clean up differential backups:完成備份之後清除全部的差別備份。
Move old backups to ZIP files:若是選中此選項,則不管什麼時候執行新的完整備份,全部舊備份集都將移至ZIP文件。每一個ZIP文件將包含一個備份集,即一個完整備份和任何引用該備份文件的差別備份。文件名將標識包含備份的時間範圍(即完整備份的時間戳和最新差別備份的時間戳)。
備份策略根據本身實際狀況定義便可。
保存後回到ThinBackup
界面,除了能夠自動進行備份外,也能夠經過手動備份,點擊Backup Now
按鈕就會當即進行備份。以下按鈕:
備份完後會在上面設定的備份目錄下生成一個以FULL-
開頭,以當前時間(精確到分)爲結尾的目錄,該目錄下就是默認全部的Jenkins配置。
當要使用備份文件進行恢復的時候,點擊restore按鈕,在跳轉的界面中就會顯示出該備份文件的備份時間,點擊Restore便可。
整體來講,使用該插件備份相對簡單,這裏就不在多說,有興趣的能夠本身試一下。