CI/CD平臺--jenkins

一、jenkins介紹

官網 https://jenkins.iojava

Jenkins是一個開源的、可擴展的持續集成、交付、部署(軟件/代碼的編譯、打包、部署)基於web界面的平臺。
jenkins的特色:linux

  • 持續集成和持續交付
    做爲一個可擴展的自動化服務器,Jenkins能夠用做簡單的CI服務器,或者變成任何項目的連續交付中心。
  • 簡易安裝
    Jenkins是一個獨立的基於Java的程序,能夠當即運行,包含Windows,Mac OS X和其餘類Unix操做系統。
  • 配置簡單
    Jenkins能夠經過其網頁界面輕鬆設置和配置,其中包括即時錯誤檢查和內置幫助。
  • 插件
    經過更新中心中的1000多個插件,Jenkins集成了持續集成和持續交付工具鏈中幾乎全部的工具。
  • 擴展
    Jenkins 能夠經過其插件架構進行擴展,從而爲 Jenkins 能夠作的事提供幾乎無限的可能性。
  • 分佈式
    Jenkins能夠輕鬆地在多臺機器上分配工做,幫助更快速地跨多個平臺推進構建,測試和部署。

二、jenkins安裝

Jenkins一般做爲一個獨立的應用程序在其本身的流程中運行, 內置Java servlet 容器/應用程序服務器(Jetty)。git

在安裝jenkins以前,須要確保已經安裝了java8以上(能夠是Java運行環境JRE,也能夠是Java開發工具包JDK)github

[root@jin-10 ~]# yum install -y java-1.8.0-openjdk

下載jenkins的yum源:web

[root@jin-10 ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo

安裝jenkins的密鑰:apache

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

安裝jenkins:bootstrap

[root@jin-10 ~]# yum install -y jenkins

啓動jenkins:vim

[root@jin-10 ~]# systemctl start jenkins
[root@jin-10 ~]# ps aux|grep jenkins
jenkins    9180 88.3  9.9 2336480 99024 ?       Ssl  14:20   0:07 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/libjenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
root       9214  0.0  0.1 112724   996 pts/1    S+   14:20   0:00 grep --color=auto jenkins

而後打開瀏覽器,並輸入本機IP:瀏覽器

管理員密碼能夠在/var/lib/jenkins/secrets/initialAdminPassword文件裏找到,也能夠在jenkins日誌文件中找到/var/log/jenkins/jenkins.log
輸入管理員密碼後,點擊「繼續」,進入jenkins的插件安裝界面,此處咱們選擇「安裝推薦的插件」:緩存

此時jenkins就會自動安裝須要安裝的插件:

而後建立管理員賬戶:

最後點擊「開始使用jenkins」:

此時會進入jenkins的默認界面:

jenkins的相關目錄:

[root@jin-10 ~]# rpm -ql jenkins
/etc/init.d/jenkins #jenkins的開啓/關閉/重啓文件
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins #配置文件
/usr/lib/jenkins #jenkins的主目錄
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/var/cache/jenkins #jenkins的緩存文件
/var/lib/jenkins #安裝目錄
/var/log/jenkins #日誌目錄

jenkins的插件管理

點擊「系統管理」→「插件管理」→「已安裝」, 檢查是否有「Git plugin」和「Publish Over SSH」兩個插件,若是沒有,則需點擊「可選插件」,找到它並安裝。
在Linux服務器上生成一對密鑰:

[root@jin-10 ~]# ssh-keygen -f/root/.ssh/jenkins
Generating public/private rsa key pair.
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/jenkins.
Your public key has been saved in /root/.ssh/jenkins.pub.
The key fingerprint is:
SHA256:fUC8UzU0Q8Ww5zL/zpHVMyMifRzmJ9GA0DoNQocy0Ak root@jin-10
The key's randomart image is:
+---[RSA 2048]----+
|   E+ o..++ .=O+.|
|     = o.o.o. o=.|
|      o . =o +...|
|         ++o+ oo.|
|        S.o+.*o=+|
|          ..o ++*|
|               o.|
|               .o|
|               .+|
+----[SHA256]-----+

點擊「系統管理」→ 「系統設置」 下拉,找到「Publish Over SSH」。

填寫下面的內容,測試是否能鏈接,而後點保存:

再新增一臺主機爲jin-11
把jin-10上的公鑰內容粘貼到jin-11的.ssh/authorized.keys中
而後點新增:

測試鏈接成功後,點擊保存。

三、發佈代碼

點擊「建立一個新任務」或「新建Item」:

再增長一臺服務器jin-11:

點擊「保存」。而後在主控制檯點擊「Build Now」:

此時就會自動開始構建,咱們能夠點擊控制檯查看輸出:

再在兩臺機器上查看是否成功:

能夠看到,兩臺機器都執行成功。
若是github上的代碼進行了更新,只要在jenkins上再次點擊「當即構建」就能夠發佈更新。

四、配置郵件服務

內置郵件的配置

依次點擊 系統管理 -> 系統設置 -> Jenkins Location 先設置系統管理員郵件地址,這裏的郵件地址須要和後續要設置的發郵件地址一致。

而後往下拉,找到「E-mail Notification」那一欄 填寫SMTP服務器,此處咱們以qq郵箱爲例,SMTP服務器爲smtp.qq.com,而後點右側的高級,打勾「Use SMTP Authentication」,填寫用戶名密碼,密碼爲受權碼。若是使用的是ssl協議,還須要在這裏打勾,smtp端口默認爲25 能夠打勾「經過發送測試郵件測試配置」,而後填寫接收郵件的地址,點右側的Test configuration:

能夠看到,郵件是能夠成功發送的。

保存設置後,回到剛纔的test項目下,增長一個構建後操做:

保存後,測試下:
首先刪除上一次構建生成的文件,而後給test_jenkins目錄加上特殊權限,使這個目錄不能添加文件。

[root@jin-10 /tmp]# rm -rf test_jenkins/*
[root@jin-10 /tmp]# chattr +i test_jenkins/

再點擊構建,查看控制檯:

能夠看到,構建失敗,同時,郵件也已發出。
查看是否已收到郵件:

郵件插件--Email Extension Plugin

因爲內置的郵件功能通常,知足不了大部分的需求,因此通常咱們都使用郵件插件Email Extension Plugin來發送郵件。
咱們把內置的郵件通知關掉,再點擊 系統管理->系統設置->Extended E-mail Notification,配置以下:

再打開test項目,把原來的E-mail Notification刪除,增長構建後操做 Editable Email Notification:

點擊保存後,再選擇當即構建,查看控制檯輸出:

能夠看到,不管構建成功與否,都會發送郵件。

五、部署JAVA項目

5.1 配置maven

JAVA項目是須要編譯和打包的,而編譯和打包用的都是maven,須要咱們安裝maven插件。
在安裝maven插件以前,須要在主機上(jin-10)下載maven安裝包並解壓:
maven的下載地址:https://maven.apache.org/download

[root@jin-10 /usr/local/src]# wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz
--2019-09-12 13:27:03--  http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz
正在解析主機 mirror.bit.edu.cn (mirror.bit.edu.cn)... 114.247.56.117, 2001:da8:204:1::22
正在鏈接 mirror.bit.edu.cn (mirror.bit.edu.cn)|114.247.56.117|:80... 已鏈接。
已發出 HTTP 請求,正在等待迴應... 200 OK
長度:9142315 (8.7M) [application/octet-stream]
正在保存至: 「apache-maven-3.6.2-bin.tar.gz」

100%[==============================================>] 9,142,315    344KB/s 用時 28s    

2019-09-12 13:27:31 (321 KB/s) - 已保存 「apache-maven-3.6.2-bin.tar.gz」 [9142315/9142315])

