學習Jenkins(一)

持續集成之Jenkins安裝部署
 
一、安裝JDK
Jenkins是Java編寫的,因此須要先安裝JDK,這裏採用yum安裝,若是對版本有需求,能夠直接在Oracle官網下載JDK。
?
1
2
3
4
5
6
7
8
9
[root@linux-node2 ~] # yum install -y java-1.8.0
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
  * base: mirrors.163.com
  * extras: mirrors.163.com
  * updates: mirrors.cn99.com
Package 1:java-1.8.0-openjdk-1.8.0.131-2.b11.el7_3.x86_64 already installed and latest version
Nothing to do
[root@linux-node2 ~] #

  

二、安裝Jekins
?
1
2
3
4
5
cd /etc/yum .repos.d/
wget http: //pkg .jenkins.io /redhat/jenkins .repo
rpm -- import http: //pkg .jenkins.io /redhat/jenkins .io.key
yum install -y jenkins
systemctl start jenkins

  

三、檢查啓動狀況。看到佔用端口默認是8080
?
1
2
3
4
5
6
7
8
9
10
11
12
[root@linux-node2 yum.repos.d] # netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID /Program name   
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1 /systemd          
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1151 /sshd          
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1244 /master        
tcp6       0      0 :::3306                 :::*                    LISTEN      5755 /mysqld        
tcp6       0      0 :::111                  :::*                    LISTEN      1 /systemd          
tcp6       0      0 :::8080                 :::*                    LISTEN      8727 /java          
tcp6       0      0 :::22                   :::*                    LISTEN      1151 /sshd          
tcp6       0      0 ::1:25                  :::*                    LISTEN      1244 /master        
[root@linux-node2 yum.repos.d] #

  

四、訪問Jenkins
在瀏覽器輸入http://192.168.58.12:8080來訪問jenkins。
爲了安全考慮,首先須要解鎖Jenkins,請在/var/lib/jenkins/secrets/initialAdminPassword中查看文件。
 
 
五、密碼
[root@linux-node2 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
4687aa33576b4b748888bb60a88b2e4c
[root@linux-node2 ~]#
 
頁面上須要把上面的密碼輸入進去

 

 
複製密碼進去

 

 Jenkins只是個平臺,真正幹活的是插件
啥插件都有
選擇它推薦的

安裝過程javascript

 

因爲網絡緣由,有一些插件會安裝失敗
能夠點擊retry。很高几率會成功
下面的Subversion Plug-in  是svn插件

 

 

 

OWASP插件,它每一年出一個top 10 的安全漏洞
開放式Web應用程序安全項目(OWASP)是一個非營利組織,不附屬於任何企業或財團。
所以,由OWASP提供和開發的全部設施和文件都不受商業因素的影響。
OWASP支持商業安全技術的合理使用,它有一個論壇,在論壇裏信息技術專業人員能夠發表和傳授專業知識和技能。php

 
年度top10比較

 

 
 
 
設置Admin用戶和密碼

 

 
 
設置用戶名和密碼

 

 
登錄Jenkins

 

 

 

修復以後,重啓jenkins,打開頁面不報錯了

 

 

Hudson是Jenkins的前身,是基於Java開發的一種持續集成工具,用於監控程序重複的工做,
包括:
一、持續的軟件版本發佈/測試項目。
二、監控外部調用執行的工做。
HUDSON被收購了。,而後寫這個的人又搞了個Jenkinscss

 
 

裝gitlab插件html



目前已經部署好了gitlab,準備和gitlab集成。要安裝gitlab插件
右邊搜索gitlabjava

 

 
勾選這2個

 

 
 
下載中
 
下載完畢
它依賴ruby了。自動把ruby下載了,由於gitlab是ruby寫的
 
 
勾選安裝完重啓Jenkins
 

 

建立任務

 

構建一個自由風格的軟件項目

 

 

 

 
 
 
 源碼管理這裏能夠看到它支持git

 

 
系統管理--系統設置

 

 
看到url等

 

 
郵件相關

 

 
已經安裝的插件

高級這裏能夠看到node

更新插件的時候可使用代理

 

 
也能夠本地上傳插件

 

 
或者你放在這個目錄下,能夠把別人的整個目錄拷貝過來,重啓Jenkins便可生效
?
1
2
3
4
[root@linux-node2 plugins] # cd /var/lib/jenkins/plugins/
[root@linux-node2 plugins] # pwd
/var/lib/jenkins/plugins
[root@linux-node2 plugins] #

  

 
 
jenkins官網和官方文檔
jenkins官網

 

 一些文檔
它還有salt插件呢
 

 

報錯了。須要權限認證

 

 

點擊add彈出下面界面python

 

類型裏能夠選擇
 
 
除了上面配置的地方,下面也能夠配置

 

 

 

點擊下面mysql

和剛纔同樣

 

配置deploy keylinux


 

咱們能夠配置deploy keygit

以下配置

node2生成密鑰對
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[root@linux-node2 ~] # ssh-keygen -t rsa
Generating public /private rsa key pair.
Enter file in which to save the key ( /root/ . ssh /id_rsa ):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/ . ssh /id_rsa .
Your public key has been saved in /root/ . ssh /id_rsa .pub.
The key fingerprint is:
23:21:be:de:78:f7:82:40:b8:38:fa:6f:05:39:06:86 root@linux-node2.nmap.com
The key's randomart image is:
+--[ RSA 2048]----+
| .               |
|E o              |
| . o...          |
|  ..*. .         |
| . +.o. S        |
|o . .... .       |
|..  .o .         |
|.  ..oo o        |
| ..o+... o.      |
+-----------------+
[root@linux-node2 ~] #
 
 
[root@linux-node2 ~] # cd .ssh/
[root@linux-node2 . ssh ] # cat id_rsa.pub
ssh -rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCz0QBxB9kIv8H6Uxe+clLvM99 /7QOYTCVZzQKb0Q9Song1Yy9oryCcYWHogN30j80Ctbybu +3PAh4VIfz4SjY1tNd /Dv2Il3caz +5chvX0OL
DJCNl2w+Du7HjwdyszlzVc1rP4QTL /yYvrUz1fgBonRKa0/Y5CK7jEzQZ1 +ZMuN /E/ubrDX5FIp0jfPPnbtTryWW8BMloOb +Q8EFKnaI6Wbyx9JzslOIawCkM77LL9RhxMbQ6A3QoU
HozmlFnhfu7AXnhfCdPb02xx4RCOAFoY9pEtOH+eHzT7 /SQVf8VzEYO1vIe4TDP6sNN40/1pjUdBPcGiBMidM6pLk/j6CaxV root@linux-node2.nmap.com
[root@linux-node2 . ssh ] #

  

下面這裏此項目的private deploy key設置的地方。

 

把key複製進去,同時title起一個簡單明瞭的名字

 

添加成功(public deploy key要刪除,防止衝突)

 

 
 
這裏是public deploy key設置的地方

 

以下位置

 

 
node2拉取下看看,須要有git工具
?
1
2
3
4
5
6
7
8
9
[root@linux-node2 ~] # yum install git -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
  * base: mirrors.163.com
  * extras: mirrors.163.com
  * updates: mirrors.cn99.com
Package git-1.8.3.1-6.el7_2.1.x86_64 already installed and latest version
Nothing to do
[root@linux-node2 ~] #
把web-demo下載下來
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@linux-node2 ~] # git clone git@192.168.58.11:web/web-demo.git
Cloning into 'web-demo' ...
remote: Counting objects: 13, done .
remote: Compressing objects: 100% (8 /8 ), done .
remote: Total 13 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (13 /13 ), done .
[root@linux-node2 ~] # ls
anaconda-ks.cfg  tools  web-demo
[root@linux-node2 ~] # cd web-demo/
[root@linux-node2 web-demo] # ls
index.html  README.md
[root@linux-node2 web-demo] # cat index.html
hehehehhehehe
version 2.0
[root@linux-node2 web-demo] #   

 

