Gitee+Jenkins+SonarQube代碼上線的實戰(zhàn)操作

代碼上線-流程圖

image.png

添加Nexus流程圖

image.png

機器的環(huán)境

172.168.0.1  jenkins         # 建議-機器環(huán)境:1C以上酿矢,2G以上,40G磁盤以上
172.168.0.2  SonarQube       # 建議-機器環(huán)境:2C以上怎燥,4G以上瘫筐,40G磁盤以上
172.168.0.3  nexus(可選)     # 建議-機器環(huán)境:1C以上,2G以上铐姚,80G磁盤以上
172.168.0.4  web01           # 建議-機器環(huán)境:1C以上策肝,2G以上,40G磁盤以上

提示:

  • 該公司的Java業(yè)務(wù)項目比較多的話,可以單獨安裝nexus驳糯。
  • 如果不多可以使用阿里云的私服器篇梭。

安裝包

# Jenkins機器的安裝包:
jdk-8u201-linux-x64.tar.gz
jenkins-2.277.4-1.1.noarch.rpm

# SonarQube機器的安裝包:
sonarqube-7.0.tar.gz
mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz

# nexus機器的安裝包:
nexus-3.13.0-01-unix.tar.gz

# Web01的機器(執(zhí)行Java項目的安裝包)
jdk-8u201-linux-x64.tar.gz
apache-maven-3.3.9-bin.tar.gz
apache-tomcat-8.0.27.tar.gz

開始部署

1、安裝JDK運行環(huán)境 和 Jenkins服務(wù)

# JAVA
tar -zxf /opt/jdk-8u60-linux-x64.tar.gz
ln -s /opt/jdk1.8.0_60 /opt/jdk
# 添加java變量
vim /etc/profile
JAVA_HOME=/opt/jdk
export $PATH:$JAVA_HOME/bin:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$JAVA_HOME/lib/tools.jar
source /etc/profile
java -version

# Jenkins
rpm -ivh jenkins-2.277.4-1.1.noarch.rpm
# 配置Jekins
vim /etc/sysconfig/jenkins
# 編輯狀態(tài)中
JENKINS_USER="root"
# 目錄文件設(shè)置為root
chown -R root:root /var/lib/jenkins /var/cache/jenkins /var/log/jenkins
# 啟動jenkins 
systemctl start jenkins && systemctl enable jenkins && systemctl status jenkins

# 安裝插件(如果你沒有Jenkins插件的包話酝枢,可以在頁面自選安裝插件)
1恬偷、自動安裝可選插件
2、手動下載插件上傳安裝
3帘睦、插件放入的目錄地址
ll /var/lib/jenkins     
drwxr‐xr‐x 2 root root 6 8月26 00:31 plugins  # jobs為每次構(gòu)建后構(gòu)建的結(jié)果目錄袍患,plugins為插件目錄
上傳插件包解壓到plugins下執(zhí)行重啟  systemctl restart jenkins

# jenkins主要的目錄 
/usr/lib/jenkins/       jenkins安裝目錄,WAR包會放在這里 
/etc/sysconfig/jenkins  jenkins配置文件竣付,“端口”诡延,“JENKINS_HOME”等都可以在這里配置 
/var/lib/jenkins/       默認(rèn)的JENKINS_HOME 
/var/log/jenkins/jenkins.log  Jenkins日志文件 

測試-訪問Jekins頁面地址:http://localhost:8080

2、Maven服務(wù)

# Maven臨時存放目錄
/root/.m2/repository
tar -zxf apache-maven-3.3.9
ln -s /opt/apache-maven-3.3.9 /opt/maven
# 添加Maven變量
vim /etc/profile
MAVEN=/opt/maven
export PATH=$PATH:$MAVEN/bin/
source /etc/profile
mvn -v

# 參數(shù)作用信息
mvn package -Dmaven.test.skip=true  跳過測試用例
integration-test(集成測試):   如果有需要古胆,把包處理并部署到可以運行集成測試的環(huán)境中去肆良。
validate(驗證):   驗證項目正確,并且所有必要信息可用。 
compile(編譯):    編譯項目源碼 
test(測試):       使用合適的單元測試框架測試編譯后的源碼。 
package(打包):    源碼編譯之后恃锉,使用合適的格式(例如JAR格式)對編譯后的源碼進行打包。
verify(驗證):     進行各種測試來驗證包是否有效并且符合質(zhì)量標(biāo)準(zhǔn)巫糙。 
install(安裝):    把包安裝到本地倉庫,使該包可以作為其他本地項目的依賴颊乘。 
deploy(部署):     在集成或發(fā)布環(huán)境中完成参淹,將最終軟件包復(fù)制到遠(yuǎn)程存儲庫,以與其他開發(fā)人員和項目共享乏悄。 
mvn clean (清除) :  清除上次編譯的結(jié)果 


