1、事件描述

​ 因误删系统python环境,导致yum不能使用,报错如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

No module named yum

Please install a package which provides this module, or
verify that the module is installed correctly.

It's possible that the above module doesn't match the
current version of Python, which is:
2.7.5 (default, Apr 2 2020, 13:16:51)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

If you cannot solve this problem yourself, please go to
the yum faq at:
http://yum.baseurl.org/wiki/Faq

image-20200806112611007

2、解决办法

2.1卸载系统原有的yum安装包

1
2
3
4
5
6
#强制删除系统安装程序yum包及其相关
rpm -qa|grep yum|xargs rpm -ev --allmatches --nodeps
#删除所有残余文件
whereis yum |xargs rm -frv ##xargs,允许你对输出执行其他某些命令
#验证删除
whereis yum ##验证删除,返回无结果

2.2下载python需要的rpm包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
wget  http://mirrors.163.com/centos/6/os/x86_64/Packages/python-chardet-2.2.1-1.el6.noarch.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-libs-2.7.5-88.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/libxml2-python-2.9.1-6.el7.4.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/libsemanage-python-2.5-14.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/policycoreutils-python-2.5-34.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/libselinux-python-2.5-15.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-iniparse-0.4-9.el7.noarch.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-schedutils-0.4-6.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-linux-procfs-0.4.11-4.el7.noarch.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-urlgrabber-3.10-10.el7.noarch.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/dbus-python-1.1.1-9.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-firewall-0.6.3-8.el7.noarch.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-perf-3.10.0-1127.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-kitchen-1.1.1-5.el7.noarch.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-2.7.5-88.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-decorator-3.4.0-3.el7.noarch.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/audit-libs-python-2.8.5-4.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-IPy-0.75-6.el7.noarch.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-gobject-base-3.22.0-1.el7_4.1.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-slip-0.4.0-4.el7.noarch.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/newt-python-0.52.15-4.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-configobj-4.7.2-7.el7.noarch.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-pycurl-7.19.0-19.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/rpm-python-4.11.3-43.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-slip-dbus-0.4.0-4.el7.noarch.rpm
wget http://mirrors.163.com/centos/7/os/x86_64/Packages/python-pyudev-0.15-9.el7.noarch.rpm

2.3下载yum所需的rpm包

1
2
3
4
5
6
wget http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/yum-3.4.3-161.el7.centos.noarch.rpm
wget http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
wget http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/yum-plugin-aliases-1.1.31-50.el7.noarch.rpm
wget http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm
wget http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/yum-plugin-protectbase-1.1.31-50.el7.noarch.rpm
wget http://mirrors.163.com/centos/7.6.1810/os/x86_64/Packages/yum-utils-1.1.31-50.el7.noarch.rpm

2.4安装

​ 进入到放rpm包的目录,使用下面命令安装

1
rpm -ivh --force *.rpm --nodeps

2.5验证

​ 执行yum命令就能看到熟悉的界面了

1、起因

​ 最近Linux服务器上一些文件被篡改,想追查已经查不到记录了,所以得想个办法记录下所有用户的操作记录。

​ 一般大家通常会采用history来记录,但是history有个缺陷就是默认是1000行,当然你也可以vim /etc/profile将1000修改成1000000行,但是这只是比较笼统的做法,看不到详细的用户来源已经操作记录,比如来源ip地址、操作时间、操作用户等。

2、环境准备

1
2
3
cat  /etc/passwd              #查看可以登录的用户
mkdir -p /var/log/history/admin #创建可登录用户的目录
chown -R admin:admin /var/log/history/admin #给各个用户赋予权限

3、自动记录脚本

