官方文檔:https://jenkins.io/zh/doc/html
1、引言java
產品設計成型-->開發人員開發代碼-->測試人員測試功能-->運維人員發佈上線node
持續集成(Continuous integration,簡稱CI)linux
持續交付(Continuous delivery)git
持續部署(Continuous deployment)github
推薦學習網站 http://www.ruanyifeng.com/blog/2015/09/continuous-integration.htmlweb
2、Jenkins 介紹shell
官網 官方文檔:https://jenkins.ioapache
Jenkins 是一個開源的、可擴展的持續集成、交付、部署(軟件/代碼的編譯、打包、部署)基於web界面的平臺。vim
Jenkins是一個工具集,提供了各類各樣的插件
好比獲取git上最新的代碼
好比能夠編譯源代碼
好比能夠調用自定義的shell腳本遠程執行命令
官方文檔:https://jenkins.io/zh/doc/
3、Jenkins安裝 (192.168.128.129:8080)
最低配置:很多於256M內存,不低於1G磁盤,jdk版本>=8
安裝jdk1.8
yum install -y java-1.8.0-openjdk //jenkins是java開發的依賴jdk
wegt -O /etc/yum.repos.djenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo //安裝jenkins的yum源
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo --no-check-certificate 前面執行提示了安全證書未生效因此加了 --no-check-certificate 選項,也有多是系統時間不一樣步,能夠執行 ntpdate pool.ntp.org 同步
cat /etc/yum.repos.d/jenkins.repo 其中內容能夠不執行上面wget命令而直接手寫
[jenkins] name=Jenkins baseurl=http://pkg.jenkins.io/redhat gpgcheck=1
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key 導入jenkins的CA證書
yum install -y jenkins
systemctl start jenkins
grep -A 5 'An admin user has been created' /var/log/jenkins/jenkins.log
//查詢admin密碼
或 cat /var/lib/jenkins/secrets/initialAdminPassword //直接查詢admin密碼
訪問 http://ip:8080/ 進行安裝 192.168.128.129:8080
1)、能夠選擇社區推薦的插件自動安裝,也能夠選擇自定義選擇安裝
2)、建立第一個管理員用戶
4、Jenkins 相關目錄文件
/etc/sysconfig/jenkins 主配置文件
/var/lib/jenkins/ 核心的程序文件目錄,目錄能夠直接整個拷貝遷移使用
├── config.xml ├── hudson.model.UpdateCenter.xml ├── hudson.plugins.git.GitTool.xml ├── identity.key.enc ├── jenkins.install.InstallUtil.lastExecVersion ├── jenkins.install.UpgradeWizard.state ├── jenkins.telemetry.Correlator.xml ├── jobs //建立任務目錄 ├── logs //日誌目錄 ├── nodeMonitors.xml ├── nodes //多節點時 ├── plugins //插件目錄 ├── secret.key ├── secret.key.not-so-secret ├── secrets ├── updates ├── userContent ├── users └── workflow-libs
5、Jenkins使用配置插件(對ssh的配置)
系統管理 --> 管理插件 --> 已安裝
檢查是否有 「Git plugin」 和 「Publish Over SSH」 兩個插件,若是沒有,則需點擊 「可選插件」,找到並安裝
安裝後,點擊 「系統管理」 --> 「系統設置」
下拉,找到 「Publist Over SSH」
事先在jenkins服務器上生成一對密鑰
# ssh-keygen -f /root/.ssh/jenkins //可設置密碼也可不設置
「Passphrase」填寫設置的密碼,「Path to key」留空,「key」粘貼/root/.ssh/jenkins文件內容
點擊左下角「增長」 ,SSH Server,name自定義,Hostname填寫線上web服務器的ip,Username填寫root,Remote Directory填寫 /
將公鑰放到遠程web server機器/root/.ssh/authorized_keys文件,用於使用過程當中免密登陸訪問,能夠點jenkins的 「Publist Over SSH」配置部分的 」Test Configuration"進行測試 Success 表示成功
若是是多臺web server,繼續點擊」增長「,重複上兩步操做
點擊下角的 」保存「
6、建立任務(發佈PHP代碼)
點擊「新建」,任務名稱自定義,好比 test,選擇 「構建一個自由風格的軟件項目(Freestyle project)」 點擊下方的 「肯定」
描述,自定義
"源碼管理" 選擇 "Git"
"Repository URL" 填寫項目的 git 地址,若是是公共項目能夠不設置下面的參數,直接填寫一個git地址便可,如果私有項目,須要填寫認證信息,好比能夠選擇"SSH Username whith private key",而後設置Username以及private key
注意,jenkins服務器上須要安裝git
「Branches to build」默認爲 */master,發佈的分支爲master,保持默認
」構建觸發器「 和 「構建環境」 留空
「構建」,選擇"Send files or execute commands over SSH"
SSH Server,Name 選擇對應的服務器,Transfers,Source files 填寫 **/** ,表示所有文件
Remove prefix能夠指定裁掉的前綴目錄,這裏留空便可,Remote directory 指定遠程服務器上代碼存放路徑,好比/data/wwwroot/www.aaa.com,Exec command 爲文件傳輸完成後要執行的命令,好比能夠是更改文件權限的命令,設置完成後點擊「Add Transef Set」(能夠傳輸多個),若是還有另外的機器,能夠點擊「Add Server」重複以上操做
最後點擊左下角的「保存」
完成以上操做後,就能夠使用這個剛建立的任務去工做了。
選擇任務名稱進入的,點擊左面的「當即構建(Build Now)」(或者任務視圖中有可操做構建按鈕),就能把git上的代碼發佈到指定的服務器上。
點擊左下角的#1/#2...,而後再點擊「Console Output」能夠查看輸出日誌
7、Jenkins配置郵件--內置郵件
系統管理-->系統設置-->Jenkins Location 先設置系統管理員郵件地址,這裏的郵件地址須要和後續要設置的發郵件地址一致。
向下拉,找到 「郵件通知」 欄
填寫SMTP服務器,點右側的高級,打勾 「使用SMTP認證」,填寫用戶名密碼,若是使用的是ssl協議,還須要在這裏打勾,smtp端口默認爲 25
能夠打勾 「經過發送測試郵件測試配置」,而後填寫接收郵件的地址,點右側的Test configuration
而後就是到已經構建過的job裏去配置接收郵件的地址了。在最下面 「構建後操做」 那一欄,找到E-mail Notification,Recipients填寫收郵件人
郵件只會在job構建失敗時發送
8、Jenkins配置郵件--插件email-ext
插件名字Email Extension Plugin,默認已經安裝
系統管理-->系統設置-->Extended E-mail Notification
填寫SMTP server (如smtp.qq.com),[高級]點擊Use SMTP Authentication,填寫用戶名、密碼、SMTP port等
到對應構建任務中去配置一下,下拉到「構建後操做」
點擊 「增長構建後操做步驟」 ,選擇 「Editable Email Notfictation」,其中Project Recipient List 爲接收郵件的收件人,能夠在默認內容後面增長額外的收件人郵箱,用逗號分隔
點擊右下角的 「Advanced settings",定位到 」Triggers",而後點擊下方的 「Add Triger」,能夠增長髮郵件的條件。
參考文章 https://www.cnblogs.com/zz0412/p/jenkins_jj_01.html
9、Jenkins破解管理員密碼
# cat /var/lib/jenkins/users/admin_6452924050092568885/config.xml |grep password
<passwordHash>#jbcrypt:$2a$10$rPg/ozd6c9eJRboFrKo.Zuw.G562CssY0q9Z19I8IUntTY3BlYy.O</passwordHash>
對應了密碼 00fae69f05664e479047a60c53f02b12
# vim /var/lib/jenkins/users/admin_6452924050092568885/config.xml
<passwordHash>#jbcrypt:$2a$10$7cmrq4RP45lnXPjKmoCCnO3hr.hYN04BqSm3Y460h8cGpb.ECAAjm</passwordHash>
對應密碼爲 jenkins@123
# systemctl restart jenkins 重啓後生效
密碼正常修改路徑是頁面 右上角 點 「Admin」 用戶名--> 設置 進入頁面配置密碼
10、Jenkins部署java項目-之準備私有倉庫(192.168.128.131)及開源java代碼(zrlog)
java的項目是須要編譯和打包的
編譯和打包用maven完成,因此須要安裝maven
本次實驗,採用git私有倉庫的形式,涉及到配置密鑰
準備工做:
申請一個私有git倉庫(使用自建的gitlabGitlab.note)
生成密鑰對 # ssh-keygen -t rsa ,並將公鑰放到git服務端,而後能夠克隆gitlab倉庫數據
# cd /home/gitlab_repository
# git clone git@gitlab.example.com:java/java_test.git
下載zrlog的源碼 https://codeload.github.com/94fzb/zrlog/zip/master
# cd /home/gitlab_repository
# wget https://codeload.github.com/94fzb/zrlog/zip/master
# unzip master //會解壓出一個目錄 zrlog-master
# mv zrlog-master/* java_test/ //移動到 java_test/目錄下
將解壓後的源碼推送到gitlab遠程創庫
# cd java_test/
# git add .
# git push
11、Jenkins部署java項目-web服務器tomcat (192.168.128.128:8080)
在web服務器上安裝 jdk+tomcat,yum install -y java-1.8.0-openjdk
其中 jdk 能夠爲 openjdk,版本1.8
tomcat 二進制包安裝
# wget https://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.tar.gz
# mv apache-tomcat-8.5.42 /usr/local/tomcat
修改tomcat配置 關於tomcat參考點擊
# vim /usr/local/tomcat/conf/tomcat-users.xml //增長以下內容,是由於jenkins須要管理員用戶這個接口,因此須要到tomcat中配置
<role rolename="admin"/> <role rolename="admin-gui"/> <role rolename="admin-script"/> <role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-stats"/> <user name="admin" password="jenkins123" role="admin,manager,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status"/>
# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml //增長容許訪問IP:192.168.128.*
<Context antiResourceLocking="false" privileged="true" > <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192.168.128.*" /> <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/> </Context>
關閉tomcat # /usr/local/tomcat/bin/shutdown.sh
啓動tomcat # /usr/local/tomcat/bin/startup.sh
配置好後 http://192.168.128.128:8080/ 進入頁面登陸點擊任務再次進入頁面都會有用戶登陸的彈窗
登陸後點擊相關按鍵可進入 manager頁面http://192.168.128.128:8080/manager/html
12、Jenkins部署java項目-安裝maven
安裝maven
maven用於編輯java並打包
下載地址:https://maven.apache.org/download.cgi
# wget # wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz 下載二進制包後手動安裝(jenkins在插入管理能夠找到Maven Release Plug-in安裝包)
# tar zxvf apache-maven-3.6.1-bin.tar.gz -C /usr/local/
# /usr/local/apache-maven-3.6.1/bin/mvn --version
jenkins配置mave
系統管理(manage jenkins)-->全局工具配置(Global Tool Configuration)-->
Maven 配置(Mave Configuration)
填寫信息以下:
默認 settings 提供(Default settings provider): Settings file in filesystem
文件路徑(File Path): /usr/local/apache-maven-3.6.1/conf/settings.xml
默認全局 settings 提供(Default global settings provider): Global settings filesystem
文件路徑(File Path): /usr/local/apache-maven-3.6.1/conf/settings.xml
Maven 安裝
填寫信息以下:
Name: maven-3.6.1
MAVEN_HOME: /usr/local/apache-maven-3.6.1
能夠選擇自動安裝(Install automatically)這裏不勾選自動安裝。
保存(save)
13、Jenkins部署java項目-安裝插件
系統管理-->管理插件(Manage Plugins),檢查是否已經安裝 Maven Integration plugin(建立maven相關項目任務時要用到) 和 Deploy to container Plugin(用於把war包發佈到遠程),若沒有安裝則須要安裝這兩個插件(在jenkins上找到可直接安裝)。
安裝完插件後,須要重啓jenkins:systemctl restart jenkins
14、Jenkins部署java項目-構建job
登陸jenkins,點擊「新建Item」 進入頁面填寫以下內容:
輸入一個任務名稱:(任務名稱自定義)--選擇 「構建一個maven項目」-->點擊「肯定」 後會跳轉到一個新頁面(這個新建的任務項目頁面)
General頁面填寫:
描述: 根據自身要作的事情任務項目進行描述
源碼管理
Git
Repositories
Repository URL git@gitlab.example.com:java/java_test.git
Credentials 添加jenkins機器上的密鑰,用於認證git(已經上傳過公鑰給git上)
添加憑據(密鑰)
Domain 全局憑據(unrestricted)
類型(Kind) SSH Username with private key
範圍(Scope) 全局(Jenkins,nodes,items,all child items,etc)
Username git
Private Key 點選 Enter directly,然Key中ADD密鑰
選擇 git (當前上一步新加的git認證)
構建觸發器 、構建環境 、Pre Steps 保持默認
Build
Root POM 默認 pom.xml 不作修改
Goals and options 編輯mave時用到的一些選項,能夠留空,當前我們這填寫了: clean install -D maven.test.skip=true
Post Steps、構建設置 保持默認
構建後操做
Editable Email Notification
Project Recipient List 加入郵箱地址$DEFAULT_RECIPIENTS,254266155@qq.com
應用,保存。能夠償試 構建job,查看 控制檯輸出,有以下報錯:
[ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] Unable to locate the Javac Compiler in: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/jre/../lib/tools.jar Please ensure you are using JDK 1.4 or above and not a JRE (the com.sun.tools.javac.Main class is required). In most cases you can change the location of your Java installation by setting the JAVA_HOME environment variable. [INFO] 1 error [INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary for zrlog 2.1.3: [INFO] [INFO] zrlog .............................................. SUCCESS [ 30.534 s] [INFO] common ............................................. FAILURE [01:39 min] [INFO] data ............................................... SKIPPED [INFO] service ............................................ SKIPPED [INFO] web ................................................ SKIPPED [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 02:13 min [INFO] Finished at: 2019-06-13T20:32:33+08:00 [INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project common: Compilation failure [ERROR] Unable to locate the Javac Compiler in: [ERROR] /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/jre/../lib/tools.jar [ERROR] Please ensure you are using JDK 1.4 or above and [ERROR] not a JRE (the com.sun.tools.javac.Main class is required). [ERROR] In most cases you can change the location of your Java [ERROR] installation by setting the JAVA_HOME environment variable. [ERROR] -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException [ERROR] [ERROR] After correcting the problems, you can resume the build with the command [ERROR] mvn <goals> -rf :common Waiting for Jenkins to finish collecting data
java配置出錯,須要從新配置。可能與當前使用安裝的openjdk有關,考慮手動安裝jdk(也能夠使用jenkins)
系統管理(manage jenkins)-->全局工具配置(Global Tool Configuration)-->JDK 路徑下能夠選擇自動安裝,也能夠手動安裝後配置 別名 和 JAVA_HOME
15、Jenkins部署java項目-手動安裝JDK
安裝
# cd /usr/local/src/
JDK官網下載http://www.oracle.com/techZnetwork/java/javase/downloads/jdk8-downloads-2133151.html
# tar zxvf jdk-8u211-linux-x64.tar.gz
# mv jdk1.8.0_211/ /usr/local/jdk1.8
# systemctl restart jenkins
在jenkins上配置java_home
系統管理(manage jenkins)-->全局工具配置(Global Tool Configuration)-->JDK
JDK安裝欄填寫以下內容
別名 : jdk1.8
JAVA_HOME: /usr/local/jdk1.8
再去構建成功,能夠查看 控制檯輸出 日誌,以下爲打好的war包,但尚未上傳到web(tomcat)服務上去
/var/lib/jenkins/workspace/測試java代碼發佈到web/target/zrlog-2.1.3.war
16、Jenkins部署java項目-發佈war包
進入項目頁面-->配置-->構建後操做 進行以下配置:
增長構建後操做步驟-->選擇 Deploy war/ear to a container 填寫:
WAR/EAR files : 」**/*.war「
Contex path: 留空
Containers: 選擇Tomcat 8.x(根據自動web服務器部署的應用選擇)
Tomcat URL: 填寫war發要發佈到的機器url,如 http://192.168.128.128:8080/
Credentials: 點擊右側的ADD,添加用戶名和密碼(name="admin" password="jenkins123")
應用,保存
而後再去構建,同時能夠看控制檯輸出 日誌信息
同時根據信息狀況能夠到web服務器(192.168.128.128)上看是否相關內容發佈過來 /usr/local/tomcat/webapps