提示:如果有您自己搭建了nexus私服器浙值,可以跳過。
# 在Maven的settings.xml 文件里配置:阿里云的子節(jié)點檩小。添加阿里云地址
如下操作:
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror> 

3开呐、部署私服 Nexus (可選)

下載地址:https://www.sonatype.com/download‐oss‐sonatype
配置倉庫兩個選項
1、項目下的pom.xml配置识啦、只生效當(dāng)前的項目
2、在maven配置全局所有項目生效

# JAVA
tar -zxf /opt/jdk-8u60-linux-x64.tar.gz
ln -s /opt/jdk1.8.0_60 /opt/jdk
# 添加java變量
vim /etc/profile
JAVA_HOME=/opt/jdk
export $PATH:$JAVA_HOME/bin:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$JAVA_HOME/lib/tools.jar
source /etc/profile
java -version

# Nexus
tar -zxvf nexus-3.13.0-01-unix.tar.gz -C /opt/
ln -s /opt/nexus-3.13.0-01 /opt/nexus
# 啟動
/opt/nexus/bin/nexus start
# 訪問Nexus地址 http://localhost:8081
默認(rèn)賬號:admin
默認(rèn)密碼:admin123

配置Maven全局配置文件

cat /opt/maven/conf/settings.xml
...........
133     <server>
134       <id>my-nexue-releases</id>
135       <username>admin</username>
136       <password>admin123</password>
137     </server>
138     <server>
139       <id>my-nexue-snapshot</id>
140       <username>admin</username>
141       <password>admin123</password>
142     </server>
...........
156   <mirrors>
157   <mirror>
158     <id>nexus</id>
159     <mirrorOf>*</mirrorOf>
160     <url>http://nexus機器IP:8081/repository/maven-public/</url>
161   </mirror>
...........
174   </mirrors>
...........
197   <profiles>
...........
262     <profile>
263       <id>nexus</id>
264       <repositories>
265         <repository>
266           <id>central</id>
267           <url>http://nexus機器IP:8081/repository/maven-public/</url>
268           <releases><enabled>true</enabled></releases>
269           <snapshots><enabled>true</enabled></snapshots>
270         </repository>
271       </repositories>
272     <pluginRepositories>
273       <pluginRepository>
274         <id>central</id>
275         <url>http://nexus機器IP:8081/repository/maven-public/</url>
276           <releases><enabled>true</enabled></releases>
277           <snapshots><enabled>true</enabled></snapshots>
278         </pluginRepository>
279       </pluginRepositories>
280     </profile>
281   </profiles>
..............
291   <activeProfiles>
292     <activeProfile>nexus</activeProfile>
293   </activeProfiles>

4神妹、部署SonarQube

代碼質(zhì)量檢測SonarQube 
1. SonarQube基礎(chǔ)java開發(fā)颓哮,需安裝open JDK8版本 
2. SonarQube需要依賴MySQL數(shù)據(jù)庫,至少5.6版本以上 
3. SonarQube的小型實例至少4G內(nèi)存鸵荠,如果大型實例需要16G內(nèi)存

安裝SonarQube

unzip sonarqube-7.0.zip -d /opt/
ln -s /opt/sonarqube-7.0 /opt/sonarqube
# 創(chuàng)建soanr用戶 并且授權(quán)目錄為sonar
groupadd sonar
useradd sonar -g sonar
passwd sonar
chown -R sonar.sonar /opt/jdk-11.0.7/
chown -R sonar.sonar /opt/sonarqube-8.9.8.54436

配置Sonar連接本地數(shù)據(jù)庫

cat /opt/sonarqube/conf/sonar.properties
.......
sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://Mysql機器IP:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
.......

啟動方案有以下二種:
1)使用普通用戶啟動sonarqube

su - sonar -c "/opt/sonarqube/bin/linux-x86-64/sonar.sh start"

2)創(chuàng)建SonarQube服務(wù)