node2上已經沒問題,開始配置jenkins的認證

這裏應該輸入私鑰

 

 複製私鑰

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@linux-node2 ~] # cat .ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAs9EAcQfZCL /B +lMXvnJS7zPff+0DmEwlWc0Cm9EPUqJ4NWMv
aK8gnGFh6IDd9I /NArW8m7vtzwIeFSH8 +Eo2NbTXfw79iJd3Gs /uXIb19DiwyQjZ
dsPg7ux48HcrM5c1XNaz+EEy /8mL61M9X4AaJ0SmtP2OQiu4xM0GdfmTLjfxP7m6
w1+RSKdI3zz527U68llvATJaDm /kPBBSp2iOlm8sfSc7JTiGsApDO +yy /UYcTG0O
gN0KFB6M5pRZ4X7uwF54XwnT29NsceEQjgBaGPaRLTh /nh80 + /0kFX/FcxGDtbyH
uEwz+rDTeNP9aY1HQT3BogTInTOqS5P4+gmsVQIDAQABAoIBAQCKQGMqhHIl++lU
YZab4qJJL4TjgoOFEOaWyLz8uBwj2K67vWqx /hQAqA7zCEGeywFA2CIPSspooqQm
c19gNw6+9C /LjOb5ohr9Dmmh0lJAV2X060znt2q1yDKkD7uzisqIerscYGSprXha
kkFZr9Br6KiT927tCViiV1BkXGMA4NAyFHQQBa493kYZ9tRM89nfzQXK8Ttjulp3
1qD3bPebsMWp6JuCtnFsRwfoYRnsYHHG3FsD5QOIV1tcKiT8v6fV5CklVejOn5O3
+992oNz0UqXuHD0GhFRGRo7Xro2XAsSpyxH0NPv6Aclz9eU6t3hXF+lg33l+tKYJ
HUrHvt9xAoGBANnNXmu72pyEhIMbWTw6qR2WAy5UL+hdggDilGbsTX9x33eZiaQR
bNT7qcX2CRq7pmXiH4o6LmljkkVYTGS /ZIkp6QZZp9CnE2Ywb0oo +UwfKPAXLMpd
2xBjg03YSzD6ElsPKeVgx78 //UGbcWZWMbw7i9k//ho2j3XMKwHIIABPAoGBANNa
MK6VGJDX /PPvre +ktF50bKj4VDWNdT5nEvjuEG98zIEIh5geAgPVYMXeBELlKmvw
Az /eto5puvtPF2bXk/Y75xJ/pYha5KIhQYhbt +GLk71pWywu9wvZopkEViVc2Tf9
vIo+SFJEjxgQeotJG0S24kCJfNfoh9oIwGSGDxwbAoGALel7yOwNlkbdBCIkumyH
L8RqoT5 /5tSnTfZ1YAjaAU6I09ZazGob7f2q +R73Jlp+JiX3jhTbqb2inNmTKP2r
fLqH8528oWBG15jILPLcMm6zG4FXIMWOIzNG /4bjusxMSEO3CjJPiQI9KbJRwkfT
LiHDRiWWNAJiVWuXeUWtcUMCgYEAwgmjeCTaEOC7ExmRDtqf3bf1qouShDgC0++9
s1ydKj3hYvV5x2aFYw+bcQ2Ly /6pG7 +WvCS0ZbscN209huWUqhQE6S7Xwn /wOAlg
KNhL0X5bfSIk2kOj+ /UrGmCo1lSP +J+zYRgdPapD1UwLtaTArC1bOvT+8RpC3yH5
wFBzvtECgYEAyYLpBV8vNzY7ilCmGctXtj5gsAvxOkYMVdaPkCXDr50qHBYYsHj4
22FdOq75zWgrIQo6Poke3IQcz4NML/+Z08r2qa7+4z5Jx5BnwXAnWEB9omcbANgD
m+h33eEXWr12L363c+ /RVdZPINkmhaS69u4/Njh +dI1lL8Ta+8Ihkow=
-----END RSA PRIVATE KEY-----
[root@linux-node2 ~] #

  

複製進去

 

添加描述

 

 

點擊OK

 

 

繼續編輯配置

 

這樣就不報錯了
下面還能夠指定從哪一個分支拉取,默認從master拉取,有些公司使用release分支

 

源碼瀏覽器

 

gitlab的url

 

去gitlab上找到http的url

 

找出gitlab的版本
?
1
2
3
[root@linux-node1 ~] # rpm -qa | grep gitlab
gitlab-ce-9.1.0-ce.0.el7.x86_64
[root@linux-node1 ~] #
輸入url和版本

 

版本只支持2位

 

拉到最下面保存

 

點擊當即構建

 

查看控制檯
下面這些都是控制檯輸出

 

從控制檯能夠看到它的工做路徑
?
1
2
3
4
[root@linux-node2 ~] # cd /var/lib/jenkins/workspace/auto-deploy
[root@linux-node2 auto-deploy] # ls
index.html  README.md
[root@linux-node2 auto-deploy] #

  

git show查看版本

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@linux-node2 auto-deploy] # git show
commit 7983661ca0d2be489b4442c3d49d137d2a1026df
Author: nmap <nmap@ test .com>
Date:   Fri Apr 28 22:20:59 2017 +0800
 
     2.0
 
diff --git a /index .html b /index .html
index f95f8e7..d77c60b 100644
--- a /index .html
+++ b /index .html
@@ -1,2 +1,2 @@
  hehehehhehehe
-version 2.1
+version 2.0
[root@linux-node2 auto-deploy] #

  

有個.get的目錄
?
1
2
3
[root@linux-node2 auto-deploy] # ls -a
.  ..  .git  index.html  README.md
[root@linux-node2 auto-deploy] #

  

 

 
持續代碼質量管理-Sonar部署

能檢查代碼裏有沒有bug,好比你代碼裏有個死循環的bug,不用運行,就能檢測出來
它還會給你代碼打分(代碼質量)
Sonar 是一個用於代碼質量管理的開放平臺。
經過插件機制,Sonar 能夠集成不一樣的測試工具,代碼分析工具,以及持續集成工具。與持續集成工具(例如 Hudson/Jenkins 等)不一樣,
Sonar 並非簡單地把不一樣的代碼檢查工具結果(例如 FindBugs,PMD 等)直接顯示在 Web 頁面上,
而是經過不一樣的插件對這些結果進行再加工處理,經過量化的方式度量代碼質量的變化,從而能夠方便地對不一樣規模和種類的工程進行代碼質量管理。
在對其餘工具的支持方面,Sonar 不只提供了對 IDE 的支持,能夠在 Eclipse 和 IntelliJ IDEA 這些工具裏聯機查看結果;
同時 Sonar 還對大量的持續集成工具提供了接口支持,能夠很方便地在持續集成中使用 Sonar。
此外,Sonar 的插件還能夠對 Java 之外的其餘編程語言提供支持,對國際化以及報告文檔化也有良好的支持。

Sonar部署
Sonar的相關下載和文檔能夠在下面的連接中找到:http://www.sonarqube.org/downloads/。須要注意最新版的Sonar須要至少JDK 1.8及以上版本。

?
1
2
3
4
5
6
7
8
9
10
[root@linux-node1 ~] # yum install -y java-1.8.0
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
  * base: mirrors.163.com
  * epel: mirrors.tuna.tsinghua.edu.cn
  * extras: mirrors.163.com
  * updates: mirrors.zju.edu.cn
