架構(gòu)班的小伙伴作業(yè)看這里哦:(學(xué)習杰哥視頻的作業(yè)第25-26天)
1、配置jenkins實現(xiàn)代碼自動發(fā)布部署界阁,回滾。
1 Jenkins實現(xiàn)代碼自動上線
1)Jenkins服務(wù)編寫上線腳本
[root@jenkins ~]#mkdir /scripts && cd /scripts/
[root@jenkins scripts]# vim html_deploy.sh
#!/bin/bash
DATE=$(date +%Y-%m-%d-%H-%M-%S)
web_server="192.168.1.8"
Sdir=/opt
Ddir=/code
#1)進入項目目錄或杠,將內(nèi)容進行打包,${WORKSPACE}是Jenkins的內(nèi)置變量,表示構(gòu)建目錄的絕對路徑
get_code(){
? ? ? ? cd ${WORKSPACE} && \
? ? ? ? tar zcf ${Sdir}/web-${DATE}.tar.gz ./*
}
#2)將內(nèi)容通過scp復(fù)制到web網(wǎng)頁目錄
scp_web_server(){
for hosts in ${web_server}
do
? ? ? ? scp ${Sdir}/web-${DATE}.tar.gz root@${hosts}:/opt
? ? ? ? ssh root@${hosts} "mkdir -p ${Ddir}/web-${DATE} && \
? ? ? ? ? ? ? ? ? ? ? ? tar zxf ${Sdir}/web-${DATE}.tar.gz -C ${Ddir}/web-${DATE}
? ? ? ? ? ? ? ? ? ? ? ? rm -rf ${Ddir}/web && \
? ? ? ? ? ? ? ? ? ? ? ? ln -s ${Ddir}/web-${DATE} ${Ddir}/web"
done
}
deploy(){
? ? ? ? get_code
? ? ? ? scp_web_server
}
? ? ? ? deploy
[root@jenkins scripts]# chmod +x html_deploy.sh
[root@jenkins scripts]# ps -ef | grep jenkins
#可以看出jenkins的運行用戶是jenkins
jenkins? 58626? ? ? 1? 1 11:23 ?? ? ? ? 00:00:39 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkinsjenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
root? ? ? 61336? 2046? 0 12:06 pts/0? ? 00:00:00 grep --color=auto jenkins
[root@jenkins scripts]# vim /etc/sysconfig/jenkins
JENKINS_USER="root"
#為了防止權(quán)限問題灶伊,直接將jenkins的運行用戶改為root
[root@jenkins scripts]# systemctl restart jenkins
#重啟jenkins服務(wù)
[root@jenkins scripts]# ssh-copy-id root@192.168.1.8
#配置Jenkins可以免密登錄到nginx服務(wù)器
2)git服務(wù)器編輯網(wǎng)頁代碼并上傳:
[root@gitlab web-demo]# echo "lvzhenjiang" >> index.html
[root@gitlab web-demo]# git add .
[root@gitlab web-demo]# git commit -m "first"
[root@gitlab web-demo]# git push origin master
2 Jenkins實現(xiàn)代碼自動部署與回退及重復(fù)構(gòu)建
1)git服務(wù)器創(chuàng)建幾個tag標簽并上傳至gitlab:
[root@gitlab ~]# cd web-demo/
[root@gitlab web-demo]# echo "<h1>lvzhenjiang-version-v1.1</h1>" > index.html
[root@gitlab web-demo]# git add .
[root@gitlab web-demo]# git commit -m "v1.1"
[root@gitlab web-demo]# git push origin master
[root@gitlab web-demo]# git tag -a "v1.1" -m "v1.1"
[root@gitlab web-demo]# git push origin v1.1
[root@gitlab web-demo]# echo "<h1>lvzhenjiang-version-v1.2</h1>" > index.html
[root@gitlab web-demo]# git add .
[root@gitlab web-demo]# git commit -m "v1.2"
[root@gitlab web-demo]# git push origin master
[root@gitlab web-demo]# git tag -a "v1.2" -m "v1.2"
[root@gitlab web-demo]# git push origin v1.2
[root@gitlab web-demo]# echo "<h1>lvzhenjiang-version-v1.3</h1>" > index.html
[root@gitlab web-demo]# git add .
[root@gitlab web-demo]# git commit -m "v1.3"
[root@gitlab web-demo]# git push origin master
[root@gitlab web-demo]# git tag -a "v1.3" -m "v1.3"
[root@gitlab web-demo]# git push origin v1.3
2)Jenkins服務(wù)器安裝插件并配置:
使用該方式就需安裝插件:Git Parameter。
安裝方式:系統(tǒng)管理——>插件管理——>可選插件——搜索Git Parameter——>直接安裝寒跳!
[root@jenkins ~]# systemctl restart jenkins
#安裝完成后聘萨,需重啟Jenkins!
[root@jenkins ~]# cd /scripts/
[root@jenkins scripts]# vim html_deploy_tag.sh? ? ? #優(yōu)化腳本
#!/bin/bash
DATE=$(date +%Y-%m-%d-%H-%M-%S)
web_server="192.168.1.8"
Sdir=/opt
Ddir=/code
Name=${DATE}-${git_version}? ? ? ? ? ? ? ? #${git_version}是在jenkins界面定義的變量
#1)進入項目目錄童太,將內(nèi)容進行打包
#${WORKSPACE}是Jenkins的內(nèi)置變量米辐,表示構(gòu)建目錄的絕對路徑
get_code(){
? ? ? ? cd ${WORKSPACE} && \
? ? ? ? tar zcf ${Sdir}/web-${Name}.tar.gz ./*
}
#2)將內(nèi)容通過scp復(fù)制到web網(wǎng)頁目錄
scp_web_server(){
for hosts in ${web_server}
do
? ? ? ? scp ${Sdir}/web-${Name}.tar.gz root@${hosts}:/opt
? ? ? ? ssh root@${hosts} "mkdir -p ${Ddir}/web-${Name} && \
? ? ? ? ? ? ? ? ? ? ? ? tar zxf ${Sdir}/web-${Name}.tar.gz -C ${Ddir}/web-${Name}
? ? ? ? ? ? ? ? ? ? ? ? rm -rf ${Ddir}/web && \
? ? ? ? ? ? ? ? ? ? ? ? ln -s ${Ddir}/web-${Name} ${Ddir}/web"
done
}
deploy(){
? ? ? ? get_code
? ? ? ? scp_web_server
}
? ? ? ? deploy
[root@jenkins scripts]# chmod +x html_deploy_tag.sh
2、實現(xiàn)jenkins對代碼自動掃描
1:部署 SonarQube:
1.1:數(shù)據(jù)庫準備:
root@s4:~# apt-get install mysql-server mysql-client
root@s4:~# vim /etc/mysql/mysql.conf.d/mysqld.cnf #配置文件路徑
root@s4:~# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.26-0ubuntu0.18.04.1 (Ubuntu)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
#創(chuàng)建數(shù)據(jù)庫默認編碼 utf-8 并授權(quán)
mysql> create database sonar default character set utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
1.2:測試 sonar 賬戶連接 mysql:
root@s4:~# mysql -usonar -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.26-0ubuntu0.18.04.1 (Ubuntu)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
1.3:解壓 sonarqube 并配置文件:
sonar 依賴于 java 環(huán)境康愤,而且 java 版本必須是 1.8 版本或更高,否則 sonar 啟動失敗
6.7.X 版本的 sonar 需要調(diào)用 elasticsearch舶吗,而且默認需要使用普通用戶啟動
root@s4:~# cd /usr/local/src/
root@s4:/usr/local/src# unzip sonarqube-6.7.7.zip
root@s4:/usr/local/src# ln -sv /usr/local/src/sonarqube-6.7.7 /usr/local/sonarqube
'/usr/local/sonarqube' -> '/usr/local/src/sonarqube-6.7.7'
root@s4:/usr/local/src# chown sonarqube.sonarqube /usr/local/src/sonarqube-6.7.7
/usr/local/sonarqube -R #更改目錄權(quán)限屬主和屬組為 sonarqube
root@s4:/usr/local/src# cd /usr/local/sonarqube
root@s4:/usr/local/sonarqube# ll #驗證權(quán)限屬主和屬組都為 sonarqube
root@s4:/usr/local/sonarqube# su – sonarqube # 切換為 sonarqube 賬戶
sonarqube@s4:~$ cd /usr/local/sonarqube
sonarqube@s4:/usr/local/sonarqube$ vim conf/sonar.properties
sonarqube@s4:/usr/local/sonarqube$ grep "^[a-Z]" conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://127.0.0.1:3306/sonar?useUnicode=true&characterEncoding=ut
f8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.host=0.0.0.0
sonar.web.port=9000
1.4:啟動 sonarqube:
sonarqube@s4:/usr/local/sonarqube$ ./bin/linux-x86-64/sonar.sh start
Starting SonarQube...
Started SonarQube.
1.5:登錄到 web 界面:
點擊有上角 login 登錄征冷,默認用戶名密碼都是 admin
1.6:安裝其他插件:
Sonarquebe 對代碼的掃描都基于插件實現(xiàn),因此要安裝要掃描的開發(fā)語言插件:
Php? Java? Python
2:jenkins 服務(wù)器部署掃描器 sonar-scanner:
下載地址:https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/
官方文檔:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
2.1:部署 sonar-scanner:
sonarqube 通過調(diào)用掃描器 sonar-scanner 進行代碼質(zhì)量分析誓琼,即掃描器的具體工作就
是掃描代碼:
root@jenkins-master:~# cd /usr/local/src/
root@jenkins-master:/usr/local/src# unzip sonar-scanner-cli-4.0.0.1744-linux.zip
root@jenkins-master:/usr/local/src# ln -sv /usr/local/src/sonar-scanner-4.0.0.1744-
linux /usr/local/sonar-scanner
'/usr/local/sonar-scanner' -> '/usr/local/src/sonar-scanner-4.0.0.1744-linux'
root@jenkins-master:/usr/local/src# cd /usr/local/sonar-scanner
root@jenkins-master:/usr/local/sonar-scanner# vim conf/sonar-scanner.properties
#----- Default SonarQube server
sonar.host.url=http://192.168.7.104:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
2.2:準備測試代碼:
# unzip sonar-examples-master.zip
# cd sonar-examples-master/
# cd projects/languages/php/php-sonar-runner
# pwd
/usr/local/src/sonar-examples-master/projects/languages/php/php-sonar-runner
# ll
total 24
drwxr-xr-x 3 root root 4096 Jul 25 2016 ./
drwxr-xr-x 4 root root 4096 Jul 25 2016 ../
-rw-r--r-- 1 root root 453 Jul 25 2016 README.md
-rw-r--r-- 1 root root 331 Jul 25 2016 sonar-project.properties
drwxr-xr-x 2 root root 4096 Jul 25 2016 src/
-rw-r--r-- 1 root root 272 Jul 25 2016 validation.txt
# cat sonar-project.properties 以下為默認生成的配置文件
# Required metadata
sonar.projectKey=org.sonarqube:php-simple-sq-scanner #自定義項目 key
sonar.projectName=PHP :: Simple Project :: SonarQube Scanner #項目名稱检激,會顯示在 web
sonar.projectVersion=1.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 #編碼格式
2.3:在源代碼目錄執(zhí)行掃描:
#手動在當前項目代碼目錄執(zhí)行掃描,以下是掃描過程的提示信息腹侣,掃描的配置文件
sonar-project.propertie 每個項目都要有
# pwd
/usr/local/src/sonar-examples-master/projects/languages/php/php-sonar-runner
# /usr/local/sonar-scanner/bin/sonar-scanner
2.4 sonarquebe we 界面驗證掃描結(jié)果:
3:jenkins 執(zhí)行代碼掃描:
3.1:jenkins 安裝 SonarQube 插件 :
安裝插件 SonarQube Scanner叔收,然后配置 SonarQube server,系統(tǒng)管理-系統(tǒng)設(shè)置傲隶。
3.2:添加 sonarquebe URL: Jenkins—系統(tǒng)管理—系統(tǒng)設(shè)置--SonarQube servers:
3.3:讓 jenkins 添加 Sonarscanner 掃描器:
添加掃描器:Jenkins--系統(tǒng)管理-全局工具配置:
3.3.1:手動指定絕對路徑:
3.3.2:自動安裝:
3.4:配置掃描:
選擇自己的項目(linuxNN-job1-develop)-構(gòu)建-execute sonarqube scanner饺律,將配置文件的
內(nèi)容修改成如下格式填寫完成后點保存:
sonar.projectKey=job1-develop
sonar.projectName=job1-develop
sonar.projectVersion=1.0
sonar.sources=./
sonar.language=php
sonar.sourceEncoding=UTF-8
3.5 配置項目進行掃描:
3.6 構(gòu)建項目并測試 sonar-scanner 是否生效:
點擊項目的立即構(gòu)建,下圖是執(zhí)行成功的信息:
Started by user jenkinsadmin
Building on master in workspace /var/lib/jenkins/workspace/linux36-job1-develop
[WS-CLEANUP] Deleting project workspace...
[WS-CLEANUP] Deferred wipeout is used...
[WS-CLEANUP] Done
3.7 查看項目的構(gòu)建歷史: