SonarQube篇-安裝配置sonarqube+gitlab+jenkins+ldap集羣

1 下載需要的軟件包

sonarqube free edition 6.7.5:    https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-6.7.5.zip

jenkins weekly edition 2.203 :  http://mirrors.jenkins.io/war/2.203/jenkins.war

oracle jdk8 :     https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

mysql5.7.17:     https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar

sonar-scanner for Jenkins 3.2.0:無需下載,使用jenkins的sonar-scanner插件即可!

GitLab Community Edition 10.3.0:  https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.3.0-ce.0.el7.x86_64.rpm

2 環境配置

2.1 安裝配置JDK環境

  • 下載jdk-8u221版本,上傳至服務至器目錄/usr/java下。https://www.oracle.com/technetwork/java/javase/archive-139210.html
    tar zxvf jdk-8u221-linux-x64.tar.gz --> /usr/java/jdk1.8.0_221
  • 添加環境變量(vim /etc/profile 在最後按o鍵輸入,粘貼下面配置項)
    export JAVA_HOME=/usr/java/jdk1.8.0_221
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
    export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
    export PATH=$PATH:${JAVA_PATH}
  • 保存退出並刷新配置文件:
    source /etc/profile
  • java -version 
    java version "1.8.0_221"
    Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

2.2 安裝工具

yum install -y epel-release unzip vim wget

3 安裝配置gitlab

注意:也可以用docker運行gitlab

3.1 下載安裝包

wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.3.0-ce.0.el7.x86_64.rpm

3.2 安裝環境

sudo yum install -y curl policycoreutils-python openssh-server

sudo systemctl enable sshd

sudo systemctl start sshd

  • 如果系統開啓了防火牆還需要在防火牆添加http

sudo firewall-cmd --permanent --add-service=http

sudo systemctl reload firewalld

  • 安裝postfix

sudo yum install postfix

sudo systemctl enable postfix

sudo systemctl start postfix

3.3 安裝gitlab

sudo rpm -i --force --nodeps gitlab-ce-10.3.0-ce.0.el7.x86_64.rpm

3.4 重新配置啓動 

vim /etc/gitlab/gitlab.rb

寫入URL:

gitlab-ctl reconfigure

gitlab-ctl --hlep     #查看命令

gitlab-ctl start       #啓動

gitlab-ctl stop       #停止

3.5 使用瀏覽器訪問(服務器IP地址)GitLab

首次訪問GitLab,系統會讓你重新設置管理員的密碼,設置成功後會返回登錄界面。http://172.16.212.133

 

默認的管理員賬號是root,新密碼爲12345678。如果你想更改默認管理員賬號,請輸入上面設置的新密碼登錄系統後修改帳號名。

登錄之後創建project,從開源中國導入一個project源碼命名爲test01,作爲備用的測試代碼。

 

3.6 Gitlab的漢化

1)下載漢化包後上傳服務器後解壓。

2)停止Gitlab服務: gitlab-ctl stop

3)備份服務器上的/opt/gitlab/embedded/service/gitlab-rails目錄。
注:該目錄下的內容主要是web應用部分,也是當前項目倉庫的起始版本,也是漢化包要覆蓋的目錄。

#將解壓後的漢化包覆蓋服務器上的/opt/gitlab/embedded/service/gitlab-rails目錄。

4)啓動Gitlab服務。

sudo gitlab-ctl start

5)重新執行配置命令。
sudo gitlab-ctl reconfigure

完成上述步驟即實現漢化。

4  配置運行jenkins

注意:公司用的是一主多備的jenkins架構,由於目的是測試sonarqube,這裏我就不搭建主備了。

1)將下載好的jenkins.war文件保存到/root/data/jenkins.war後執行

nohup java -Dhudson.util.ProcessTree.disable=true -jar /opt/jenkins.war --logfile=server.log --httpPort=9999 > server.log 2>& 1 &

2)頁面訪問jenkins的地址爲http://172.16.212.133:9999

根據提示輸入/root/.jenkins/secrets/initialAdminPassword中的密碼,安裝推薦插件,進入以下頁面:

3)如果安裝插件很慢,執行以下操作

 http://updates.jenkins.io/update-center.json 

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

http://mirror.esuni.jp/jenkins/updates/update-center.json

http://mirror.xmission.com/jenkins/updates/update-center.json

確定保存!

  • 提示jenkins,再重新加載原來的jenkins頁面,繼續下載插件

4)插件安裝完成,進入該頁面

然後按照提示操作,進入登錄頁面

5)安裝git,gitlab插件

配置全局工具git

6)配置連接gitlab

點擊系統配置:

找到gitlab配置處:

其中,gitlab token生成方法:

5 安裝配置LDAP

5.1 安裝LDAP

1)安裝

yum install -y openldap-servers openldap-clients migrationtools

2)設置openldap管理員密碼