Package 1:java-1.8.0-openjdk-1.8.0.131-2.b11.el7_3.x86_64 already installed and latest version
Nothing to do
[root@linux-node1 ~] #

  

下載sonar包並安裝
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
wget  https: //sonarsource .bintray.com /Distribution/sonarqube/sonarqube-5 .6.zip
 
[root@linux-node1 src] # pwd
/usr/local/src
[root@linux-node1 src] # ls
mysql-5.6.30-linux-glibc2.5-x86_64. tar .gz  sonarqube-5.6.zip
[root@linux-node1 src] #
 
[root@linux-node1 src] # yum install unzip -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
  * base: mirrors.163.com
  * epel: mirrors.tuna.tsinghua.edu.cn
  * extras: mirrors.163.com
  * updates: mirrors.cn99.com
Package unzip-6.0-16.el7.x86_64 already installed and latest version
Nothing to do
[root@linux-node1 src] #
 
 
[root@linux-node1 src] # unzip sonarqube-5.6.zip
[root@linux-node1 src] # mv sonarqube-5.6 /usr/local/
[root@linux-node1 src] # ln -s /usr/local/sonarqube-5.6/ /usr/local/sonarqube
[root@linux-node1 src] #

  

準備Sonar數據庫
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@linux-node1 src] # /usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf &
[root@linux-node1 src] # /usr/local/mysql/bin/mysql -S /usr/local/mysql/mysql.sock
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.30-log MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| t1                 |
| test               |
+--------------------+
5 rows in set (0.00 sec)
 
mysql>
 
mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> GRANT ALL ON sonar.* TO 'sonar' @ 'localhost' IDENTIFIED BY 'sonar@pw' ;
mysql> GRANT ALL ON sonar.* TO 'sonar' @ '%' IDENTIFIED BY 'sonar@pw' ;
mysql> FLUSH PRIVILEGES;

  

配置Sonar
?
1
2
3
4
[root@linux-node1 src] # cd /usr/local/sonarqube/conf/
[root@linux-node1 conf] # ls
sonar.properties  wrapper.conf
[root@linux-node1 conf] #
編寫配置文件,修改數據庫配置
?
1
2
3
4
[root@linux-node1 conf] # vim sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=sonae@pw
sonar.jdbc.url=jdbc:mysql: //localhost :3306 /sonar ?useUnicode= true &characterEncoding=utf8&rewriteBatchedStatements= true &useConfigs=maxPerformance

修改以後以下

 

它默認監聽的地址和端口
這裏不用改,知道就好了

 

啓動Sonar
    你能夠在Sonar的配置文件來配置Sonar Web監聽的IP地址和端口,默認是9000端口。
?
1
2
3
4
[root@linux-node1 conf] # /usr/local/sonarqube/bin/linux-x86-64/sonar.sh start
Starting SonarQube...
Started SonarQube.
[root@linux-node1 conf] #

  

第一次啓動慢,由於它要建立表
 
打開頁面

 

關於sonar的目錄結構
?
1
2
3
4
5
6
7
[root@linux-node1 conf] # cd /usr/local/sonarqube
[root@linux-node1 sonarqube] # ls
bin  conf  COPYING  data  extensions  lib  logs  temp  web
[root@linux-node1 sonarqube] # cd logs/
[root@linux-node1 logs] # ls
access.log  sonar.log
[root@linux-node1 logs] #

  

插件存放位置
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@linux-node1 logs] # cd /usr/local/sonarqube
[root@linux-node1 sonarqube] # ls
bin  conf  COPYING  data  extensions  lib  logs  temp  web
[root@linux-node1 sonarqube] # cd extensions/
[root@linux-node1 extensions] # ll
total 4
drwxr-xr-x 2 root root    6 Apr 29 16:34 deprecated
drwxr-xr-x 2 root root    6 Apr 29 16:35 downloads
drwxr-xr-x 3 root root   19 Jan 11  2016 jdbc-driver
drwxr-xr-x 2 root root 4096 Apr 29 16:34 plugins
[root@linux-node1 extensions] # cd plugins/
[root@linux-node1 plugins] # pwd
/usr/local/sonarqube/extensions/plugins
[root@linux-node1 plugins] #
 
[root@linux-node1 plugins] # ll
total 21952
-rw-r--r-- 1 root root     128 Apr 11  2016 README.txt
-rw-r--r-- 1 root root 7797781 Apr  7  2016 sonar-csharp-plugin-5.0.jar
-rw-r--r-- 1 root root 3191477 Apr 28  2016 sonar-java-plugin-3.13.1.jar
-rw-r--r-- 1 root root 1678073 Apr  7  2016 sonar-javascript-plugin-2.11.jar
-rw-r--r-- 1 root root 3233128 Apr  7  2016 sonar-scm-git-plugin-1.2.jar
-rw-r--r-- 1 root root 6564535 Apr  7  2016 sonar-scm-svn-plugin-1.3.jar
[root@linux-node1 plugins] #

  

安裝中文插件

 

 

用戶名和密碼默認都是admin

 

配置的地方

 

 
能夠選擇升級一些東西,也能夠搜索

 

點擊右邊的安裝,實際上它是wget那個jar包,而後放在響應目錄下

 

提示須要重啓

 

 提示重啓才生效

 

 restart

 

 
 另一種下載插件的途徑

 

搜索
點擊release

 

wget下載jar便可

 

查看已經安裝的
默認狀況下它只能分析java和JS的,由於它只安裝了java和JS的語言插件
若是想讓它分析python,和php的。須要讓它安裝對應的插件

 

安裝php和python的語言插件

 

 

安裝css插件

 

 

 
 
 

###############################################################################

安裝sonar Scanner


 

找到下面掃描器
經過這個掃描器能夠分析代碼分析

 

所以你也的安裝這個掃描器

 

上傳sonar-scanner-2.6.1.zip
?
1
2
3
4
5
6
7
8
9
[root@linux-node1 plugins] # cd /usr/local/src/
[root@linux-node1 src] # ls
mysql-5.6.30-linux-glibc2.5-x86_64. tar .gz  sonarqube-5.6.zip
[root@linux-node1 src] # rz -E
rz waiting to receive.
[root@linux-node1 src] # ls
mysql-5.6.30-linux-glibc2.5-x86_64. tar .gz  sonar-scanner-2.6.1.zip
sonarqube-5.6.zip
[root@linux-node1 src] #

  

下載中文插件包失敗,能夠經過迅雷下載

 

手動下載中文插件並上傳到此目錄下
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@linux-node1 plugins] # pwd
/usr/local/sonarqube/extensions/plugins
[root@linux-node1 plugins] # ll
total 29180
-rw-r--r-- 1 root root     128 Apr 11  2016 README.txt
-rw-r--r-- 1 root root 7797781 Apr  7  2016 sonar-csharp-plugin-5.0.jar
-rw-r--r-- 1 root root 3191477 Apr 28  2016 sonar-java-plugin-3.13.1.jar
-rw-r--r-- 1 root root 1678073 Apr  7  2016 sonar-javascript-plugin-2.11.jar
-rw-r--r-- 1 root root 3733262 Apr 29 17:26 sonar-php-plugin-2.10.0.2087.jar
-rw-r--r-- 1 root root 3663678 Apr 29 17:11 sonar-python-plugin-1.7.0.1195.jar
-rw-r--r-- 1 root root 3233128 Apr  7  2016 sonar-scm-git-plugin-1.2.jar
-rw-r--r-- 1 root root 6564535 Apr  7  2016 sonar-scm-svn-plugin-1.3.jar
[root@linux-node1 plugins] # rz -E
rz waiting to receive.
[root@linux-node1 plugins] # ll
total 29216
-rw-r--r-- 1 root root     128 Apr 11  2016 README.txt
-rw-r--r-- 1 root root 7797781 Apr  7  2016 sonar-csharp-plugin-5.0.jar
-rw-r--r-- 1 root root 3191477 Apr 28  2016 sonar-java-plugin-3.13.1.jar
-rw-r--r-- 1 root root 1678073 Apr  7  2016 sonar-javascript-plugin-2.11.jar
-rw-r--r-- 1 root root   36538 Apr 29 17:34 sonar-l10n-zh-plugin-1.11.jar
-rw-r--r-- 1 root root 3733262 Apr 29 17:26 sonar-php-plugin-2.10.0.2087.jar
-rw-r--r-- 1 root root 3663678 Apr 29 17:11 sonar-python-plugin-1.7.0.1195.jar
-rw-r--r-- 1 root root 3233128 Apr  7  2016 sonar-scm-git-plugin-1.2.jar
-rw-r--r-- 1 root root 6564535 Apr  7  2016 sonar-scm-svn-plugin-1.3.jar
[root@linux-node1 plugins] #

  