[root@jin-10 /usr/local/src]# tar zxvf apache-maven-3.6.2-bin.tar.gz

把解壓的目錄移動到/usr/local/下:

[root@jin-10 /usr/local/src]# mv apache-maven-3.6.2 /usr/local/

查看maven的相關信息:

[root@jin-10 /usr/local]# ./apache-maven-3.6.2/bin/mvn --version
Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-27T23:06:16+08:00)
Maven home: /usr/local/apache-maven-3.6.2
Java version: 1.8.0_222, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-0.el7_6.x86_64/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.27.2.el7.x86_64", arch: "amd64", family: "unix"

依次選擇 系統管理-->全局工具配置-->新增Maven:

5.2 安裝相關的插件

系統管理-->管理插件,查看Maven Integration 和 Deploy to container兩個插件是否已安裝,如沒有則安裝。

安裝完成後需重啓jenkins

systemctl restart jenkins

5.3 建立私有倉庫

打開gitlab,並建立一個名爲test_java的項目和空倉庫:

先給git做一個全局配置,設定用戶和郵箱 :

[root@jin-10 ~]# git config --global user.name "zjin"
[root@jin-10 ~]# git config --global user.email "zjin@git.com"

克隆遠程倉庫到本地,而後寫入一個文件README.md並推送到遠程倉庫:

[root@jin-10 ~]# git clone git@192.168.154.10:root/test_java.git
正克隆到 'test_java'...
The authenticity of host '192.168.154.10 (192.168.154.10)' can't be established.
ECDSA key fingerprint is SHA256:WiJY7DRJy/UJcTtP5LjqnfYrqe9NTP+Rc8Fajy6dzBc.
ECDSA key fingerprint is MD5:c3:18:f8:05:ec:89:3f:1b:27:89:61:2b:ec:a7:1e:47.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.154.10' (ECDSA) to the list of known hosts.
warning: 您彷佛克隆了一個空版本庫。
[root@jin-10 ~]# cd test_java/
[root@jin-10 ~/test_java]# echo 'Hello world!' >> README.md
[root@jin-10 ~/test_java]# git add README.md 
[root@jin-10 ~/test_java]# git commit -m "add README.md"
[master(根提交) f8d8431] add README.md
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
[root@jin-10 ~/test_java]# git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 221 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.154.10:root/test_java.git
 * [new branch]      master -> master