slappasswd
#然後根據提示輸入密碼:
New password: 123456 
Re-enter new password: 123456
#會返回加密的密碼字符串,保存好這個字符串
{SSHA}U5wSSZtqOvup3HMLC+tkg32COeuBvpav

3)更改openldap配置

vim /etc/openldap/slapd.d/cn\=config\/olcDatabase\={2}hdb.ldif
#找到olcSuffix,修改爲你的dc,如:
dc=wangcai,dc=com
#下一行olcRootDN, 修改爲你的用戶名,如:
cn=Manager,dc=wangcai,dc=com
#在文件末尾添加一行,設置剛纔的密碼:
olcRootPW: {SSHA}U5wSSZtqOvup3HMLC+tkg32COeuBvpav

4)更改監控認證配置

vim /etc/openldap/slapd.d/cn\=config\/olcDatabase\={1}monitor.ldif
#修改 olcAccess 中的dn.base=”cn=xxxxxxx”這行爲剛纔設置的用戶名,如:
dn.base=”cn=Manager,dc=wangcai,dc=com”

5) 設置DB Cache

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap:ldap /var/lib/ldap/

6) 測試配置文件

slaptest -u
末尾出現configfile testing successed 說明成功了

7) 啓動OpenLDAP和開機啓動

systemctl start slapd.service
systemctl enable slapd.service

8)導入模板