重啓sonar,讓插件生效
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@linux-node1 plugins] # /usr/local/sonarqube/bin/linux-x86-64/sonar.sh stop
Stopping SonarQube...
Waiting for SonarQube to exit ...
Stopped SonarQube.
[root@linux-node1 plugins] # lsof -i:9000
[root@linux-node1 plugins] # /usr/local/sonarqube/bin/linux-x86-64/sonar.sh start
Starting SonarQube...
Started SonarQube.
[root@linux-node1 plugins] # lsof -i:9000
[root@linux-node1 plugins] # lsof -i:9000
[root@linux-node1 plugins] # lsof -i:9000
[root@linux-node1 plugins] # lsof -i:9000
COMMAND   PID USER   FD   TYPE DEVICE SIZE /OFF NODE NAME
java    43957 root   77u  IPv4 195191      0t0  TCP *:cslistener (LISTEN)
[root@linux-node1 plugins] #

  

重啓後刷新頁面,看到變成中文的了

 

代碼規則這裏

 

一些規則,都是些公共的用法,它會告訴你什麼叫好,什麼叫很差
裝了語言插件纔會出現對應代碼規則

 

什麼狀況下算bug
壞味道,你的代碼可能寫的沒錯,可是不規範,風格可能不對。翻譯的硬傷

 

sonar-scanner纔是真正掃描代碼的,它鏈接sonar以後,掃描代碼,而後把掃描結果存入數據庫,sonar界面進行展現
?
1
2
3
4
5
[root@linux-node1 plugins] # cd /usr/local/src/
[root@linux-node1 src] # ls
mysql-5.6.30-linux-glibc2.5-x86_64. tar .gz  sonar-scanner-2.6.1.zip
sonarqube-5.6.zip
[root@linux-node1 src] #

  

解壓和安裝,並建立軟連接
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@linux-node1 src] # unzip sonar-scanner-2.6.1.zip
Archive:  sonar-scanner-2.6.1.zip
    creating: sonar-scanner-2.6.1 /bin/
   inflating: sonar-scanner-2.6.1 /bin/sonar-scanner 
   inflating: sonar-scanner-2.6.1 /bin/sonar-runner 
    creating: sonar-scanner-2.6.1 /conf/
   inflating: sonar-scanner-2.6.1 /conf/sonar-scanner .properties 
    creating: sonar-scanner-2.6.1 /lib/
   inflating: sonar-scanner-2.6.1 /lib/sonar-scanner-cli-2 .6.1.jar 
   inflating: sonar-scanner-2.6.1 /bin/sonar-runner .bat 
   inflating: sonar-scanner-2.6.1 /bin/sonar-scanner .bat 
[root@linux-node1 src] # ll
total 422960
-rw-r--r-- 1 root root 314592758 Apr  9 13:38 mysql-5.6.30-linux-glibc2.5-x86_64. tar .gz
-rw-r--r-- 1 root root 118012667 Apr 29 15:57 sonarqube-5.6.zip
drwxr-xr-x 5 root root        37 Apr 29 17:52 sonar-scanner-2.6.1
-rw-r--r-- 1 root root    501750 Apr 29 17:16 sonar-scanner-2.6.1.zip
[root@linux-node1 src] # mv sonar-scanner-2.6.1 /usr/local/
[root@linux-node1 src] # ln -s /usr/local/sonar-scanner-2.6.1/ /usr/local/sonar-scanner
[root@linux-node1 src] #

  

查看
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@linux-node1 local ] # cd /usr/local/
[root@linux-node1 local ] # ll
total 4
drwxr-xr-x.  2 root  root     6 Jun 10  2014 bin
drwxr-xr-x.  2 root  root     6 Jun 10  2014 etc
drwxr-xr-x.  2 root  root     6 Jun 10  2014 games
drwxr-xr-x.  2 root  root     6 Jun 10  2014 include
drwxr-xr-x.  2 root  root     6 Jun 10  2014 lib
drwxr-xr-x.  2 root  root     6 Jun 10  2014 lib64
drwxr-xr-x.  2 root  root     6 Jun 10  2014 libexec
lrwxrwxrwx   1 mysql mysql   46 Apr  4 14:15 mysql -> /usr/local/mysql-5 .6.30-linux-glibc2.5-x86_64/
drwxr-xr-x  13 mysql mysql 4096 Apr 29 16:01 mysql-5.6.30-linux-glibc2.5-x86_64
drwxr-xr-x.  2 root  root     6 Jun 10  2014 sbin
drwxr-xr-x.  5 root  root    46 Feb  6 01:26 share
lrwxrwxrwx   1 root  root    25 Apr 29 16:00 sonarqube -> /usr/local/sonarqube-5 .6/
drwxr-xr-x  10 root  root   111 Jun  1  2016 sonarqube-5.6
lrwxrwxrwx   1 root  root    31 Apr 29 17:53 sonar-scanner -> /usr/local/sonar-scanner-2 .6.1/
drwxr-xr-x   5 root  root    37 Apr 29 17:52 sonar-scanner-2.6.1
drwxr-xr-x.  2 root  root   108 Apr 29 17:52 src
[root@linux-node1 local ] #

  

把sonar-scanner和sonarqube關聯起來
?
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@linux-node1 local ] # cd sonar-scanner
[root@linux-node1 sonar-scanner] # ll
total 0
drwxr-xr-x 2 root root 92 May 12  2016 bin
drwxr-xr-x 2 root root 37 May 12  2016 conf
drwxr-xr-x 2 root root 40 May 12  2016 lib
[root@linux-node1 sonar-scanner] # cd conf/
[root@linux-node1 conf] # ll
total 4
-rw-r--r-- 1 root root 775 May 12  2016 sonar-scanner.properties
[root@linux-node1 conf] # pwd
/usr/local/sonar-scanner/conf
[root@linux-node1 conf] #

  

取消下面註釋

 

保存,退出

 

 

 

找一些代碼 對它進行分析



sonar官方提供了個樣板包,有各類源的代碼

打開下面地址
https://github.com/SonarSource

找到下面東西

 

 

下載

 

 

上傳並解壓sonar-scanning-examples-master.zip
裏面有不少語言
?
1
2
3
4
5
6
7
8
9
10
11
[root@linux-node1 ~] # ls
anaconda-ks.cfg  sonar-scanning-examples-master
ks.cfg           sonar-scanning-examples-master.zip
[root@linux-node1 ~] # cd sonar-scanning-examples-master
[root@linux-node1 sonar-scanning-examples-master] # ls
objc-llvm-coverage     sonarqube-scanner-build-wrapper-linux  swift-coverage
sonarqube-scanner      sonarqube-scanner-maven
sonarqube-scanner-ant  sonarqube-scanner-msbuild
[root@linux-node1 sonar-scanning-examples-master] # cd sonarqube-scanner
[root@linux-node1 sonarqube-scanner] # ls
copybooks  coverage-report  sonar-project.properties  src

  

