學員投稿 | Jenkins與Gitlib實現自動化部署與持續構建
本文來自于學員"M20-陳功偉”投稿。
持續部署之jenkins與gitlab(一)
主要部分
- 安裝部署Jenkins和gitlib
- 了解gitlib的常用命令
- 部署haproxy與tomcat環境
- 配置Jenkins使用gitlib更新代碼
- 通過sonar實現代碼檢測
- 實現gitlib觸發Jenkins自動部署
- 通過Jenkins實現自動部署
- 實現haproxy動態添加刪除后端服務器
- 編寫腳本實現自動化部署與回滾
持續集成的分類:
- 持續集成:持續集成是指程序員在代碼的開發工程中,可以頻繁的將代碼部署到主干上,并進行自動化測試
- 持續交互:持續交互是指在持續集成的基礎之上,將代碼部署到線上測試環境
- 持續部署:持續部署是指在持續交互的基礎之上,將要部署的代碼實現自動部署,包括持續交互、持續部署
Gitlab簡介
gitlab是使用Ruby語言所研發,實現自動托管的git項目倉庫,可以通過web界面訪問進行配置。gitlab擁有與GitHub類似的功能,能夠瀏覽代碼,管理缺陷和注釋,可以管理團隊對倉庫的訪問,它非常容易使用,并提供一個歷史回顧,便于日后的管理和維護及其查找。
版本控制分類:集中式版本控制、分布式版本控制,常見的集中式版本控制有:CVS,SVN,分布式版本控制有:GitLab、GitHub。git在每個用戶都有自己的私有倉庫及其中央倉庫,用戶先提交代碼到本地的私有倉庫,而后確定無誤后將代碼提交到中央倉庫,這樣大大的方便了開發者,而相比CVS和SVN都是集中式的版本控制系統,工作時需要從中央服務器獲取最新代碼,改完之后需推送到服務器。如果是一個比較大的文件則需要足夠快的網絡才能快速提交完成,而使用分布式的版本控制系統,每個用戶都是一個完整的版本庫,即使沒有中央服務器也可以提交代碼或者回滾,最終再把改好的代碼提交至中央服務器進行合并即可。
圖示:
Gitlab安裝
安裝前準備:
1
2
3
4
5
6
7
|
yum? install ?vim?gcc?gcc-c++?wget?net-tools?lrzsz?iotop? lsof ?iotop? bash -completion?-y yum? install ?curl?policycoreutils?openssh-server?openssh-clients?postfix?-y wget?-O? /etc/yum .repos.d /epel .repo?http: //mirrors .aliyun.com /repo/epel-7 .repo systemctl??disable?firewalld sed ?-i? '/SELINUX/s/enforcing/disabled/' ?/etc/sysconfig/seLinux hostnamectl?? set - hostname ?xxx.com.cn yum?update?–y?&&?reboot |
1.關閉防火墻
systemctl stop firewalld systemctl disable firewalld ?iptables -F ?setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' ? /etc/sysconfig/seLinux ?#需重啟生效
2.配置好base源和epel源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/CentOS-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
可配置好gitlab官網源使用yum進行安裝,也可使用官方下載的rpm進行安裝配置
1
2
3
4
5
6
7
8
|
vim?? /etc/yum .repos.d /gitlab .repo [gitlab-ce] name=gitlab-ce baseurl=http: //mirrors .tuna.tsinghua.edu.cn /gitlab-ce/yum/el7 repo_gpgcheck=0 gpgcheck=0 enabled=1? gpgkey=https: //packages .gitlab.com /gpg .key |
3.安裝配置gitlab依賴于Java環境,安裝之前先安裝jdk,可使用rpm包進行安裝等
yum -y install jdk-8u111-Linux-x64.rpm
yum -y install gitlab-ce-8.13.5-ce.0.el7.rpm
4.編輯配置文件/etc/gitlab/gitlab.rb修改配置文件,測試配置文件,啟動服務
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
|
external_url? 'http://node1.alren.com' ?#此處為本機IP地址 gitlab_rails[ 'smtp_enable' ]?=? true gitlab_rails[ 'smtp_address' ]?=? "smtp.163.com" gitlab_rails[ 'smtp_port' ]?=?25 gitlab_rails[ 'smtp_user_name' ]?=? "chengong101300@163.com" gitlab_rails[ 'smtp_password' ]?=? "aaaaa" gitlab_rails[ 'smtp_domain' ]?=? "163.com" gitlab_rails[ 'smtp_authentication' ]?=?:login gitlab_rails[ 'smtp_enable_starttls_auto' ]?=? true gitlab_rails[ 'smtp_tls' ]?=? false gitlab_rails[ 'gitlab_email_from' ]?=? "chengong101300@163.com" user[ "git_user_email" ]?=? "chengong101300@163.com" #gitlab-ctl?reconfigure?#修改配置文件后需從新編譯此文件 #gitlab-ctl?status?#查看gitlab狀態信息?默認占用80、8080端口 #gitlab-ctl?stop/restart/start?關閉、重啟、啟動gitlab服務 [root@node1?~] # [root@node1?~] #?ss?-tnl State???????Recv-Q?Send-Q?Local?Address:Port???????????????Peer?Address:Port LISTEN??????0??????128???????127.0.0.1:8080??????????????????????????*:* LISTEN??????0??????128???????????????*:80????????????????????????????*:* LISTEN??????0??????128???????????????*:22????????????????????????????*:* LISTEN??????0??????128???????127.0.0.1:631???????????????????????????*:* LISTEN??????0??????100???????127.0.0.1:25????????????????????????????*:* LISTEN??????0??????128???????????????*:8060??????????????????????????*:* LISTEN??????0??????128??????????????:::22???????????????????????????:::* LISTEN??????0??????128?????????????::1:631??????????????????????????:::* LISTEN??????0??????100?????????????::1:25???????????????????????????:::* [root@node1?~] #?gitlab-ctl?status run:?gitlab-workhorse:?(pid?115536)?34579s;?run:?log:?(pid?16049)?300897s run:?logrotate:?(pid?9121)?2913s;?run:?log:?(pid?16068)?300889s run:?nginx:?(pid?115547)?34579s;?run:?log:?(pid?16055)?300895s run:?postgresql:?(pid?115553)?34578s;?run:?log:?(pid?15906)?300961s run:?redis:?(pid?115561)?34578s;?run:?log:?(pid?15823)?300967s run:?sidekiq:?(pid?115565)?34577s;?run:?log:?(pid?16038)?300903s run:?unicorn:?(pid?115568)?34577s;?run:?log:?(pid?16007)?300905s [root@node1?~] # |
1.通過瀏覽器訪問微博界面,接下來操作都是在web界面中進行,輸入本機IP地址加上端口進行訪問
2.將此處的注冊按鈕去除,防止其他人員配置登錄。需點擊最下面的save按鈕生效。
3.在創建項目之前需事先創建用戶和組及其根據需求將用戶加入到組中
提示:在gitlab中要事先創建組后才能在組中創建項目或以root身份創建項目,此定義在其自動生成的地址中有明確規定
創建項目(project)后將可以對項目進行一定的命令行操作。如下為命令行字符命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
Command?line?instructions Git?global?setup? #git全局設置 git?config?--global?user.name? "Administrator" git?config?--global?user.email? "admin@example.com" Create?a?new?repository git?clone?git@node1.alren.com:mywebs /webs .git? #從倉庫中克隆代碼 cd ?webs touch ?README.md git?add?README.md? #將修改的代碼或文件提交到本地的倉庫中 git?commit?-m? "add?README" ?#將修改的代碼或文件提交到本地的倉庫中并取名 git?push?-u?origin?master? #推送到中央服務器中 Existing?folder?or?Git?repository cd ?existing_folder git?init git?remote?add?origin?git@node1.alren.com:mywebs /webs .git git?add?. git?commit git?push?-u?origin?master |
可將多個用戶添加到同一個組,以后組內的成員將對此項目擁有一定的權限
創建完成之后它提示我們可以創建一個key對它進行管理,部署key之后則無需密碼可將項目克隆到本地,僅支持ssh模式免秘鑰,同時自動生成一個url,有兩種形式基于HTTP,SSH
我們點擊REDME可編輯一個文檔,隨意寫一些內容,點擊提交
填寫完將會出現路上所訴,可查看其內容。此時從gitlab中clone時需輸入用戶名和密碼,免去秘鑰登錄需添加ssh-key,免秘鑰登錄。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
[root@node1?~] #?git?clone?http://node1.alren.com/mywebs/webs.git Cloning?into? 'webs' ... Username? for ?'http://node1.alren.com' :?root Password? for ?'http://root@node1.alren.com' : fatal:?Authentication?failed? for ?'http://node1.alren.com/mywebs/webs.git/' [root@node1?~] #?git?clone?http://node1.alren.com/mywebs/webs.git Cloning?into? 'webs' ... Username? for ?'http://node1.alren.com' :?root Password? for ?'http://root@node1.alren.com' : warning:?You?appear?to?have?cloned?an?empty?repository. [root@node1?~] #?ls anaconda-ks.cfg??webapp??webs [root@node1?~] #?rm?-rf?webs/ [root@node1?~] #?git?clone??git@node1.alren.com:mywebs/webs.git Cloning?into? 'webs' ... remote:?Counting?objects:?3,? done . remote:?Total?3?(delta?0),?reused?0?(delta?0) Receiving?objects:?100%?(3 /3 ),? done . [root@node1?~] #?ls anaconda-ks.cfg??webapp??webs [root@node1?~] # |
Git總結:工作區就是編輯文件的目錄區域,需要將工作區的修改好的文件add到暫存區才能提交到git服務器,在工作區有多個文件的時候可以將一個或多個文件添加至暫存區提交到git服務器即可,剛提交后的暫存區和服務器的文件是一致的,因此也可以將最新的暫存區的文件進行上線和回滾,但是生產當中還是使用服務器進行代碼更新和回滾。
Jenkins簡介
Jenkins是一個高度插件化的管理平臺,這就是Jenkins流行的原因,因為Jenkins什么插件都有,有非常靈活的API,開發可以調用編寫插件,可完成不同任務的編排和執行。Jenkins有Java語言所研發,此環境則需部署在Java環境之上,可下載rpm包或下載.war包丟到webapps目錄下,啟動服務,即可訪問。
Jenkins官網地址:https://jenkins.io/
Jenkins安裝及啟動
通過rpm包進行安裝:
rpm -ivh jdk-8u111-Linux-x64.rpm
rpm -ivh https://pkg.jenkins.io/redhat/jenkins-2.27-1.1.noarch.rpm
可配置yum源,直接使用yum進行安裝:
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
在啟動之前編輯/etc/sysconfig/jenkins/配置文件,可對其數據目錄、啟動的用戶、啟動的端口等進行修改后啟動,也可以默認。
JENKINS_HOME="/data" ?#數據庫目錄,使用高i/o大容量磁盤
JENKINS_USER="jenkins" #啟動用戶
JENKINS_PORT="8080" ?#啟動端口
啟動服務:
systemctl jenkins start 或 /etc/init.d/jenkins start
加入開機自啟動(默認Jenkins啟動會占用8080端口,所以其他服務不能與之沖突):
chkconfig jenkins on
輸入IP地址進行訪問:將/data/secrets/initialAdminPassword中將密碼輸入到選框中
下一步則是選擇插件的步驟,可以自定義安裝,也可以安裝建議安裝的插件,安裝過程中需連接互聯網,且速度非常慢,可先忽略安裝插件,直接在將插件解壓至Jenkins的插件目錄。
如出現插件安裝失敗沒關系,使用準備好的插件包解壓至jenkins的plugin目錄即可目錄結構默認在/var/lib/jenkins/plugins/。
Jenkins基礎功能 ?
在jenkins-->系統管理-->系統設置設置管理員郵箱地址,當構建失敗時,則會發郵件通知
按照實際情況配置Jenkins URL及其系統管理員郵件地址
設置郵件通知,通過設置好的郵件給需要發送的收件人發件reply-to-address
Jenkins項目構建
構建項目-->輸入項目名稱-->構建一個自由風格的軟件項目-->點擊ok,不過在創建項目之前需事先配置好jenkins的Credentials-->將私鑰配置在此,將公鑰部署在gitlab中,這樣才能從gitlab中拉取代碼或項目。
主界面包含系統的大部分配置
在系統設置中可配置郵件通知,maven、gitlab、sonar scanner郵件通知等
在系統管理--->插件管理中可安裝大部分插件
持續部署之jenkins與gitlab(二)
測試部署項目,此項目配置成直接在gitlab中拉取代碼至Jenkins服務器中,在工作區域可見,項目名稱為auto-deloy
新建-->填寫項目名稱-->構建一個自由風格的軟件項目-->點擊OK按鈕
需要從gitlab中拉取代碼至Jenkins服務器則需要在gitlab中deploy keys部署公鑰(jenkins的公鑰),而在Jenkins服務器中需部署私鑰。
配置credentials,存放私鑰
需要在項目中配置從哪個gitlab服務器中拉取代碼,則需使用gitlab中ssh開頭的地址
點擊auto-deploy-->源碼管理-->選擇倉庫URL和credentials(資格證書)此證書為之前配置中的證書繼承即可
測試自動構建,查看是否能從gitlab中拉取代碼至本地Jenkins服務器中
可在工作區中查看Jenkins上拉取的代碼信息
持續部署之jenkins與gitlab(三)
sonar簡介
sonar是一個用于代碼質量管理的開放平臺,通過插件機制,sonar可以集成不同的測試工具,代碼分析工具,以及持續集成的工具(例如Jenkins、 Hudson )等。sonar并不是簡單地把代碼檢查結果直接顯示在web界面上,而是通過不同的插件對這些結果進行加工處理,通過量化的方式度量代碼的質量的變化,從而可方便的對不同的插件對這些代碼進行管理。。在對其他工具的支持方面,Sonar?不僅提供了對IDE?的支持,可以在?Eclipse和?IntelliJ IDEA?這些工具里聯機查看結果;同時Sonar還對大量的持續集成工具提供了接口支持,可以很方便地在持續集成中使用Sonar,此外,Sonar的插件還可以對?Java?以外的其他編程語言提供支持例如(PHP/Python),對國際化以及報告文檔化也有良好的支持。
sonar部署
sonar稱之為代碼質量管理,sonar的相關下載和文檔可以在官網下載,官網地址:https://www.sonarqube.org/downloads/?。需要特別注意最新版的Sonar需要jdk1.8至及以上版本及其數據庫版本在5.6以上(這個必須重視,不然啟動服務是報錯為數據庫連接失敗)。上篇文章我們已經可以成功的使用git進行從gitlab拉取代碼,Sonar的功能就是來檢查代碼是否有BUG,除此之外還有其他的功能,比如說:你的代碼注釋率是多少,代碼有一些建議,編寫語法的建議等。
1.編譯安裝數據庫5.6以上版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
cd ????/opt tar ?xf?mysql-5.6.34-Linux-glibc2.5-x86_64. tar .gz?-C? /usr/local/ cd ????/usr/local/ ln ?-sv?mysql-5.6.34-Linux-glibc2.5-x86_64????mysql useradd ?mysql?-s? /sbin/nologin ?-M? mkdir ?/data ?; chown ?-R?mysql.mysql? /data /usr/local/mysql/scripts/mysql_install_db ?--user=mysql?--datadir= /data ?--basedir= /usr/local/mysql cd ?/usr/local/mysql/ ; cp ?support-files /mysql .server? /etc/init .d /mysqld ?; cp ?/usr/local/mysql/my .cnf?? /etc/my .cnf? chmod ?+x? /etc/init .d /myqld ?;chkconfig?mysqld?on? #編輯/etc/profile.d/添加mysql.sh?? export ?PATH= /usr/local/mysql/bin :$PATH??? #編輯/etc/my.cnf,指明datadir和port,及其啟動MySQL創建sonar用戶并授權sonar用戶 grant?all?on?sonar.*?to? 'sonar' @ 'localhost' ?identified?by? 'pass' ;? grant?all?on?sonar.*?to? 'sonar' @ '10.1.10.%' ?identified?by? 'pass' ;? flush?privileges; |
2.下載解壓安裝sonar,在安裝之前需要配置jdk的環境,jdk的版本需要在1.8以上的版本
unzip sonarqube-5.6.6.zip
ln -sv /usr/local/sonarqube-5.6.6 ?/usr/local/sonar
編輯sonar配置文件,開啟如下配置:/usr/local/sonar/conf/sonar.properties
1
2
3
4
|
sonar.jdbc.username=sonar??? #連接數據庫用戶名 sonar.jdbc.password=chen???? #連接數據庫時密碼?jdbc.url=jdbc:mysql://10.1.10.67則表示? sonar.jdbc.url=jdbc:mysql: //10 .1.10.67:3306 /sonar ?useUnicode= true &characterEncoding=utf8&rewriteBatchedStatements= true &useConfigs=maxPerformance sonar.web.port=8800????????? #web界面的監聽端口 |
既然使用到MySQL數據庫則需連接MySQL數據庫,創建庫和授權用戶
1
2
3
4
|
create?database?sonar?character? set ?utf8?collate?utf8_general_ci; grant?all?on?sonar.*??to? 'sonar' @ 'localhost' ?identified?by? 'pass' ;? grant?all?on?sonar.*??to? 'soanr' @ '10.1.10.%' ?identified?by? 'pass' ;? flush?privileges; |
啟動服務:/usr/local/sonar/bin/Linux-x86_64/sonar.sh start #查看sonar監聽的端口8800師傅開啟,及其MySQL服務器中sonar庫中是否創建出多張表。。。
通過瀏覽器輸入IP地址進行訪問,默認情況下為英文,需要安裝插件漢化,但是漢化的效果不是很好
默認登錄sonar時,用戶名:admin 密碼:admin
安裝中文插件如下配置:
使用IP地址訪問如下:
如果安裝失敗可將插件下載好后解壓至sonar默認存放插件的目錄,重啟服務即可,安裝可掃描php/java/Python的插件。
sonar通過sonarqube scanner掃描器來對代碼進行掃描分析
官方文檔:
http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
sonar-scanner安裝部署?
unzip sonar-scanner-2.6.1.zip
ln -sv /usr/local/sonar-scanner-2.6.1 ?/usr/local/sonar-scanner
cd /usr/local/sonar-scanner/
grep "^[[:alpha:]]" sonar-scanner.properites
1
2
3
4
|
sonar.host.url=?? #sonar地址? sonar.sourceEncoding=UTF-8? #設定字符集 sonar.jdbc.password=chen??? #sonar數據庫密碼????#如下為連接數據庫地址 sonar.jdbc.url=jdbc:mysql: //10 .1.10.67:3306 /sonar ?useUnicode= true &characterEncoding=utf8 |
掃描時需要在源碼目錄中有掃描配置文件及其源碼
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
|
[root@node2?php-sonar-runner] #?ls README.md??sonar-project.properties??src??validation.txt [root@node2?php-sonar-runner] #?cat?sonar-project.properties #?Required?metadata sonar.projectKey=org.sonarqube:php-simple-sq-scanner? #sonar項目key名稱 sonar.projectName=PHP?::???? #sonar項目名稱 Simple?Project?::?SonarQube?Scanner? sonar.projectVersion=2.0?? #版本號 #?Comma-separated?paths?to?directories?with?sources?(required) sonar.sources=src? #源碼路徑 #?Language sonar.language=php? #掃描語言 #?Encoding?of?the?source?files sonar.sourceEncoding=UTF-8?? #字符編碼 [root@node2?php-sonar-runner] #?/usr/local/sonar-scanner/bin/sonar-scanner?#再次執行sonar-scanner INFO:?Scanner?configuration? file :? /usr/local/sonar-scanner/conf/sonar-scanner .properties INFO:?Project?root?configuration? file :? /home/mageedu/sonar-examples-master/projects/languages/php/php-sonar-runner/sonar-project .properties INFO:?SonarQube?Scanner?2.6.1 INFO:?Java?1.8.0_111?Oracle?Corporation?(64-bit) INFO:?Linux?3.10.0-327.el7.x86_64?amd64 INFO:?User?cache:? /root/ .sonar /cache INFO:?Load?global?repositories INFO:?Load?global?repositories?( done )?|? time =1777ms 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 =156ms 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.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 =832ms INFO:?Load?quality?profiles INFO:?Load?quality?profiles?( done )?|? time =1532ms INFO:?Load?active?rules INFO:?Load?active?rules?( done )?|? time =6049ms WARN:?SCM?provider?autodetection?failed.?No?SCM?provider?claims?to?support?thisproject.?Please?use?sonar.scm.provider?to?define?SCM?of?your?project. INFO:?Publish?mode INFO:?-------------??Scan?PHP?::?Simple?Project?::?SonarQube?Scanner INFO:?Language?is?forced?to?php INFO:?Load?server?rules INFO:?Load?server?rules?( done )?|? time =4650ms INFO:?Base? dir :? /home/mageedu/sonar-examples-master/projects/languages/php/php-sonar-runner INFO:?Working? dir :? /home/mageedu/sonar-examples-master/projects/languages/php/php-sonar-runner/ .sonar INFO:?Source?paths:?src INFO:?Source?encoding:?UTF-8,?default?locale:?en_US INFO:?Index?files INFO:?0?files?indexed INFO:?Quality?profile? for ?php:?Sonar?way INFO:?Sensor?Lines?Sensor INFO:?Sensor?Lines?Sensor?( done )?|? time =1ms INFO:?Sensor?SCM?Sensor INFO:?No?SCM?system?was?detected.?You?can?use?the? 'sonar.scm.provider' ?propertyto?explicitly?specify?it. INFO:?Sensor?SCM?Sensor?( done )?|? time =0ms INFO:?Sensor?Analyzer? for ?"php.ini" ?files INFO:?Sensor?Analyzer? for ?"php.ini" ?files?( done )?|? time =9ms INFO:?Sensor?SonarJavaXmlFileSensor INFO:?Sensor?SonarJavaXmlFileSensor?( done )?|? time =0ms INFO:?Sensor?Zero?Coverage?Sensor INFO:?Sensor?Zero?Coverage?Sensor?( done )?|? time =1ms INFO:?Sensor?Code?Colorizer?Sensor INFO:?Sensor?Code?Colorizer?Sensor?( done )?|? time =0ms INFO:?Sensor?CPD?Block?Indexer INFO:?DefaultCpdBlockIndexer?is?used? for ?php INFO:?Sensor?CPD?Block?Indexer?( done )?|? time =14ms INFO:?Calculating?CPD? for ?0?files INFO:?CPD?calculation?finished INFO:?Analysis?report?generated? in ?337ms,? dir ?size=8?KB INFO:?Analysis?reports?compressed? in ?63ms,?zip?size=3?KB INFO:?Analysis?report?uploaded? in ?643ms INFO:?ANALYSIS?SUCCESSFUL,?you?can?browse?http: //10 .1.10.12:8888 /dashboard/index/org .sonarqube:php-simple-sq-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: //10 .1.10.12:8888 /api/ce/task ? id =AVrrR_tSXasaRrmKgvaL INFO:?------------------------------------------------------------------------ INFO:?EXECUTION?SUCCESS INFO:?------------------------------------------------------------------------ INFO:?Total? time :?32.914s INFO:?Final?Memory:?40M /103M INFO:?------------------------------------------------------------------------ [root@node2?php-sonar-runner] # |
掃描后的結果會在web界面中給與顯示掃描結果
Jenkins結合sonar-scanner自動進行代碼掃描?
掃描之前需安裝sonarqube plugin插件
系統管理-->管理插件-->搜索sonarqub plugin插件安裝即可
Jenkins結合sonar則需在系統管理-->系統設置-->sonar配置段進行配置,輸入name、server URL、server version即可
系統管理-->Global tools configuration找到sonarqube填寫sonar的安裝路徑及其name
全局配置段配置完成之后則在接下來的項目中即可繼承全集配置段中的配置,在需要掃描的項目中嵌入,點開項目-->設置-->構建-->execute sonarqube scanner 將掃描參數填寫在文本框中
完成配置,點擊構建,即可自動進行代碼掃描測試
構建成功顯示為藍色的球,在旁邊會顯示sonar的圖標,點擊圖標可查看代碼的質量展示信息
構建完成后,我們發現這里的SonarQube可以點擊,我們點擊SonarQube就會鏈接到10.1.10.65:8800就是代碼查看器的地址
同時,可以在項目設置中配置構建后操作,例如構建失敗可定義郵件通知等
構建失敗后則會郵件提醒
持續部署之jenkins與gitlab(四)
代碼上線流水發布操作
Pipeline中文意思為流水線之意,公司可能有很多項目,如果使用Jenkins自動構建成功后,開發需要一項一項點擊,比較繁瑣,所以出現pipeline流水化作業的代碼測試管理,代碼質量測試完畢之后,我們需將代碼部署到測試環境或線上環境進行測試。
項目需求:在任意普通用戶的家目錄先將代碼從gitlab中拉取下來,編寫腳本,實現將代碼自動拷貝至后端的Tomcat主機或其他web服務器。
新建項目
點擊新建-->構建一個自由風格的軟件項目-->點擊OK
點擊項目名稱-->設置-->構建中選擇執行遠程腳本
重要提示:執行遠程命令主要涉及的是權限問題,我們要搞明白Jenkins是以什么權限來執行命令的,我們現在在Jenkins服務器上,如果在www用戶上執行命令,需要怎么做?
使用Jenkins用戶將公鑰發送給www用戶
使用root用戶將公鑰發送給www用戶,如果使用管理員命令則需sudo提權執行,因為web上默認執行命令的Jenkins用戶
將Jenkins上的私鑰發送給www用戶,將root的私鑰發送給www,并使用sudo提權,使得各個用戶之間可以互通。
1
2
3
4
5
6
7
|
[www@node2?~]$? cat ?. ssh /authorized_keys ssh -rsa?AAAAB3NzaC1yc2EAAAADAQABAAABAQDLS+HnuGeiI8xQ3duMoJgdF7y4hXRt6FcXNDsYcQ6LaLT8JHN0EajscuMxjrNNKD+2OtTIzMY9 /hkxIfH7TvUQRYfbNro6WTefnjmzyHaluG2gWvtL9zEJczxZhTAPLUa0ILkPzGvoiCC5em6wHWnqvlq7f/1BYSv4FyPhsrSiT3VlqoXB2ZvKRMOhPH5gd38EJIpgDAIPGJZpgLnEHpWJGIRcQBKZk8iwKSE +p38P5kggfbxc+epialKd69r7JjdHuZS /osBWUlklovUdGznlcFI + /1fKoXxL852MCZc/cleG40JDb/kDw1jId00Guza4UoK4G +74QdumilQD+RuP?www@node2.alren.com ssh -rsa?AAAAB3NzaC1yc2EAAAADAQABAAABAQDFGANCXHKFQbKqxSJCENMg41oMoFZmiwOUSUWfCucQzb6 /KRgUdhOjKaUavUZBhx5f7XXbIfpr3CHLJLyRxH7DQgSawmleH0gAkx9n2BaSpe9lKfY8h5qTB9T2nSW012Dsz4hK4n0AeNUvMfqcUO4/V4fVs +hOZCh /S3a5MH1rDkeekbguEnGeUPf7/6BzGpz6LEfR3U3Q4X9hvc9gDWYH4pbwz4xOHyrWADZRiwn76NNuLGkgvcUjl8jnpN02ADwyTlFFIAkgcmuxGg5Zaik3THyoksYoyJ30CPC1sFhVRlSR3eiXijpnTrnfGRLX21JKDRCM2TFoGTPd/WS6iZ3F ?root@node2.alren.com [www@node2?~]$ #編輯/etc/sudoer,注釋tty和添加必要的權限 root?ALL=(ALL)????ALL? jenkins?ALL=(ALL)?NOPASSWD? /usr/bin/ssh |
在/home/www寫一個測試腳本,檢車腳本是否可執行成功
然后我們點擊立即構建,查看構建結構
上訴腳本能自動執行,則可配置www用戶可以遠程ssh到web服務器,將家目錄下的源碼文件拷貝至web服務器的站點根目錄實現自動部署。這會看的是你寫腳本的能力。。。。
項目需求:當本地Jenkins代碼測試成功之后自動聯動部署代碼至web服務器的站點根目錄。一系列的動作需自動完成則需要安裝Parameterized插件,系統管理-->管理插件-->可選插件 搜索Parameterized,如果插件在線安裝不成功你懂得,可將下載好的插件解壓至plugin目錄下,將目錄下的所有文件屬組屬主換成Jenkins,重啟服務即可。
點擊項目-->設置-->構建后操作-->trigger parameterized build on projects -->Add triggers-->點擊保存
點擊構建項目test-delpoy時自動聯動auto-deloy,進行構建,可見第一個球閃爍完后,第二個球接著閃爍,完成自動構建
下載Pipline,它是一個更為方便觀察項目的自動構建的圖形化工具
系統管理-->插件管理-->搜索安裝插件pipline
點擊項目All后面的+號,新建一個視圖,給視圖取名,自定義一些選項。
pipeline視圖效果更加直觀:?紅色代表構建失敗,綠-藍代表項目沒有關聯,兩個都是綠的則表明項目相互關聯,依次執行,可清晰看到上下情況和次數。
git提交操作觸發Jenkins自動構建
Jenkins與gitlab集成后,實現的功能是開發寫好代碼push到gitlab上,push完成之后,jenkins自動幫我們立即構建,此方法一般使用在測試環境。
點擊此項目并可觸發項目聯動結合腳本可實現自動上線部署,而往往這個功能只用在測試部署,上線部署手動完成較安全。
需安裝GitlabHook Plugin插件
系統管理-->管理插件-->安裝GitlabHook Plugin
完成后,需配置gitlab hook插件,使用openssl rand -hex 14命令自動生成隨機碼
點擊項目-->設置-->構建后觸發器
配置完成后則需在gitlab中配置webhooks
點擊項目-->設置圖標
Build Authorization Token Root Plugin 插件使用說明
https://wiki.jenkins-ci.org/display/JENKINS/Build+Token+Root+Plugin
示例:buildByToken/buildWithParameters?job=RevolutionTest&token=TacoTuesday&Type=Mexican
http://10.1.10.12:8080/project/test-demo/buildByToken/build?job=test-demoTest&token=ac0c608d605db718fa4b1324
在gitlab上配置如下URL:格式如下:http://X.X.X.X:8080/buildByToken/build?job=項目名&token=隨機數
配置完后,可點擊Test按鈕進行測試
Jenkins控制臺輸出:
總結:完成上訴的自動聯動后,gitlab+jenkins基本上能滿足中小型企業的版本上線的工作,配置一次后即可讓你以后上線美滋滋,都交給開發,想不想和開發一起加班那就得看你怎么想的 :)