久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

學員投稿 | 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都是集中式的版本控制系統,工作時需要從中央服務器獲取最新代碼,改完之后需推送到服務器。如果是一個比較大的文件則需要足夠快的網絡才能快速提交完成,而使用分布式的版本控制系統,每個用戶都是一個完整的版本庫,即使沒有中央服務器也可以提交代碼或者回滾,最終再把改好的代碼提交至中央服務器進行合并即可。

圖示:

wKioL1hrZt6SccxtAADavCX1YJw438.png

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地址加上端口進行訪問

wKiom1hrjTvRqfL3AADGDJ57B9Y968.png

2.將此處的注冊按鈕去除,防止其他人員配置登錄。需點擊最下面的save按鈕生效。

wKiom1hrkD7j-EwAAADHdc587EI842.png

3.在創建項目之前需事先創建用戶和組及其根據需求將用戶加入到組中

wKioL1hrkeTSixE6AACf3Xa0uFo956.png

提示:在gitlab中要事先創建組后才能在組中創建項目或以root身份創建項目,此定義在其自動生成的地址中有明確規定

wKiom1hrkzLAbfsCAADkrjsHTPc367.png

創建項目(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

可將多個用戶添加到同一個組,以后組內的成員將對此項目擁有一定的權限

wKioL1hrl0nRtr_KAADU138xlB4352.png

wKiom1hroJCAQJAxAACxz47ZKzU353.png

wKioL1hrmYexhwe9AADCXapQm4s874.png

創建完成之后它提示我們可以創建一個key對它進行管理,部署key之后則無需密碼可將項目克隆到本地,僅支持ssh模式免秘鑰,同時自動生成一個url,有兩種形式基于HTTP,SSH

我們點擊REDME可編輯一個文檔,隨意寫一些內容,點擊提交

wKioL1hrmxmhbzLkAABnNuXwLeo187.png

填寫完將會出現路上所訴,可查看其內容。此時從gitlab中clone時需輸入用戶名和密碼,免去秘鑰登錄需添加ssh-key,免秘鑰登錄。

wKiom1hropvg4xaKAAEbULKJ-zg416.png
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中將密碼輸入到選框中

wKioL1hrsX6Cs63FAACxz7d8TkY652.png

下一步則是選擇插件的步驟,可以自定義安裝,也可以安裝建議安裝的插件,安裝過程中需連接互聯網,且速度非常慢,可先忽略安裝插件,直接在將插件解壓至Jenkins的插件目錄。

wKiom1hrsbfQi7hCAAFctuOqAU4173.png

wKiom1hrsseCIWydAAC4z0fRygs791.png

如出現插件安裝失敗沒關系,使用準備好的插件包解壓至jenkins的plugin目錄即可目錄結構默認在/var/lib/jenkins/plugins/。

wKiom1hrs8Lwtqd1AABiqrCIMLA769.png

Jenkins基礎功能 ?

在jenkins-->系統管理-->系統設置設置管理員郵箱地址,當構建失敗時,則會發郵件通知

按照實際情況配置Jenkins URL及其系統管理員郵件地址

wKioL1hrtViBv0VpAABdiFDOzBU651.png

設置郵件通知,通過設置好的郵件給需要發送的收件人發件reply-to-address

wKiom1hrtVmhMeW1AABib8izpd4671.png

Jenkins項目構建

構建項目-->輸入項目名稱-->構建一個自由風格的軟件項目-->點擊ok,不過在創建項目之前需事先配置好jenkins的Credentials-->將私鑰配置在此,將公鑰部署在gitlab中,這樣才能從gitlab中拉取代碼或項目。

wKiom1hruYmD5mZiAADsByw1YgQ930.png

主界面包含系統的大部分配置

在系統設置中可配置郵件通知,maven、gitlab、sonar scanner郵件通知等

wKiom1hruRqCosNRAACjxQhLn4U700.png

wKiom1hruRizEYkNAAFEp_gYTEo220.png

在系統管理--->插件管理中可安裝大部分插件

wKioL1hruRmjdpDjAAD9HNUyqcQ935.png

持續部署之jenkins與gitlab(二)

測試部署項目,此項目配置成直接在gitlab中拉取代碼至Jenkins服務器中,在工作區域可見,項目名稱為auto-deloy

新建-->填寫項目名稱-->構建一個自由風格的軟件項目-->點擊OK按鈕

wKioL1hspJ2QWI-FAADl3YQo4pU728.png

需要從gitlab中拉取代碼至Jenkins服務器則需要在gitlab中deploy keys部署公鑰(jenkins的公鑰),而在Jenkins服務器中需部署私鑰。

wKiom1hssqeRvUSXAAD_YNgN6KE221.png

配置credentials,存放私鑰

wKiom1hssqezyQnmAACokIpWxnk600.png

需要在項目中配置從哪個gitlab服務器中拉取代碼,則需使用gitlab中ssh開頭的地址

點擊auto-deploy-->源碼管理-->選擇倉庫URL和credentials(資格證書)此證書為之前配置中的證書繼承即可

wKioL1hssqjTFnmJAACdMgd7jTo378.png

測試自動構建,查看是否能從gitlab中拉取代碼至本地Jenkins服務器中

wKiom1hss6_DSddEAACg14OATmI440.png

可在工作區中查看Jenkins上拉取的代碼信息

wKiom1hss6_DSddEAACg14OATmI440.png

持續部署之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

安裝中文插件如下配置:

wKiom1hs95vAXOLuAACQhL_MWtI412.png

使用IP地址訪問如下:

wKioL1hs9mjwhiWSAACit2o-3XI090.png

如果安裝失敗可將插件下載好后解壓至sonar默認存放插件的目錄,重啟服務即可,安裝可掃描php/java/Python的插件。

wKioL1hs-NHgylKFAACNIoR6dzo623.png

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界面中給與顯示掃描結果

wKioL1htDoGygR9DAACoB0xWKgk816.png

Jenkins結合sonar-scanner自動進行代碼掃描?

掃描之前需安裝sonarqube plugin插件

系統管理-->管理插件-->搜索sonarqub plugin插件安裝即可

wKioL1htECHgV2nVAAC5gkUbbmg636.png

Jenkins結合sonar則需在系統管理-->系統設置-->sonar配置段進行配置,輸入name、server URL、server version即可

wKiom1htEVuj4H1tAACoWBBGJNI212.png

系統管理-->Global tools configuration找到sonarqube填寫sonar的安裝路徑及其name

wKioL1htEsXxX0KyAACGtge76bo332.png

全局配置段配置完成之后則在接下來的項目中即可繼承全集配置段中的配置,在需要掃描的項目中嵌入,點開項目-->設置-->構建-->execute sonarqube scanner 將掃描參數填寫在文本框中

wKioL1htFrLzl2Z0AACLwMHCoqs039.png

完成配置,點擊構建,即可自動進行代碼掃描測試

wKiom1htFrPCRASOAACJrjyGalM268.png

構建成功顯示為藍色的球,在旁邊會顯示sonar的圖標,點擊圖標可查看代碼的質量展示信息

wKiom1htFrOxEKuCAACxHRk7Yeo468.png

構建完成后,我們發現這里的SonarQube可以點擊,我們點擊SonarQube就會鏈接到10.1.10.65:8800就是代碼查看器的地址

wKiom1htGFjT4B95AABvb4c_z_8777.png

同時,可以在項目設置中配置構建后操作,例如構建失敗可定義郵件通知等

wKioL1htGPPzLq7QAACaivfMiNo301.png

構建失敗后則會郵件提醒

wKioL1htnG6g7SQiAAHGvTakLvI646.png

持續部署之jenkins與gitlab(四)

代碼上線流水發布操作

Pipeline中文意思為流水線之意,公司可能有很多項目,如果使用Jenkins自動構建成功后,開發需要一項一項點擊,比較繁瑣,所以出現pipeline流水化作業的代碼測試管理,代碼質量測試完畢之后,我們需將代碼部署到測試環境或線上環境進行測試。

項目需求:在任意普通用戶的家目錄先將代碼從gitlab中拉取下來,編寫腳本,實現將代碼自動拷貝至后端的Tomcat主機或其他web服務器。

新建項目

點擊新建-->構建一個自由風格的軟件項目-->點擊OK

wKiom1htsFPDg2M9AADmMrny1y0084.png

點擊項目名稱-->設置-->構建中選擇執行遠程腳本

wKioL1htsdKSwMbtAAB400oUmHU351.png

重要提示:執行遠程命令主要涉及的是權限問題,我們要搞明白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寫一個測試腳本,檢車腳本是否可執行成功

wKiom1httrSx9xh3AABXtgcN_eg065.png

然后我們點擊立即構建,查看構建結構

wKiom1httzbjBIR_AABX05EG8ec477.png

上訴腳本能自動執行,則可配置www用戶可以遠程ssh到web服務器,將家目錄下的源碼文件拷貝至web服務器的站點根目錄實現自動部署。這會看的是你寫腳本的能力。。。。

項目需求:當本地Jenkins代碼測試成功之后自動聯動部署代碼至web服務器的站點根目錄。一系列的動作需自動完成則需要安裝Parameterized插件,系統管理-->管理插件-->可選插件 搜索Parameterized,如果插件在線安裝不成功你懂得,可將下載好的插件解壓至plugin目錄下,將目錄下的所有文件屬組屬主換成Jenkins,重啟服務即可。

點擊項目-->設置-->構建后操作-->trigger parameterized build on projects -->Add triggers-->點擊保存

wKiom1htwSbgwam3AABoOm123yE787.png

點擊構建項目test-delpoy時自動聯動auto-deloy,進行構建,可見第一個球閃爍完后,第二個球接著閃爍,完成自動構建

wKioL1htwbjxijhrAACRnD6qXNE059.pngwKioL1htwt-xml1yAABGRvxyxlg076.png

下載Pipline,它是一個更為方便觀察項目的自動構建的圖形化工具

系統管理-->插件管理-->搜索安裝插件pipline

image_1b4l83oko147g84cr07193465f5i.png-123.2kB

點擊項目All后面的+號,新建一個視圖,給視圖取名,自定義一些選項。

wKiom1htxKLQQfaCAADNYdJn3WI273.png

pipeline視圖效果更加直觀:?紅色代表構建失敗,綠-藍代表項目沒有關聯,兩個都是綠的則表明項目相互關聯,依次執行,可清晰看到上下情況和次數。

wKioL1htxTvCFpLNAAC-ttiFV48888.png

git提交操作觸發Jenkins自動構建

Jenkins與gitlab集成后,實現的功能是開發寫好代碼push到gitlab上,push完成之后,jenkins自動幫我們立即構建,此方法一般使用在測試環境。

點擊此項目并可觸發項目聯動結合腳本可實現自動上線部署,而往往這個功能只用在測試部署,上線部署手動完成較安全。

需安裝GitlabHook Plugin插件

系統管理-->管理插件-->安裝GitlabHook Plugin

wKiom1htyR3RydG3AADcnV8gcfY087.png

完成后,需配置gitlab hook插件,使用openssl rand -hex 14命令自動生成隨機碼

點擊項目-->設置-->構建后觸發器

wKioL1ht2PXAu8_IAADXyGodaUo834.png

配置完成后則需在gitlab中配置webhooks

點擊項目-->設置圖標

image_1b4l89cdp18ohdbbomnk8kqe9bl.png-56.7kB

Build Authorization Token Root Plugin 插件使用說明
https://wiki.jenkins-ci.org/display/JENKINS/Build+Token+Root+Plugin

wKiom1ht47HwXS_bAABib7umGac830.png

示例: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=隨機數

wKiom1ht47HyLeTAAACXwl3f1a0901.png

wKiom1ht9XuwN58QAAB4zaKZ0AM321.png

配置完后,可點擊Test按鈕進行測試

wKioL1ht9m-z2V81AABXDK2P0qs845.png

Jenkins控制臺輸出:

wKiom1ht-CGwZzcLAABFYRd1awU255.png

總結:完成上訴的自動聯動后,gitlab+jenkins基本上能滿足中小型企業的版本上線的工作,配置一次后即可讓你以后上線美滋滋,都交給開發,想不想和開發一起加班那就得看你怎么想的 :)

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

    1. 主站蜘蛛池模板: 成武县| 邢台市| 循化| 讷河市| 岳阳县| 嫩江县| 井研县| 阳春市| 鹰潭市| 永寿县| 当涂县| 六枝特区| 赤壁市| 鹤岗市| 天全县| 乐平市| 泰顺县| 澳门| 无锡市| 翁源县| 西乌珠穆沁旗| 濮阳县| 囊谦县| 天长市| 龙游县| 沾化县| 苍山县| 舞阳县| 青冈县| 宁武县| 镇安县| 旺苍县| 洮南市| 湄潭县| 上栗县| 偃师市| 崇州市| 张家川| 中宁县| 容城县| 乌鲁木齐县|