分支 master 設置爲跟蹤來自 origin 的遠程分支 master。
[root@jin-10 ~/test_java]# echo 'test_java project' >> README.md 
[root@jin-10 ~/test_java]# git add README.md 
[root@jin-10 ~/test_java]# git commit -m "change README.md"
[master 9b9f0bc] change README.md
 1 file changed, 1 insertion(+)
[root@jin-10 ~/test_java]# git push
warning: push.default 未設置,它的默認值將會在 Git 2.0 由 'matching'
修改成 'simple'。若要再也不顯示本信息並在其默認值改變後維持當前使用習慣,
進行以下設置:

  git config --global push.default matching

若要再也不顯示本信息並從如今開始採用新的使用習慣,設置:

  git config --global push.default simple

參見 'git help config' 並查找 'push.default' 以獲取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。若是您有時要使用老版本的 Git,
爲保持兼容,請用 'current' 代替 'simple' 模式)

Counting objects: 5, done.
Writing objects: 100% (3/3), 274 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.154.10:root/test_java.git
   f8d8431..9b9f0bc  master -> master

查看遠程倉庫是否有這個文件:

5.4 下載zrlog源碼

下載地址:https://codeload.github.com/94fzb/zrlog/zip/master

下載後解壓:

[root@jin-10 ~]# unzip zrlog-master.zip

解壓後移動到test_java目錄下,而後推送到遠程倉庫:

[root@jin-10 ~]# mv zrlog-master/* test_java/
mv:是否覆蓋"test_java/README.md"? y
[root@jin-10 ~]# cd !$
cd test_java/
[root@jin-10 ~/test_java]# ls
bin     data  LICENSE  mvnw.cmd  README.en-us.md  service
common  doc   mvnw     pom.xml   README.md        web
[root@jin-10 ~/test_java]# git add .
[root@jin-10 ~/test_java]# git commit -m "add zrlog"
[root@jin-10 ~/test_java]# git push

查看是否推送成功到遠程倉庫:

5.5 安裝並配置tomcat

下載並解壓:

[root@jin-10 /usr/local/src]# tar zxvf apache-tomcat-8.5.35.tar.gz 
[root@jin-10 /usr/local/src]# mv apache-tomcat-8.5.35 /usr/local/tomcat
[root@jin-10 /usr/local/src]# cd !$
cd /usr/local/tomcat
[root@jin-10 /usr/local/tomcat]# ls
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work

修改文件 vim /usr/local/tomcat/conf/tomcat-users.xml,加入以下內容:

<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-status"/>
<user name="admin" password="123456" roles="admin,manager,admin-gui,admin-script,manager-gui,
manager-script,manager-jmx,manager-status" />

啓動tomcat後會發現8080端口被佔用,咱們修改下端口,更改成8081:

再修改配置文件vim /usr/local/tomcat/webapps/manager/META-INF/context.xml,增長以下圖的IP段:

再從新啓動tomcat:

[root@jin-10 ~]# /usr/local/tomcat/bin/shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@jin-10 ~]# /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@jin-10 ~]# netstat -lntp |grep 8081
tcp6       0      0 :::8081                 :::*                    LISTEN      53513/java

在瀏覽器中打開,並點擊如圖所示位置,此時會提示咱們輸入用戶名和密碼進行認證:

點擊肯定後,就會進入Tomcat Web Application Manager管理界面:

5.6 構建job

返回jenkins的主界面,點擊新建,名稱自定義,選擇構建一個maven項目」,點擊肯定。

源碼管理,選擇要構建的gitlab地址:

此時會報錯,須要配置相對應的key,點擊「Add」那裏,而後選擇「jenkins」,類型選擇「SSH Username with private key」,username填寫"git",再粘貼jin-10主機的私鑰:

"build"欄填寫以下:

「構建後操做」,選擇「增長構建後操做」裏的"Editable Email Notification",如圖所示:

5.7 發佈war包

構建後操做
點擊「增長構建後操做步驟」選擇「Deploy war/ear to a container」,「WAR/EAR files」填寫「**/*.war」,Contex path留空,Containers選擇Tomcat 8.x,Tomcat URL填寫要把war包發佈到的那臺機器的url,如http://192.168.154.10:8080 Credentials這裏須要點擊右側的Add,添加用戶名和密碼

繼續點擊「增長構建後操做步驟」選擇「Editable Email Notification」 Project Recipient List,改成$DEFAULT_RECIPIENTS,493734218@ qq.com, 意思是增長額外一個收件人。

點擊右下角的「Advanced settings」,定位到「Triggers」,而後點擊下方的「Add Trigger」,能夠增長髮郵件的條件。 最後點左下角的「保存」。 以後就能夠點左側的「當即構建」,而後能夠查看對應任務的「控制檯輸出」。

相關文章
相關標籤/搜索