下面能夠看到不少源碼
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@linux-node1 src] # pwd
/root/sonar-scanning-examples-master/sonarqube-scanner/src
[root@linux-node1 src] # ll
total 0
drwxr-xr-x 2 root root 46 Mar 23 18:26 abap
drwxr-xr-x 2 root root 25 Mar 23 18:26 cobol
drwxr-xr-x 2 root root 39 Mar 23 18:26 css
drwxr-xr-x 2 root root 33 Mar 23 18:26 directory
drwxr-xr-x 2 root root 22 Mar 23 18:26 erlang
drwxr-xr-x 2 root root 47 Mar 23 18:26 flex
drwxr-xr-x 2 root root 53 Mar 23 18:26 java
drwxr-xr-x 2 root root 22 Mar 23 18:26 javascript
drwxr-xr-x 2 root root 49 Mar 23 18:26 package
drwxr-xr-x 2 root root 21 Mar 23 18:26 php
drwxr-xr-x 2 root root 73 Mar 23 18:26 pli
drwxr-xr-x 2 root root 44 Mar 23 18:26 python
drwxr-xr-x 2 root root 26 Mar 23 18:26 rpg
drwxr-xr-x 2 root root 75 Mar 23 18:26 samples
drwxr-xr-x 2 root root 40 Mar 23 18:26 sql
drwxr-xr-x 2 root root 26 Mar 23 18:26 swift
drwxr-xr-x 2 root root 59 Mar 23 18:26 vb6
drwxr-xr-x 2 root root 25 Mar 23 18:26 web
drwxr-xr-x 2 root root 29 Mar 23 18:26 xml
[root@linux-node1 src] #

  

查看配置文件
?
1
2
3
4
5
6
[root@linux-node1 sonarqube-scanner] # ll
total 8
drwxr-xr-x  2 root root   75 Mar 23 18:26 copybooks
drwxr-xr-x  2 root root   39 Mar 23 18:26 coverage-report
-rw-r--r--  1 root root  647 Mar 23 18:26 sonar-project.properties
drwxr-xr-x 21 root root 4096 Mar 23 18:26 src

下面配置文件

項目裏必須有上面這個配置文件,沒有這個配置文件,沒法對其進行掃描
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@linux-node1 sonarqube-scanner] # cat sonar-project.properties
sonar.projectKey=org.sonarqube:sonarqube-scanner
sonar.projectName=Example of SonarQube Scanner Usage
sonar.projectVersion=1.0
 
sonar.sources=src,copybooks
 
sonar.sourceEncoding=UTF-8
 
## Cobol Specific Properties
 
# comma-separated paths to directories with copybooks
sonar.cobol.copy.directories=copybooks
# comma-separated list of suffixes
sonar.cobol. file .suffixes=cbl,cpy
sonar.cobol.copy.suffixes=cpy
 
 
 
## Flex Specific Properties
 
# retrieve code coverage data from the Cobertura report
sonar.flex.cobertura.reportPath=coverage-report /coverage-cobertua-flex .xml
 
 
 
# PL/I Specific Properties
sonar.pli.marginLeft=2
sonar.pli.marginRight=0
[root@linux-node1 sonarqube-scanner] #

  

樣例最新的地址

 進行掃描

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
[root@linux-node1 sonarqube-scanner] # /usr/local/sonar-scanner/bin/sonar-scanner
INFO: Scanner configuration file : /usr/local/sonar-scanner/conf/sonar-scanner .properties
INFO: Project root configuration file : /root/sonar-scanning-examples-master/sonarqube-scanner/sonar-project .properties
INFO: SonarQube Scanner 2.6.1
INFO: Java 1.8.0_131 Oracle Corporation (64-bit)
INFO: Linux 3.10.0-229.el7.x86_64 amd64
INFO: User cache: /root/ .sonar /cache
INFO: Load global repositories
INFO: Load global repositories ( done ) | time =153ms
WARN: Property 'sonar.jdbc.url' is not supported any more . It will be ignored. There is no longer any DB connection to the SQ database.
WARN: Property 'sonar.jdbc.username' is not supported any more . It will be ignored. There is no longer any DB connection to the SQ database.
WARN: Property 'sonar.jdbc.password' is not supported any more . It will be ignored. There is no longer any DB connection to the SQ database.
INFO: User cache: /root/ .sonar /cache
INFO: Load plugins index
INFO: Load plugins index ( done ) | time =32ms
INFO: Plugin [l10nzh] defines 'l10nen' as base plugin. This metadata can be removed from manifest of l10n plugins since version 5.2.
INFO: SonarQube server 5.6
INFO: Default locale: "en_US" , source code encoding: "UTF-8"
INFO: Process project properties
INFO: Load project repositories
INFO: Load project repositories ( done ) | time =33ms
INFO: Load quality profiles
INFO: Load quality profiles ( done ) | time =49ms
INFO: Load active rules
INFO: Load active rules ( done ) | time =582ms
WARN: SCM provider autodetection failed. No SCM provider claims to support this project. Please use sonar.scm.provider to define SCM of your project.
INFO: Publish mode
INFO: -------------  Scan Example of SonarQube Scanner Usage
INFO: Load server rules
INFO: Load server rules ( done ) | time =124ms
INFO: Base dir : /root/sonar-scanning-examples-master/sonarqube-scanner
INFO: Working dir : /root/sonar-scanning-examples-master/sonarqube-scanner/ .sonar
INFO: Source paths: src, copybooks
INFO: Source encoding: UTF-8, default locale: en_US
INFO: Index files
INFO: 13 files indexed
INFO: Quality profile for java: Sonar way
INFO: Quality profile for js: Sonar way
INFO: Quality profile for php: Sonar way
INFO: Quality profile for py: Sonar way
INFO: JaCoCoSensor: JaCoCo report not found : /root/sonar-scanning-examples-master/sonarqube-scanner/target/jacoco . exec
INFO: JaCoCoItSensor: JaCoCo IT report not found: /root/sonar-scanning-examples-master/sonarqube-scanner/target/jacoco-it . exec
INFO: Sensor JavaSquidSensor
INFO: Configured Java source version (sonar.java. source ): none
INFO: JavaClasspath initialization...
WARN: Bytecode of dependencies was not provided for analysis of source files, you might end up with less precise results. Bytecode can be provided using sonar.java.libraries property
INFO: JavaClasspath initialization done : 1 ms
INFO: JavaTestClasspath initialization...
WARN: Bytecode of dependencies was not provided for analysis of test files, you might end up with less precise results. Bytecode can be provided using sonar.java. test .libraries property
INFO: JavaTestClasspath initialization done : 1 ms
INFO: Java Main Files AST scan...
INFO: 2 source files to be analyzed
INFO: Java Main Files AST scan done : 639 ms
WARN: Java bytecode has not been made available to the analyzer. The org.sonar.java.bytecode.visitor.DependenciesVisitor@26e0d39c, org.sonar.java.checks.unused.UnusedPrivateMethodCheck@56382bc9 are disabled.
INFO: Java Test Files AST scan...
INFO: 2 /2 source files have been analyzed
INFO: 0 source files to be analyzed
INFO: Java Test Files AST scan done : 5 ms
INFO: Sensor JavaSquidSensor ( done ) | time =1306ms
INFO: Sensor Lines Sensor
INFO: 0 /0 source files have been analyzed
INFO: Sensor Lines Sensor ( done ) | time =6ms
INFO: Sensor PythonXUnitSensor
INFO: Sensor PythonXUnitSensor ( done ) | time =24ms
INFO: Sensor SurefireSensor
INFO: parsing /root/sonar-scanning-examples-master/sonarqube-scanner/target/surefire-reports
INFO: Sensor SurefireSensor ( done ) | time =7ms
INFO: Sensor JavaScriptSquidSensor
INFO: 1 source files to be analyzed
INFO: Sensor JavaScriptSquidSensor ( done ) | time =486ms
INFO: Sensor SCM Sensor
INFO: No SCM system was detected. You can use the 'sonar.scm.provider' property to explicitly specify it.
INFO: Sensor SCM Sensor ( done ) | time =0ms
INFO: Sensor Python Squid Sensor
INFO: 1 /1 source files have been analyzed
INFO: Python unit test coverage
INFO: Python integration test coverage
INFO: Python overall test coverage
INFO: Sensor Python Squid Sensor ( done ) | time =384ms
INFO: Sensor PHP sensor
INFO: 1 source files to be analyzed
INFO: 1 /1 source files have been analyzed
INFO: No PHPUnit test report provided (see 'sonar.php.tests.reportPath' property)
INFO: No PHPUnit unit test coverage report provided (see 'sonar.php.coverage.reportPath' property)
INFO: No PHPUnit integration test coverage report provided (see 'sonar.php.coverage.itReportPath' property)
INFO: No PHPUnit overall coverage report provided (see 'sonar.php.coverage.overallReportPath' property)
INFO: Sensor PHP sensor ( done ) | time =717ms
INFO: Sensor Analyzer for "php.ini" files
INFO: Sensor Analyzer for "php.ini" files ( done ) | time =3ms
INFO: Sensor org.sonar.plugins.javascript.lcov.UTCoverageSensor
INFO: Sensor org.sonar.plugins.javascript.lcov.UTCoverageSensor ( done ) | time =0ms
INFO: Sensor org.sonar.plugins.javascript.lcov.ITCoverageSensor
INFO: Sensor org.sonar.plugins.javascript.lcov.ITCoverageSensor ( done ) | time =0ms
INFO: Sensor Zero Coverage Sensor
INFO: Sensor Zero Coverage Sensor ( done ) | time =36ms
INFO: Sensor Code Colorizer Sensor
INFO: Sensor Code Colorizer Sensor ( done ) | time =1ms
INFO: Sensor CPD Block Indexer
INFO: JavaCpdBlockIndexer is used for java
INFO: DefaultCpdBlockIndexer is used for js
INFO: DefaultCpdBlockIndexer is used for php
INFO: DefaultCpdBlockIndexer is used for py
INFO: Sensor CPD Block Indexer ( done ) | time =81ms
INFO: Calculating CPD for 7 files
INFO: CPD calculation finished
INFO: Analysis report generated in 108ms, dir size=64 KB
INFO: Analysis reports compressed in 40ms, zip size=38 KB
INFO: Analysis report uploaded in 298ms
INFO: ANALYSIS SUCCESSFUL, you can browse http: //localhost :9000 /dashboard/index/org .sonarqube:sonarqube-scanner
INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
INFO: More about the report processing at http: //localhost :9000 /api/ce/task ? id =AVu6Wsaeyj9VSYmN4Z_C
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time : 9.136s
INFO: Final Memory: 51M /252M
INFO: ------------------------------------------------------------------------

  