ls /etc/openldap/schema/*.ldif | xargs -I {} sudo ldapadd -Y EXTERNAL -H ldapi:/// -f {}

9)創建基礎目錄

#在/etc/openldap目錄下添加base.ldif文件

cd /etc/openldap/
vim base.ldif

dn: dc=wangcai,dc=com
o: ldap
objectclass: dcObject
objectclass: organization

dn: cn=Manager,dc=wangcai,dc=com
objectclass: organizationalRole
cn: Manager

注意:每一行的結尾不要留空格

10)執行

ldapadd -f base.ldif -x -w 123456 -D cn=Manager,dc=wangcai,dc=com
//-w 後面就是之前設置的密碼,根據自己的填寫

5.2 安裝web管理服務

1)安裝配置httpd

yum install httpd -y

vim /etc/httpd/conf/httpd.conf
#找到AllowOverride一行,修改none爲all
#如果想修改端口號,修改Listen 80一行,我改成了8888

systemctl start httpd.service
systemctl enable httpd.service

curl http://127.0.0.1/

2)安裝phpldapadmin

yum install phpldapadmin

#如果找不到軟件包,重新設置一下yum源
yum localinstall http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

 

vim /etc/phpldapadmin/config.php
找到並取消下面幾行的註釋:
$servers->setValue(‘server’,’host’,’127.0.0.1’);
$servers->setValue(‘server’,’port’,389);
$servers->setValue(‘server’,’base’,array(‘dc=wangcai,dc=com’));
(array里加上openldap配置文件中設置的olcSuffix)
$servers->setValue(‘login’,’auth_type’,’session’);
$servers->setValue(‘login’,’attr’,’dn’);
#把它的下一行註釋掉
#$servers->setValue(‘login’,’attr’,’uid’);

3)修改訪問配置文件,允許任意ip訪問

vim /etc/httpd/conf.d/phpldapadmin.conf
取消Order Deny,Allow的註釋

systemctl restart httpd.service

4)訪問web管理端

訪問 http://ip:8888/phpldapadmin
登陸用戶名:cn=Manager,dc=wangcai,dc=com

5)創建sonar將要用到的組和用戶

6 安裝配置mysql

1)安裝mysql server

wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

yum -y localinstall mysql57-community-release-el7-11.noarch.rpm

yum -y install mysql-community-server

systemctl start mysqld

  • 查看密碼

cat /var/log/mysqld.log | grep pass
2019-11-21T06:01:07.802934Z 1 [Note] A temporary password is generated for root@localhost: gWfpO9>)oLQ(

systemctl enable mysqld

  • 修改密碼

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Test2019@';

2) 添加sonar數據庫及用戶

mysql -uroot -pTest2019@

mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;

mysql> CREATE USER 'sonar' IDENTIFIED BY 'SonarTest2019@';

mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'SonarTest2019@';

mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'SonarTest2019@';

mysql> FLUSH PRIVILEGES;

7 安裝配置sonarqube

1)cd /root/data/,我把sonarqube的壓縮包放到了這個路徑下。

2)解壓到/opt下

unzip sonarqube-*.zip -d /opt

3)重命名目錄

mv /opt/sonarqube-8.0 /opt/sonarqube

4)爲sonarqube添加用戶sonar

sudo adduser sonar -s /sbin/nologin

5)修改目錄權限

chown -R sonar:sonar /opt/sonarqube

6) 修改配置文件

  • /opt/sonarqube/conf/sonar.properties

sonar.jdbc.username=sonar
sonar.jdbc.password=SonarTest2019@
sonar.jdbc.url=jdbc:mysql://172.16.212.134:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

sonar.web.javaOpts=-Xmx2048m -Xms512m -XX:+HeapDumpOnOutOfMemoryError

sonar.ce.javaOpts=-Xmx4096m -Xms512m -XX:+HeapDumpOnOutOfMemoryError

ldap.url=ldap://172.16.212.134

#readonly爲創建的可以登錄到LDAP的用戶,123456是readonly的密碼
ldap.bindDn=cn=readonly,dc=wangcai,dc=com
ldap.bindPassword=123456
ldap.user.baseDn=ou=Users,dc=wangcai,dc=com
ldap.user.request=(&(objectClass=Users)(uid={login}))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail
ldap.group.baseDn=ou=Groups,dc=wangcai,dc=com
ldap.group.request=(&(objectClass=posixGroup)(memberUid={uid}))

  • /opt/sonarqube/conf/wrapper.conf

wrapper.java.command=/usr/java/jdk1.8.0_231/bin/java

7) 創建系統服務

vim /etc/systemd/system/sonar.service.

[Unit]

Description=SonarQube Server

After=syslog.target network.target

[Service]

Type=forking

ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start

ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop

LimitNOFILE=65536

LimitNPROC=4096

User=sonar

Group=sonar

Restart=on-failure

[Install]

WantedBy=multi-user.target

8)增加配置/etc/sysctl.d/00-sysctl.conf 

# 爲 ElasticSearch增加內存

vm.max_map_count = 262144

# 使配置生效

sudo sysctl -p /etc/sysctl.d/00-sysctl.conf

9)開啓sonar並使其開機自啓

sudo systemctl daemon-reload

sudo systemctl start sonar.service

sudo systemctl enable sonar.service

注意:如果是升級則需要重建elasticsearch的數據索引

sudo systemctl stop sonar.service

sudo rm -rf /opt/sonarqube/data/es*

sudo systemctl start sonar.service

10)檢查sonar是否在運行

netstat -tulpn | grep 9000

# SonarQube service log

tail -f /opt/sonarqube/logs/sonar.log

# Web Server logs

tail -f /opt/sonarqube/logs/web.log

# ElasticSearch logs

tail -f /opt/sonarqube/logs/es.log

# Compute Engine logs

tail -f /opt/sonarqube/logs/ce.log

8 jenkins安裝配置sonar-scanner3.2.0

注意:最新版本的sonar-scanner4.2.0可以兼容sonarqube server 6.7.5。

1)直接在jenkins頁面中系統配置——全局工具配置中安裝即可

2)無需另行下載scanner。

9 配置jenkins支持sonarqube,gitlab

1) jenkins頁面安裝插件sonarqube-scanner

2) 添加sonarqube server

10 Demo代碼檢測產生數據

1)jenkins頁面創建項目

點擊應用——保存!

注意:有些項目還需要寫sonar.binaries.properties指定字節碼文件

2)點擊立即構建

3)去sonarqube頁面刷新之後可以看到結果:

11 Jenkins配置pipeline分析代碼

1)添加項目

#pipline script腳本內容

node("master") {
def giturl='http://172.16.212.134/root/test222.git'

stage('SCM') {
git branch: gitbranch, url: giturl
}

//tool 是在jenkins 全局tool頁面配置的,其中scanner是工具sonar-scanner的name,其可以是自帶的插件,也可以是安裝在Jenkins節點上的sonnar-scanner;SnarQubeEnv的sonar是Jenkins在配置中sonarqube server的name。

stage('SonarQube analysis') {
def scannerHome = tool 'scanner';
withSonarQubeEnv('sonar') {
exclusions = ''

//sonar.login後面是sonarqube server上的用戶token;

s="${scannerHome}/bin/sonar-scanner -Dsonar.projectKey="+projecttobuild+" -Dsonar.projectName="+projecttobuild+
" -Dsonar.sources=. -Dsonar.login=aa486417c7e1c26ab334043b59c410ffbe2a235f -Dsonar.java.binaries=. -Dsonar.exclusions="+exclusions

projectVersion = currentBuild.startTimeInMillis
if(projectVersion!="")
s+=" -Dsonar.projectVersion="+projectVersion
echo "s是"+s
sh s
}
cleanWs()
}
}

stage("Quality Gate"){
timeout(time: 1, unit: 'HOURS') {
def qg = waitForQualityGate()
echo "qg.status是"+qg.status
sonarurl = 'http://172.16.212.133:9000/dashboard/index/'+projecttobuild
echo "sonarurl是"+sonarurl
echo "qg是"+qg
if (qg.status != 'OK') {
error "Pipeline aborted due to quality gate failure: ${qg.status}"
}
}
}

2)sonarqube頁面配置webhook

注意:URL中http://ip:port是jenkins的地址,sonarqube-webhook是固定必須要加上的結尾,此外,我沒有添加密碼。

3)配置完成之後,執行構建

注意:如果沒有設置webhook,則構建時會一直停留在quality gate這個階段!

最後可以在jenkins頁面的項目鏈接處點擊sonarqube ,跳轉之後可以查看到結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章