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
yum install -y epel-release unzip vim wget
注意:也可以用docker运行gitlab
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.3.0-ce.0.el7.x86_64.rpm
sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
sudo rpm -i --force --nodeps gitlab-ce-10.3.0-ce.0.el7.x86_64.rpm
vim /etc/gitlab/gitlab.rb
写入URL:
gitlab-ctl reconfigure
gitlab-ctl --hlep #查看命令
gitlab-ctl start #启动
gitlab-ctl stop #停止
首次访问GitLab,系统会让你重新设置管理员的密码,设置成功后会返回登录界面。http://172.16.212.133
默认的管理员账号是root,新密码为12345678。如果你想更改默认管理员账号,请输入上面设置的新密码登录系统后修改帐号名。
登录之后创建project,从导入一个project源码命名为test01,作为备用的测试代码。
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
完成上述步骤即实现汉化。
注意:公司用的是一主多备的jenkins架构,由于目的是测试sonarqube,这里我就不搭建主备了。
nohup java -Dhudson.util.ProcessTree.disable=true -jar /opt/jenkins.war --logfile=server.log --httpPort=9999 > server.log 2>& 1 &
根据提示输入/root/.jenkins/secrets/initialAdminPassword中的密码,安装推荐插件,进入以下页面:
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
确定保存!
然后按照提示操作,进入登录页面
配置全局工具git
6)配置连接gitlab
点击系统配置:
找到gitlab配置处:
其中,gitlab token生成方法:
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 后面就是之前设置的密码,根据自己的填写
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将要用到的组和用户
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@';
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;
unzip sonarqube-*.zip -d /opt
mv /opt/sonarqube-8.0 /opt/sonarqube
sudo adduser sonar -s /sbin/nologin
chown -R sonar:sonar /opt/sonarqube
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=inetOrgPerson)(mail={login})(|(memberOf=cn=sonar,ou=Groups,dc=wangcai,dc=com)(memberOf=cn=admin,ou=Groups,dc=wangcai,dc=com)))
ldap.user.realNameAttribute=sn
ldap.user.emailAttribute=mail
ldap.group.baseDn=ou=Groups,dc=wangcai,dc=com
ldap.group.request=(&(objectClass=groupOfUniqueNames)(uniqueMember={dn}))
ldap.group.idAttribute=cn
wrapper.java.command=/usr/java/jdk1.8.0_231/bin/java
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
# 为 ElasticSearch增加内存
vm.max_map_count = 262144
# 使配置生效
sudo sysctl -p /etc/sysctl.d/00-sysctl.conf
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
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
注意:最新版本的sonar-scanner4.2.0可以兼容sonarqube server 6.7.5。
1)直接在jenkins页面中系统配置——全局工具配置中安装即可
2)无需另行下载scanner。
1) jenkins页面安装插件sonarqube-scanner
2) 添加sonarqube server
1)jenkins页面创建项目
点击应用——保存!
注意:有些项目还需要写sonar.binaries.properties指定字节码文件
2)点击立即构建
3)去sonarqube页面刷新之后可以看到结果:
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 ,跳转之后可以查看到结果