vim /etc/systemd/system/sonarqube.service    
[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=simple
User=sonar
Group=sonar
PermissionsStartOnly=true

# 備注:ExecStart中的路徑請根據(jù)版本不同重新設(shè)置
ExecStart=/usr/bin/java -Xms32m -Xmx32m -Djava.net.preferIPv4Stack=true -jar /opt/sonarqube-7.0/lib/sonar-application-7.0.jar 
StandardOutput=syslog
LimitNOFILE=65536
LimitNPROC=8192
TimeoutStartSec=5
Restart=always
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

# 啟動sonarqube.service
systemctl daemon-reload
systemctl enable sonarqube.service
systemctl start sonarqube.service

啟動后端口為9000

直接訪問  http://localhost:9000/about 
用戶名admin 
密碼admin 

提示:它會生成一個tokin,只顯示一次記錄好 
jenkins: 0807eba6dcceabe5bce653a9c4efe95ce6a8ac99

配置管理 sonar 安裝插件
1.安裝中文漢化插件在頁面上找到administrator > Marketplace > 搜索框 chinese冕茅,出現(xiàn)一個 chinese pack 然后點擊install,安裝完點擊restart 重啟生效

2.默認(rèn)已安裝C JAVA Python PHP JS 等代碼質(zhì)量分析工具,如果一個項目使用了JAVA CSS JS HTML姨伤,默認(rèn)情況下sonar只會檢測JAVA,JS等代碼的漏洞和bug哨坪,如果安裝了HTML、CSS等插件乍楚,則會檢測該項目代碼中JAVA JS HTML CSS代碼的漏洞和bug

手動安裝插件(這是UP之前的java項目当编,打包好的包)

# 先清理之前的jar包,然后推送
rm -rf /opt/sonarqube/extensions/plugins/*
tar -zxvf /opt/sonar_plugins.tar.gz -C /opt/sonarqube/extensions/plugins/
chown sonar.sonar -R /opt/sonarqube/extensions/plugins/
su - sonar -c "/opt/sonarqube/bin/linux-x86-64/sonar.sh restart"

案列:創(chuàng)建Java的流水線項目

1徒溪、Gitee里創(chuàng)建代碼庫(也可以使用其它的代碼庫忿偷,比如:Gitlab、Github等)

1)新建倉庫


image.png
image.png

2)設(shè)置全局臊泌,再創(chuàng)建 git 倉庫
提示:有條件的話可以單獨一臺代碼的機器鲤桥,如果沒有就在Jenkins機器等。其它臺機器上上傳代碼


image.png

2渠概、在Jenkins頁面上茶凳,創(chuàng)建一個Maven的項目名:Java-Project01

image.png
image.png
image.png

前提條件:需要您先使用Git打標(biāo)簽播揪,上傳到Gitee代碼庫才會顯示出標(biāo)簽信息。

cd /data/test/Java-Poject01/
git init 
git add .
git commit -am "new XXX"    # 提交到本地倉庫中
git tag -a v1.XX -m "v1.XX穩(wěn)定版"
git push -u origin v1.XX

在Jenkins頁面里添加 獲取Gitee代碼庫的標(biāo)簽信息

image.png

然后再創(chuàng)建 選項參數(shù):實現(xiàn)發(fā)布和回滾的功能

image.png

記得這里要添加 ${git_version} 名

image.png

實現(xiàn)的結(jié)果

image.png

提示:如果打包過在java項目是沒有pom.xml塞淹,需要您自己手動先打包才會生成

測試java項目罪裹,進行簡單打包命令
cd /data/hello-world 
mvn package

然后Git打標(biāo)簽,并推送Gitee代碼庫上

添加 chean package (提醒:Java的項目必須要用到編譯的功能 )

image.png

添加執(zhí)行shell

image.png
cat /data/script/java_maven.sh
#!/bin/sh
MAVEN=/opt/tomcat/bin
DATE=$(date +%Y-%m-%d-%H-%M-%S)
CODE_DIR="/var/lib/jenkins/workspace/Java-Project01"
WEB_DIR="/opt/tomcat/webapps"
WEB_IP=“IP地址”

get_code_scp(){
        ssh $WEB_IP "cd $WEB_DIR && mkdir java-${git_version}"
        cd $CODE_DIR && scp $CODE_DIR/target/*.war $WEB_IP:$WEB_DIR/java-${git_version}
}

code_tarxf(){
        ssh $WEB_IP "cd $WEB_DIR/java-${git_version} && unzip *.war && rm -rf *.war"
}

ln_html(){
        ssh $WEB_IP "cd $WEB_DIR/ && rm -rf ROOT && ln -s java-${git_version} ROOT && $MAVEN/shutdown.sh && $MAVEN/startup.sh"
}
main(){
        get_code_scp;
        code_tarxf;
        ln_html;
}
if [ "$deploy_env" == "deploy" ];then
        if [ "$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
            echo "構(gòu)建失敗該 $git_version 版本號已部署"
    else
    main
    fi
elif [ "$deploy_env" == "rollback" ];then
        ln_html
fi

手動測試下Java項目發(fā)布

image.png

3状共、實現(xiàn)Java代碼套耕,推送到SonarQube檢測

客戶端其他版本下載地址搜索對應(yīng)版本,例如: SonarScanner 4.07
地址:https://docs.sonarqube.org/7.9/analysis/scan/sonarscanner/
下載客戶端的包名: sonar-scanner-cli-4.7.0.2747-linux.zip

image.png

(可選) 到項目目錄下進行代碼推送分析 打開認(rèn)證


image.png

需要在客服端機器執(zhí)行(比如:web機器)

# 解壓
tar -zxvf sonar-scanner-cli-4.7.0.2747-linux.zip -C /opt/

# 添加變量
vim /etc/profile
SONAR_SCANNER=/opt/sonar-scanner
export PATH=$PATH:$SONAR_SCANNER/bin/

# 創(chuàng)建項目后峡继,會有顯示以下秘鑰冯袍,記得一定要復(fù)制保存下來
項目名稱: ad4bf979f9146c971726d45323dc2a64dfea3020eda4
# 在web機器上執(zhí)行命令
sonar-scanner \
  -Dsonar.projectKey=項目名稱 \   # 你的代碼庫項目名
  -Dsonar.sources=. \
  -Dsonar.host.url=http://SonarQube的機器IP:9000 \
  -Dsonar.login=ad4bf979f9146c971726d45323dc2a64dfea3020

在Jenkins上配置 Execute SonarQube Scanner(記住一定要 放在在shell上面,因為要先執(zhí)行SonarQube工具)

sonar.projectName=${JOB_NAME}
sonar.projectKey=java
sonar.sources=.
image.png

然后執(zhí)行就OK了碾牌,等編譯完后會自動推送到SonarQube上

image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末康愤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子舶吗,更是在濱河造成了極大的恐慌征冷,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件誓琼,死亡現(xiàn)場離奇詭異检激,居然都是意外死亡肴捉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門叔收,熙熙樓的掌柜王于貴愁眉苦臉地迎上來齿穗,“玉大人,你說我怎么就攤上這事饺律∏砸常” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵蓝晒,是天一觀的道長腮出。 經(jīng)常有香客問我,道長芝薇,這世上最難降的妖魔是什么胚嘲? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮洛二,結(jié)果婚禮上馋劈,老公的妹妹穿的比我還像新娘。我一直安慰自己晾嘶,他們只是感情好妓雾,可當(dāng)我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布械姻。 她就那樣靜靜地躺著楷拳,像睡著了一般欢揖。 火紅的嫁衣襯著肌膚如雪她混。 梳的紋絲不亂的頭發(fā)上泊碑,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天馒过,我揣著相機與錄音沉桌,去河邊找鬼。 笑死佃扼,一個胖子當(dāng)著我的面吹牛兼耀,可吹牛的內(nèi)容都是我干的求冷。 我是一名探鬼主播匠题,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼韭山,長吁一口氣:“原來是場噩夢啊……” “哼钱磅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起年柠,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤冗恨,失蹤者是張志新(化名)和其女友劉穎派近,沒想到半個月后渴丸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體另凌,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡吠谢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年献汗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罢吃。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖矾柜,靈堂內(nèi)的尸體忽然破棺而出怪蔑,到底是詐尸還是另有隱情丧荐,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站窟却,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏菩帝。R本人自食惡果不足惜呼奢,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一切平、第九天 我趴在偏房一處隱蔽的房頂上張望悴品。 院中可真熱鬧,春花似錦定枷、人聲如沸届氢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茶敏。三九已至缚俏,卻和暖如春忧换,著一層夾襖步出監(jiān)牢的瞬間亚茬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颈将,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像死姚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子色罚,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容