2020-10-06 架構(gòu)師第13周作業(yè)

架構(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)建歷史:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末跺株,一起剝皮案震驚了整個濱河市复濒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乒省,老刑警劉巖巧颈,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異袖扛,居然都是意外死亡砸泛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門蛆封,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唇礁,“玉大人,你說我怎么就攤上這事惨篱±萦兀” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵妒蛇,是天一觀的道長机断。 經(jīng)常有香客問我楷拳,道長,這世上最難降的妖魔是什么吏奸? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任欢揖,我火速辦了婚禮,結(jié)果婚禮上奋蔚,老公的妹妹穿的比我還像新娘她混。我一直安慰自己,他們只是感情好泊碑,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布坤按。 她就那樣靜靜地躺著,像睡著了一般馒过。 火紅的嫁衣襯著肌膚如雪臭脓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天腹忽,我揣著相機與錄音来累,去河邊找鬼。 笑死窘奏,一個胖子當著我的面吹牛嘹锁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播着裹,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼领猾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了骇扇?” 一聲冷哼從身側(cè)響起瘤运,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匠题,沒想到半個月后拯坟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡韭山,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年郁季,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钱磅。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡梦裂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盖淡,到底是詐尸還是另有隱情年柠,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布褪迟,位于F島的核電站冗恨,受9級特大地震影響答憔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掀抹,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一虐拓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧傲武,春花似錦蓉驹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疟位,卻和暖如春瞻润,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背献汗。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工敢订, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留王污,地道東北人罢吃。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像昭齐,于是被迫代替她去往敵國和親尿招。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345