網頁上查看掃描報告

 

網頁上顯示的名稱和配置文件配置的名稱同樣
?
1
2
3
4
[root@linux-node1 sonarqube-scanner] # cat sonar-project.properties
sonar.projectKey=org.sonarqube:sonarqube-scanner
sonar.projectName=Example of SonarQube Scanner Usage
sonar.projectVersion=1.0

  

 

點擊進去

 

右邊是本身已經下載的插件,而後纔會匹配代碼

 

點開重複的

 

繼續點開能夠看到重複的塊

 

它會把重複的部分標識出來

 

jenkins要集成sonar,要裝插件

 

它會把依賴安裝上

 

 

 
 
Jenkins實戰Sonar與Jenkins結合

 

 

這裏能夠看到sonar的配置

 

點擊下面

 

相關配置項

 

先填這些信息,保存
系統管理---全局工具配置

 

找到掃描器的配置

 

取消自動安裝,到這裏意識到sonar Scanner要和jenkins裝一個機器上

 

 以前安裝在了node1上,須要把它遷移到node2上,和jenkins在一個機器上

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@linux-node1 local ] # cd /usr/local/
[root@linux-node1 local ] # ll
total 4
drwxr-xr-x.  2 root  root     6 Jun 10  2014 bin
drwxr-xr-x.  2 root  root     6 Jun 10  2014 etc
drwxr-xr-x.  2 root  root     6 Jun 10  2014 games
drwxr-xr-x.  2 root  root     6 Jun 10  2014 include
drwxr-xr-x.  2 root  root     6 Jun 10  2014 lib
drwxr-xr-x.  2 root  root     6 Jun 10  2014 lib64
drwxr-xr-x.  2 root  root     6 Jun 10  2014 libexec
lrwxrwxrwx   1 mysql mysql   46 Apr  4 14:15 mysql -> /usr/local/mysql-5 .6.30-linux-glibc2.5-x86_64/
drwxr-xr-x  13 mysql mysql 4096 Apr 30 14:55 mysql-5.6.30-linux-glibc2.5-x86_64
drwxr-xr-x.  2 root  root     6 Jun 10  2014 sbin
drwxr-xr-x.  5 root  root    46 Feb  6 01:26 share
lrwxrwxrwx   1 root  root    25 Apr 29 16:00 sonarqube -> /usr/local/sonarqube-5 .6/
drwxr-xr-x  10 root  root   111 Jun  1  2016 sonarqube-5.6
lrwxrwxrwx   1 root  root    31 Apr 29 17:53 sonar-scanner -> /usr/local/sonar-scanner-2 .6.1/
drwxr-xr-x   5 root  root    37 Apr 29 17:52 sonar-scanner-2.6.1
drwxr-xr-x.  2 root  root   108 Apr 29 17:52 src
[root@linux-node1 local ] #

  

把整個目錄拷貝過去
?
1
2
3
[root@linux-node1 local ] # rsync -az sonar-scanner-2.6.1 192.168.58.12:/usr/local/
root@192.168.58.12's password:
[root@linux-node1 local ] #
node2上檢查,並建立軟連接
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@linux-node2 ~] # cd /usr/local/
[root@linux-node2 local ] # ll
total 4
drwxr-xr-x.  2 root  root     6 Jun 10  2014 bin
drwxr-xr-x.  2 root  root     6 Jun 10  2014 etc
drwxr-xr-x.  2 root  root     6 Jun 10  2014 games
drwxr-xr-x.  2 root  root     6 Jun 10  2014 include
drwxr-xr-x.  2 root  root     6 Jun 10  2014 lib
drwxr-xr-x.  2 root  root     6 Jun 10  2014 lib64
drwxr-xr-x.  2 root  root     6 Jun 10  2014 libexec
lrwxrwxrwx   1 mysql mysql   35 Apr  9 16:50 mysql -> mysql-5.6.30-linux-glibc2.5-x86_64/
drwxr-xr-x  13 mysql mysql 4096 Apr  9 20:56 mysql-5.6.30-linux-glibc2.5-x86_64
drwxr-xr-x.  2 root  root     6 Jun 10  2014 sbin
drwxr-xr-x.  5 root  root    46 Feb  6 01:26 share
drwxr-xr-x   5 root  root    37 Apr 29 17:52 sonar-scanner-2.6.1
drwxr-xr-x.  2 root  root    54 Apr  9 16:50 src
[root@linux-node2 local ] # ln -s sonar-scanner-2.6.1 sonar-scanner
[root@linux-node2 local ] # ll
total 4
drwxr-xr-x.  2 root  root     6 Jun 10  2014 bin
drwxr-xr-x.  2 root  root     6 Jun 10  2014 etc
drwxr-xr-x.  2 root  root     6 Jun 10  2014 games
drwxr-xr-x.  2 root  root     6 Jun 10  2014 include
drwxr-xr-x.  2 root  root     6 Jun 10  2014 lib
drwxr-xr-x.  2 root  root     6 Jun 10  2014 lib64
drwxr-xr-x.  2 root  root     6 Jun 10  2014 libexec
lrwxrwxrwx   1 mysql mysql   35 Apr  9 16:50 mysql -> mysql-5.6.30-linux-glibc2.5-x86_64/
drwxr-xr-x  13 mysql mysql 4096 Apr  9 20:56 mysql-5.6.30-linux-glibc2.5-x86_64
drwxr-xr-x.  2 root  root     6 Jun 10  2014 sbin
drwxr-xr-x.  5 root  root    46 Feb  6 01:26 share
lrwxrwxrwx   1 root  root    19 Apr 30 15:16 sonar-scanner -> sonar-scanner-2.6.1
drwxr-xr-x   5 root  root    37 Apr 29 17:52 sonar-scanner-2.6.1
drwxr-xr-x.  2 root  root    54 Apr  9 16:50 src
[root@linux-node2 local ] #
這2個地方改了
?
1
2
3
4
5
6
[root@linux-node2 conf] # pwd
/usr/local/sonar-scanner/conf
[root@linux-node2 conf] # ll
total 4
-rw-r--r-- 1 root root 781 Apr 30 15:24 sonar-scanner.properties
[root@linux-node2 conf] # vim sonar-scanner.properties

  

 

 
保存

 

 
 
如今只作到源碼管理,沒構建

 

 
這裏面就有全部你能幹的活

 

 

 
Analysis properties這裏填的是下面配置文件的內容,複製進去
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[root@linux-node1 ~] # cd sonar-scanning-examples-master
[root@linux-node1 sonar-scanning-examples-master] # cd sonarqube-scanner
[root@linux-node1 sonarqube-scanner] # ll
total 8
drwxr-xr-x  2 root root   75 Mar 23 18:26 copybooks
drwxr-xr-x  2 root root   39 Mar 23 18:26 coverage-report
-rw-r--r--  1 root root  647 Mar 23 18:26 sonar-project.properties
drwxr-xr-x 21 root root 4096 Mar 23 18:26 src
[root@linux-node1 sonarqube-scanner] # cat sonar-project.properties
sonar.projectKey=org.sonarqube:sonarqube-scanner
sonar.projectName=Example of SonarQube Scanner Usage
sonar.projectVersion=1.0
 
sonar.sources=src,copybooks
 
sonar.sourceEncoding=UTF-8
 
## Cobol Specific Properties
 
# comma-separated paths to directories with copybooks
sonar.cobol.copy.directories=copybooks
# comma-separated list of suffixes
sonar.cobol. file .suffixes=cbl,cpy
sonar.cobol.copy.suffixes=cpy
 
 
 
## Flex Specific Properties
 
# retrieve code coverage data from the Cobertura report
sonar.flex.cobertura.reportPath=coverage-report /coverage-cobertua-flex .xml
 
 
 
# PL/I Specific Properties
sonar.pli.marginLeft=2
sonar.pli.marginRight=0
[root@linux-node1 sonarqube-scanner] #

  

把下面
?
1
2
3
4
5
6
7
8
9
10
11
sonar.projectKey=org.sonarqube:sonarqube-scanner
sonar.projectName=Example of SonarQube Scanner Usage
sonar.projectVersion=1.0
sonar.sources=src,copybooks
sonar.sourceEncoding=UTF-8
sonar.cobol.copy.directories=copybooks
sonar.cobol. file .suffixes=cbl,cpy
sonar.cobol.copy.suffixes=cpy
sonar.flex.cobertura.reportPath=coverage-report /coverage-cobertua-flex .xml
sonar.pli.marginLeft=2
sonar.pli.marginRight=0

  

改爲
?
1
2
3
4
5
6
7
8
9
10
11
sonar.projectKey=demo
sonar.projectName=demo
sonar.projectVersion=1.0
sonar.sources=./
sonar.sourceEncoding=UTF-8
sonar.cobol.copy.directories=copybooks
sonar.cobol. file .suffixes=cbl,cpy
sonar.cobol.copy.suffixes=cpy
sonar.flex.cobertura.reportPath=coverage-report /coverage-cobertua-flex .xml
sonar.pli.marginLeft=2
sonar.pli.marginRight=0

  

複製進去

 

其它區域都不填寫,先保存

 

右邊多了個快捷方式

 

點擊當即構建

 

 

查看控制檯輸出

 

一些輸出

 

這裏配置文件就以參數的形式傳輸給它了
?
1
2
3
4
5
[auto-deploy] $ /usr/local/sonar-scanner/bin/sonar-scanner -e -Dsonar.host.url=http: //192 .168.58.11:9000 -Dsonar.sourceEncoding=UTF-8
  -Dsonar.cobol.copy.directories=copybooks -Dsonar.sources=./ -Dsonar.pli.marginRight=0 -Dsonar.projectVersion=1.0
  -Dsonar.projectKey=demo -Dsonar.cobol. file .suffixes=cbl,cpy
  -Dsonar.flex.cobertura.reportPath=coverage-report /coverage-cobertua-flex .xml -Dsonar.cobol.copy.suffixes=cpy -Dsonar.pli.marginLeft=2
  -Dsonar.projectName=demo -Dsonar.projectBaseDir= /var/lib/jenkins/workspace/auto-deploy

  

返回到工程,點擊進去

 

 
 

 

 

 

你能夠改儀表盤顯示

 

配置控件

 

 

你能夠添加代碼覆蓋率的控件
選一個項目demo

 

保存

 

 
你也能夠把歡迎刪除了

 

 

返回儀表盤

 

 
jenkins繼續編輯配置

 

還能夠設置構建後操做

 

 
把項目名改爲demo-sonar

 

再次當即構建

 

 
 
Jenkins實戰-Job關聯和Pipeline
新建一個項目

 

 

 

構建,這裏選擇執行shell

 

想先看看jenkins是以什麼用戶執行的

 

保存以後,點擊當即構建

 

查看控制檯,看到它以jenkins用戶執行的

 

這就有問題了。部署機是192.168.58.11 是node1,使用的是www用戶
jenkins在node2上
生產中,jenkins不少狀況下和部署機器也不在一臺
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@linux-node1 src] # su - www
Last login: Sat Apr 29 14:00:45 CST 2017 on pts /0
[www@linux-node1 ~]$ cd /scripts/
[www@linux-node1 scripts]$ . /deploy_all .sh
Usage: . /deploy_all .sh { deploy | rollback [ list |version ]}
[www@linux-node1 scripts]$ . /deploy_all .sh deploy
Already up-to- date .
code_build
web-demo_798366_2017-04-30-17-09-00. tar .gz                  100% 9059     8.9KB /s   00:00   
web-demo_798366_2017-04-30-17-09-00. tar .gz                  100% 9059     8.9KB /s   00:00   
test error
[www@linux-node1 scripts]$ vim deploy_all.sh
[www@linux-node1 scripts]$ . /deploy_all .sh deploy
Already up-to- date .
code_build
web-demo_798366_2017-04-30-17-09-49. tar .gz                  100% 9055     8.8KB /s   00:00   
web-demo_798366_2017-04-30-17-09-49. tar .gz                  100% 9055     8.8KB /s   00:00   
192.168.58.12. crontab .xml                                   100%   21     0.0KB /s   00:00   
HTTP /1 .1 200 OK
add to cluster
[www@linux-node1 scripts]$
經過下面方式能夠作到

 