在/etc/profile文件的末尾追加编写脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#set user history
history
USER=`whoami`
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]; then
USER_IP=`hostname`
fi
if [ ! -d /var/log/history ]; then
mkdir /var/log/history
chmod 777 /var/log/history
fi
if [ ! -d /var/log/history/${LOGNAME} ]; then
mkdir /var/log/history/${LOGNAME}
chown -R ${LOGNAME}:${LOGNAME} /var/log/history/${LOGNAME}
chmod 770 /var/log/history/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +"%Y%m%d_%H:%M:%S"`
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
chmod 660 /var/log/history/${LOGNAME}/*history* 2>/dev/null

最后刷新配置

1
source   /etc/profile

而每次用户登录到退出都会产生以用户名、登录ip地址、操作时间为文件名的文件,文件里面包含本次用户的所有操作记录。

参考文章:https://www.cnblogs.com/harlanzhang/p/10273379.html

1、备份脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
mkdir -p /data/mysqlbak/{data,logs,scripts}

cd /data/mysqlbak/scripts

cat > backup.sh << EOF
#!/bin/bash

DATE=$(date +%Y%m%d)
BACKUP_ROOT=/data/mysqlbak
BACKUP_FILEDIR=$BACKUP_ROOT/data/$DATE

mkdir -p $BACKUP_ROOT/data/$DATE
source /etc/profile.d/mysql

DATABASES=$(mysql -uroot -peconage123 -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql")

for db in $DATABASES
do
echo
echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN----------
mysqldump -uroot -phello123 --default-character-set=utf8 -q -n --lock-all-tables --flush-logs -E -R --triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz
echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE-------
echo
done

echo "done"
EOF

2、清理脚本

1
2
3
4
5
6
cat > backup_clean.sh << EOF
#!/bin/bash
echo ----------CLEAN BEGIN----------
find /data/mysqlbak/data/ -mtime +14 -exec rm -rf {} \;
echo ----------CLEAN COMPLETE-------
EOF

3、给脚本执行权限

1
2
chmod +x backup.sh
chmod +x backup_clean.sh

4、设置定时任务

1
2
3
crontab -e
00 1 * * 5 /data/mysqlbak/scripts/backup.sh
00 1 * * 5 /data/mysqlbak/scripts/backup_clean.sh > /data/mysqlbak/logs/backup_full_clean.log 2>&1

建议服务器内存在8G或以上

1、内核参数优化

1)备份:

1
cp /etc/sysctl.conf /etc/sysctl.conf.bak

2)添加内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
vi  /etc/sysctl.conf
#网络性能调优
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_mem = 131072 262144 524288
net.ipv4.tcp_rmem = 8760 256960 4088000
net.ipv4.tcp_wmem = 8760 256960 4088000

#TCP/IP调优参数
net.core.rmem_default = 256960
net.core.rmem_max = 513920
net.core.wmem_default = 256960
net.core.wmem_max = 513920
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1

#常见内核参数调优
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_keepalive_time = 1400
net.ipv4.ip_local_port_range = 9000 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
#内存单个段允许使用的大小,可以设置到总内存的90%
#例如16G内存16*1024*1024*1024*90%=15461882265
#shmall的大小可以是15461882265/4k(分页大小,getconf PAGESIZE可得到)= 3774873
#示例参数以8g内存作为标准
kernel.shmmax=7730941132
kernel.shmall=1887436
kernel.msgmax=65535
kernel.msgmnb=65535
#以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。
net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_established = 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

3)生效配置:

1
sysctl -p

2、关闭透明大页

目前已知mysql、oracle、redis内存大页功能会产生性能影响

在/etc/rc.local中增加如下内容

1
2
3
4
5
6
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

3、调整客户端最大数

1
2
3
4
5
vi /etc/security/limits.conf
* soft nofile 65536 # open files (-n)
* hard nofile 65536
* soft nproc 65565
* hard nproc 65565 # max user processes (-u)

4、关闭selinux

修改/etc/selinux/config文件中设置

1
SELINUX=disabled

5、关闭防火墙

1
2
systemctl stop firewalld.service     #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

6、禁用交换区

可以执行如下命令:

1
Swapoff -a

7、修改mysql配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[mysqld]
server_id=1
transaction_isolation=READ-COMMITTED
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
log_bin=db-binlog
binlog_format=mixed
expire_logs_days=15
max_connections=200
join_buffer_size=4M
sort_buffer_size=4M
read_rnd_buffer_size=16M
innodb_log_buffer_size=16M
innodb_buffer_pool_size=【物理内存*(0.5~0.75)】
innodb_log_file_size=256M

[client]
default-character-set=utf8mb4

官网地址:https://mariadb.com/downloads

1、安装MariaDB

1
2
3
4
5
tar xvf mariadb-10.4.12-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local
ln -s mariadb-10.4.12-linux-x86_64 mysql
groupadd mysql
useradd -g mysql mysql

创建数据目录

1
2
3
mkdir -p /data/mysql/data
chown -R mysql.mysql /data/
chown -R mysql.mysql /usr/local/mysql

2、安装配置

1
2
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql/data #执行配置脚本

修改/etc/my.cnf中的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[mysqld]
slow_query_log = 1 #开启慢日志
slow_query_log_file = "/data/log/mariadb/mariadb-slow.log" #慢日志存放目录
long_query_time = 2 #查询时间超过 2 秒则定义为慢查询
bind-address=0.0.0.0 #一般建议全部绑定,因为 mysql 和 mariadb 不允许手动绑定指定 IP 地址
port = 3306
datadir = "/data/mysql/data" #后期同步的二进制修改信息会放在这里
log_error = "/data/log/mariadb/error.log"
socket = "/var/lib/mysql/mysql.sock" #用于支持本地访问的 socket 文件
server-id=1 #配置本机 mysql 的唯一 ID,多台 mysql 不能存在相同的 ID
log-bin=master-bin #设置”主服务器需要同步的二进制日志”文件名前缀
relay-log=mysql-relay-bin #设置”从服务器需要执行的中继日志”文件名前缀
binlog_format=row #修改了复制格式为 mixed,mysql 一共有三种格式 mixed 和 statement 和 row ,默认是 row
expire_logs_days = 3 #设置”二进制修改信息”的保存时间,过期(三天后)清理
autocommit=0
character_set_server=utf8mb4
collation_server=utf8mb4_bin
explicit_defaults_for_timestamp=1
transaction_isolation=READ-COMMITTED
tmp_table_size=64M
interactive_timeout=1800
wait_timeout=1800
max_connections=200
max_allowed_packet=32M
read_rnd_buffer_size=8M
sort_buffer_size=8M
join_buffer_size=8M
binlog_cache_size=4M
innodb_log_buffer_size=16M
innodb_flush_log_at_trx_commit=1
innodb_sort_buffer_size=64M
innodb_log_file_size=512M
innodb_print_all_deadlocks=1
innodb_buffer_pool_size=【物理内存*0.6】
lower_case_table_names=1 #关闭大小写敏感
default-time_zone = '+8:00'
slave_parallel_mode=conservative #开启并行复制
log-bin-trust-function-creators=1 #开启function


并添加如下配置:
[client]
default-character-set=utf8mb4

修改/etc/my.cnf中的配置

1
2
3
4
5
6
7
8
9
10
[mysqld]
port = 3306
server-id=2
log-bin=slave-bin
log-bin-trust-function-creators=1
sync_binlog = 1
master_info_repository = TABLE
relay_log_info_repository = TABLE
log_slave_updates=off
slave_parallel_threads=12

3、启动数据库

1
2
./bin/mysqld_safe --user=mysql --datadir=/data/mysql/data &
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

设置数据库root用户密码

1
./bin/mysqladmin -u root password '123456'       #设置root用户密码

关闭数据库

1
./bin/mysqladmin -uroot -p shutdown

4、数据库连接、查询

1
2
3
4
./bin/mysql -uroot -p
select host,user,password from user;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'econage123' WITH GRANT OPTION;
FLUSH PRIVILEGES;

5、创建主从连接的用户

1
2
3
4
create user 'admin'@'%' identified by 'admin123';
grant replication slave on *.* to 'admin'@'%';
FLUSH PRIVILEGES;
show master status;

6、进行关联master节点

1
2
3
4
5
6
7
CHANGE MASTER TO
MASTER_HOST='172.18.103.211',
MASTER_USER='econage',
MASTER_PASSWORD='econage',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=1552;

最后输入命令 show slave status\G 查看状态。(写 \G 是换行)

image-20200408164002241

如果状态没有同步

1
2
3
stop  slave;
start slave;
show slave status\G

参考文章:https://www.landui.com/help/show-9902.html

https://blog.csdn.net/yhld456/article/details/89020979

1、下载安装包

wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.18-el7-x86_64.tar.gz

2、删除系统自带

1
2
3
rpm -qa |grep  mysql
rpm -qa |grep mariadb
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64

3、初始化数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
cd /usr/local
tar xvf mysql-8.0.18-el7-x86_64.tar.gz
ln -s mysql-8.0.18-el7-x86_64 mysql
cd mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files
bin/mysqld --initialize --user=mysql
bin/mysql_ssl_rsa_setup
bin/mysqld_safe --user=mysql &
cp support-files/mysql.server /etc/init.d/mysql.server

image-20191226160516781

记住数据库的密码

4、修改配置文件

1
2
3
4
5
6
7
8
9
10
cat /etc/my.cnf

[mysqld]
log-bin=master-bin #master是master-bin,slave的是slave-bin
server-id=1 #master为1,slave2

#关闭命令
bin/mysqladmin -u root -p shutdown
#启动命令
bin/mysqld_safe --user=mysql &

5、设置环境变量:

1
2
3
4
cat  /etc/profile.d/msyql.sh

MYSQL_HOME=/usr/local/mysql/
export PATH=$PATH:$MYSQL_HOME/bin

6、修改随机密码:

1
2
3
mysql  -u root  -p    #输入初始化随机生成的密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'hello123';
show master status; #查看master状态

image-20191226161712968

7、为主从复制创建用户

1
2
CREATE USER 'econage'@'%' IDENTIFIED BY 'hello123';
GRANT REPLICATION SLAVE ON *.* TO econage@'%';
1
2
3
4
5
6
7
mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,把mysql用户登录密码加密规则还原成mysql_native_password. 不然会报错如下

error connecting to master 'econage@192.168.0.56:3306' - retry-time: 60 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

ALTER USER 'econage'@'%' IDENTIFIED WITH mysql_native_password BY 'hello123'; #添加这一条命令即可

FLUSH PRIVILEGES;

如果禁用了二进制日志记录,请在创建用户后立即通过发出以下语句再次启用它:

1
SET SQL_LOG_BIN=1;

8、查看连接是否正确:

1
mysql   -ueconage   -phello123  -h192.168.0.56   -e   'status;'

image-20191226172818003

9、在slave进行连接master:

1
2
3
4
5
6
CHANGE MASTER TO
MASTER_HOST='192.168.0.56', #master主机ip
MASTER_USER='econage', #上面创建的用户
MASTER_PASSWORD='hello123', #用户密码
MASTER_LOG_FILE='master-bin.000002', #master的file文件名
MASTER_LOG_POS=474; # master的Position号

查看

1
2
3
show  slave  status\G      #可能会状态不对,执行下面命令
stop slave;
start slave;

再查看

image-20191226201513037

显示两个yes则正确。

9、验证

1
2
3
show   databases;      #分别在master和slave查看
#在master去创建一个库
create database hello #会发现slave上也有一个hello的库

说明:因项目需求,创建的是一个Jenkins自由项目,需要sonar代码扫描通过再继续maven构建、并且不发送钉钉告警,扫描不通过则停止构建、并发送钉钉告警。

1、安装告警插件

#下载release包 /releases/dingding-sonar-1.0-SNAPSHOT.jar

1
2
3
wget https://gitee.com/chejiangyi/dingding-sonar/repository/archive/master.zip

unzip master.zip

#运行jar包 sonar.url为sonar安装地址

1
cd dingding-sonar/releases

#启动服务

1
nohup java -jar dingding-sonar-1.0-SNAPSHOT.jar \ --server.port=8082 \ --sonar.url=http://192.168.0.129:9000 \ > /dev/null 2 >& 1 &

#检查部署成功 sonar-project-id 为sonar的项目id:task-dev

1
curl http://<your dingding-sonar-server IP>:8082/?projectname={sonar-project-id}

#返回结果

bug:0,漏洞:0,坏味道:58,覆盖率:0.0,重复:0.0,状态:OK

image-20200305135649539

2、发送告警通知

钉钉通知发布脚本内容示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
projectName=task-dev
projectId=task-dev
dingdingToken=a9c7f0dff01a01cefda6af09e5d0ec068a55d755008c2f559ec2598e9f377djl #钉钉群组创建一个自由的webhook的token
sonarreport=$(curl -s http://192.168.0.121:8082/?projectname=${projectName})
sonar=$(curl -s http://192.168.0.121:8082/?projectname=task-dev |awk -F ":" '{print $7}'|tee dev.txt)
echo "$sonar"
if [[ "$sonar" == "ERROR" ]]
then
echo ${sonarreport}
curl -s "https://oapi.dingtalk.com/robot/send?access_token=${dingdingToken}" -H "Content-Type: application/json" -d "{ \"msgtype\": \"markdown\", \"markdown\": { \"title\":\"sonar代码
质量\", \"text\": \"## Sonar代码质量报告 \n
>${projectName} \n
> [sonar地址](http://192.168.0.129:9000/dashboard?id=${projectId}) \n
> ${sonarreport} \n\"
}
}"
exit 1
else
echo ${sonarreport}
fi

参考文章:https://www.cnblogs.com/chejiangyi/p/10844232.html

1、在jenkins中安装插件:SonarQube Scanner

image-20200303154952665

2、在jenkins主机之上安装 SonarQube Scanner 部件,将其安装到jenkins用户之下

1
2
3
4
5
6
7
8
9
10
cd  /usr/local
unzip sonar-scanner-cli-4.2.0.1873-linux.zip
ln -s sonar-scanner-4.2.0.1873-linux sonar-scanner
chown -R jenkins: sonar-scanner-4.2.0.1873-linux

echo 'export SONAR_SCANNER_HOME=/usr/local/sonar-scanner'>>/etc/profile
echo 'export PATH=$SONAR_SCANNER_HOME/bin:$PATH'>>/etc/profile
source /etc/profile

vim conf/sonar-scanner.properties

image-20200303155825904

1
sonar-scanner -h

image-20200303155945854

3、整合Jenkins和SonarQube:

网页登录jenkins,系统管理,全局工具配置,SonarQube Scanner,将安装的sonar-scanner配置上去

image-20200303170347797

网页登录sonar创建token

image-20200303170456840

image-20200303170548345

网页登录jenkins,凭据,jenkins,全局凭据,添加凭据,Secret text类型,将上一步的token填入

在这里插入图片描述

网页登录jenkins,系统管理,系统设置,SonarQube servers,配置名字和url,选择上一步添加的凭据

image-20200303171838307

4、配置Jenkins任务

image-20200305133622078

image-20200305133650304

  • Task to run: 输入 scan,即分析代码;
  • JDK :选择 SonarQube Scanner 使用的 JDK(注意这里必须是 JDK 不能是 JRE);
  • Path to project properties : 这里可以指定一个sonar-project.properties 文件,如果不指定的话会使用项目默认的 properties文件;
  • Analysis properties: 这里需要输入一些配置参数用来传递给 SonarQube,这里的参数优先级高于sonar-project.properties文件里面的参数,所以可以在这里来配置所有的参数以替代sonar-project.properties文件,下面列出了一些参数,sonar.language指定了要分析的开发语言(特定的开发语言对应了特定的规则),sonar.sources定义了需要分析的源代码位置(示例中的.所指示的是当前 Jenkins项目的目录),
  • sonar.java.binaries 定义了需要分析代码的编译后文件位置;
  • Additional arguments 输入框中可以输入一些附加的参数,示例中的-X 意思是进入SonarQube Scanner的Debug 模式,这样会输出更多的日志信息;
  • JVM Options 可以输入在执行 SonarQube Scanner是需要的JVM参数。

5、测试构建

image-20200305134512002

image-20200305134441603

构建项目时错误信息:Caused by: Please provide compiled classes of your project with sonar.java.binaries property,这个问题是sonar扫描的项目工程中没有找到相应的class文件

解决办法:在Analysis properties一项中,增加sonar.java.binaries的配置,这个路径是项目工程中,编译的.class文件的路径。

6、登录sonarqube查看

image-20200305134927195

社区版下载地址:https://www.sonarqube.org/downloads/

环境介绍:(本文使用Oracle jdk 11.0.6,postgreSQL 12)

1、解压缩包

1
unzip sonarqube-8.2.0.32929.zip

image-20200303112854371

2、创建postgreSQL用户

安装完后会自动创建postgres用户 su - postgres切换进去

1
2
3
4
5
6
7
8
9
10
psql                     #进入命令行模式
create database sonar; #创建sonar数据库
create user sonar; #创建sonar用户
alter user sonar with password 'postgres'; #设置sonar用户密码(否则会导致连不上数据库)
alter role sonar createdb;alter role sonar superuser;alter role sonar createrole; #给sonar授权
alter database sonar owner to sonar; #更改sonar数据库拥有者(这一步是必须的,否则会sonarqube会连接失败)

psql进入命令行模式
\l查看数据库
\du 查看用户

image-20200303115321618

3、修改系统配置

1
2
3
4
1.不能用root起!
2.切换用户必须 su - username
3.切换好用户千万别忘记给这个用户授权你的sonarQube根目录
4.更改一些系统配置

根据需要执行下述命令以使内核参数符合sonar安装需求

#可以使用以下命令查看这些值:

1
2
3
sysctl vm.max_map_count 
sysctl fs.file-max
ulimit -n

image-20200303120223176

#可以通过以root身份运行以下命令来为当前会话动态设置:

1
2
3
sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -n 65536

#为了更永久设置这些值,则必须修改/etc/sysctl.d/99-sonarqube.conf(或/etc/sysctl.conf文件)#文件末尾添加下述两行

1
2
3
4
vi /etc/sysctl.conf

vm.max_map_count=262144
fs.file-max=65536

#在/etc/profile文件末尾添加ulimit -n 65536

1
2
3
4
5
vi /etc/profile

ulimit -n 65536 #保存后运行#source /etc/profile 使其生效

source /etc/profile

创建sonar用户

1
2
useradd sonar
passwd sonar

密码自己设置。

目录授权

1
chown -R sonar:sonar /usr/local/sonarqube-8.2.0.32929/

4、设置对数据库的访问

1
vim  /usr/local/sonarqube-8.2.0.32929/conf/sonar.properties

image-20200303134739877

image-20200303151110546

配置自己机器的IP跟端口,保存退出即可

5、配置Elasticsearch存储路径

默认情况下,Elasticsearch数据存储在*$ SONARQUBE-HOME / data中*,但不建议将其用于生产实例。相反,您应该将此数据存储在其他位置,最好是在具有快速I / O的专用卷中。除了保持可接受的性能外,这样做还可以简化SonarQube的升级

1
vim /usr/local/sonarqube-8.2.0.32929/conf/sonar.properties

image-20200303141448981

用于启动SonarQube的用户必须具有对这些目录的读写权限

1
2
3
mkdir -p /data/sonarqube/data
mkdir -p /data/sonarqube/temp
chown -R sonar:sonar /data/

6、Sonar-Scanner扫描器安装及使用方法

光弄SonarQube是没法扫描项目的,所以还需要装一下sonar-scanner

官方下载地址:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/

1
2
3
4
5
#丢到/usr/local/下面解压
unzip sonar-scanner-cli-4.2.0.1873-linux.zip
cd sonar-scanner-4.2.0.1873-linux/

vim conf/sonar-scanner.propertie #改下配置

image-20200303135545387

保存退出后,创建软连接,将sonar-scanner改为全局即可使用

1
ln -s /usr/local/sonar-scanner-4.2.0.1873-linux/bin/sonar-scanner /usr/bin/sonar-scanner

7、启动服务

1
2
3
4
su - sonar 别忘了切用户

cd /usr/local/sonarqube-8.2.0.32929/
bin/linux-x86-64/sonar.sh

image-20200303140123972

访问web界面

image-20200303151227710

账户密码:admin/admin

安装中文版,然后点击从新启动

在这里插入图片描述

参考文章:https://blog.csdn.net/qq_42207325/article/details/100998453

1、进入官网下载所需版本

https://www.postgresql.org/download/linux/redhat/

image-20200303095053134

2、开始安装

1
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm -y

image-20200303095233768

1
2
yum install postgresql12 -y
yum install postgresql12-server -y

3、数据库初始化与设置自启动

1
2
3
/usr/pgsql-12/bin/postgresql-12-setup initdb
systemctl enable postgresql-12
systemctl start postgresql-12

image-20200303100416097

​ 这一步初始化数据库命令会在 /var/lib/pgsql 目录下创建名称为12文件夹,12为数据库版本。这里如果已经有对应版本的文件夹了,初始化这一步会报错,需要你自行去删除对应的文件夹,再去初始化。

4、默认会创建一个名为postgres的linux登录用户,这里进行密码修改

image-20200303100954704

5、修改配置文件

image-20200303102201925

5.1修改postgresql.conf

1
修改:#listen_addresses = 'localhost'为listen_addresses = '*'

image-20200303102710321

5.2修改pg_hba.conf

修改前

image-20200303103002192

修改后

image-20200303103124544

并重新启动

1
systemctl restart postgresql-12

6、设置登录数据库账密

1
2
3
4
su postgres              #不能使用root用户登录,切换到普通用户
psql -U postgres
\password #设置用户密码
select version(); #查看版本

image-20200303104354374

7、登录并测试数据库连接

image-20200303105037116

image-20200303105103983

参考文章:https://www.jianshu.com/p/b4a759c2208f