可是須要配置密鑰認證
拷貝公鑰過去
?
1
2
3
4
5
6
7
8
9
10
[root@linux-node2 ~] # cat .ssh/id_rsa.pub
ssh -rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCz0QBxB9kIv8H6Uxe+clLvM99 /7QOYTCVZzQKb0Q9Song1Yy9oryCcYWHogN30j80Ctbybu +3PAh4VIfz4SjY1tNd /Dv2Il3caz +5chvX0OL
DJCNl2w+Du7HjwdyszlzVc1rP4QTL /yYvrUz1fgBonRKa0/Y5CK7jEzQZ1 +ZMuN /E/ubrDX5FIp0jfPPnbtTryWW8BMloOb +Q8EFKnaI6Wbyx9JzslOIawCkM77LL9RhxMbQ6A3QoU
HozmlFnhfu7AXnhfCdPb02xx4RCOAFoY9pEtOH+eHzT7 /SQVf8VzEYO1vIe4TDP6sNN40/1pjUdBPcGiBMidM6pLk/j6CaxV root@linux-node2.nmap.com
[root@linux-node2 ~] #
 
[www@linux-node1 scripts]$ cd
[www@linux-node1 ~]$ vim . ssh /authorized_keys
[www@linux-node1 ~]$

  

 

測試
?
1
2
3
[root@linux-node2 ~] # ssh www@192.168.58.11
Last login: Sun Apr 30 17:08:50 2017
[www@linux-node1 ~]$
先保存下

 

點擊當即構建,它會失敗
提示權限不足

 

給它sudo權限

 

構建這裏加上sudo

 

保存以後執行仍是不能夠

 

把這裏加上註釋,不讓它須要tty

 

再次構建

 

執行成功

 

 
ls -lrt 檢查
?
1
2
3
4
drwxrwxr-x 3 www www   69 Apr 30 17:09 web-demo_798366_2017-04-30-17-09-49
-rw-rw-r-- 1 www www 9063 Apr 30 20:06 web-demo_798366_2017-04-30-20-06-29. tar .gz
drwxrwxr-x 3 www www   69 Apr 30 20:06 web-demo_798366_2017-04-30-20-06-29
[root@linux-node2 webroot] #

  

如今咱們有2個,一個是代碼質量的,一個是自動部署腳本的
顯示陰天的是由於以前執行失敗過。有提示

 

 
 
 
開始學鉤子腳本
這邊一提交(push),這邊自動構建一遍
jenkins安裝此插件
它是一個觸發器插件

 

直接安裝

 

在demo-sonar項目選擇下面插件

 

 

 

這裏選擇下一個任務(項目)的名稱

 

搜索便可,出現demo-deploy

 

沒有參數,勾上
保存

 

 
如今的話,你要是構建demo-sonar,它就會構建demo-deploy

 

驗證下看看
demo-sonar項目,當即構建
 

 

看到項目這裏也自動執行了。11秒前

 

 
 
安裝學習piplines插件
代碼流水線插件,它會執行一系列操做
安裝構建插件

 

使用它,點擊選中的加號,新建一個視圖

 

 

點擊OK以後,彈出以下視圖

 

選擇初始化的job
顯示最近5次的構建

 

點擊保存

 

點擊保存以後顯示的

 

點擊run

 

刷新下也看到右邊執行了

 

 

點下面按鈕能夠看到控制檯輸出的快捷方式

 

 

 

 

 

Jenkins實戰-Jenkins與gitlab集成(Webhook)
如今想實現一個功能,代碼提交,push到gitlab上
jenkins自動幫你構建
?
1
2
3
4
5
6
[www@linux-node1 ~]$ cd web-demo/
[www@linux-node1 web-demo]$ ll
total 8
-rw-rw-r-- 1 www www 26 Apr 28 22:20 index.html
-rw-rw-r-- 1 www www  9 Apr 28 21:53 README.md
[www@linux-node1 web-demo]$

  

先安裝gitlab的鉤子腳本
鉤子插件已經安裝了

 

配置鉤子腳本
 
先在這裏配置

 

勾選這2個
第二個是當gitlab進行發佈的時候,對它進行build

 

它告訴你,你要在gitlab上填上下面這個url

 

有一個身份認證的東西
須要再裝一個插件才能實現認證
先保存了
安裝下面插件

 

 

只有裝了它才能使用身份驗證令牌的方式,讓雙方驗證
生成一個token
?
1
2
3
[root@linux-node2 ~] # openssl rand -hex 10
dc8f07cefb4a25e8c198
[root@linux-node2 ~] #

 

保存
在gitlab上添加這個鉤子腳本

 

登陸gitlab
在這個項目下找到鉤子配置的地方

 

打開它的wiki

 

 

下面告訴你了使用辦法

 

格式以下
buildByToken/build?job=RevolutionTest&token=TacoTuesday
 

http://192.168.58.12:8080/project/demo-sonar
整合下
http://192.168.58.12:8080/buildByToken/build?job=demo-sonar&token=dc8f07cefb4a25e8c198
job的名稱不能錯,token也不能錯

 
gitlab上此項目添加好url

 

點擊add
add以後
準備測試,這邊先打開日誌

 

頁面上test一下

 

成功調用

 

 日誌也刷出來了

 

 
打開jenkins的pipeline頁面,也能看到成功調用

 

 
 
模擬生產環境,寫個代碼,git push以後看看他可否執行
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[www@linux-node1 web-demo]$ pwd
/home/www/web-demo
[www@linux-node1 web-demo]$ ll
total 8
-rw-rw-r-- 1 www www 26 Apr 28 22:20 index.html
-rw-rw-r-- 1 www www  9 Apr 28 21:53 README.md
[www@linux-node1 web-demo]$ cat index.html
hehehehhehehe
version 2.0
[www@linux-node1 web-demo]$ echo "test jenkins" >>index.html
[www@linux-node1 web-demo]$ cat index.html
hehehehhehehe
version 2.0
test jenkins
[www@linux-node1 web-demo]$

  

提交到gitlab上
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[www@linux-node1 web-demo]$ git add *
[www@linux-node1 web-demo]$ git commit -m "jenkins hook test"
[master bd2b985] jenkins hook test
  1 file changed, 1 insertion(+)
[www@linux-node1 web-demo]$ git push
warning: push.default is unset ; its implicit value is changing in
Git 2.0 from 'matching' to 'simple' . To squelch this message
and maintain the current behavior after the default changes, use:
 
   git config --global push.default matching
 
To squelch this message and adopt the new behavior now, use:
 
   git config --global push.default simple
 
See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)
 
Counting objects: 5, done .
Delta compression using up to 4 threads.
Compressing objects: 100% (2 /2 ), done .
Writing objects: 100% (3 /3 ), 304 bytes | 0 bytes /s , done .
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.58.11:web /web-demo .git
    7983661..bd2b985  master -> master
[www@linux-node1 web-demo]$

  

在jenkins頁面上看到執行了

 

打開node2頁面,看到頁面是最新的了
最好再配置一個構建後操做,它會在構建失敗後執行
好比配置構建後發郵件操做

 

這裏面缺乏自動化測試
你能夠在部署後面放一個測試的腳本
好比添加一個demo-test
相關文章
相關標籤/搜索