极客时间运维进阶训练营第四周作业
1.部署 jenkins master 及多 slave 环境
在部署 jenkins 的环境,包括 master 和 slave 的环境,安装 openjdk 的 11 版。
mkdir -p /var/lib/jenkins
apt install openjdk-11-jdk
在 master 上:
安装 locale 的插件,还有 locale Chinese 插件。
安装 Blue Ocean 插件。
打开邮件发送功能
系统管理员邮件地址也需要配置为相同的地址,同时 email 插件要安装正确。
系统管理-"configure system"-邮件通知。
点击下方的测试邮件,可以看邮件是否可以正确发出。
部署 slave 环境
流程是:系统管理-节点管理-新建节点。
之后就可以连上了。
显示响应时间,表示脸上了,可以正常工作了。
分配任务到 slave
配置尽可能调度到某个 slave,就会自动把 task 转过去了。
或者在 pipeline 指定。
2.基于 jenkins 视图对 jenkins job 进行分类
我的视图里,可以看到所有的 job。
列表视图可以新增,选择正则表达式在视图中显示任务比较好,增加的任务会自动显示在这里。
增加列表视图后,在主界面就可以看到了。
可以看到上次成功距离现在的时间,以及上次执行了多长时间。
3.总结 jenkins pipline 基本语法
pipeline 主要有 3 类语法,pipeline 在最外层,里面是 stages 和 steps。
其它还有 environment 等,可以配置全局变量,或者 stages 里的局部变量,只在 stage 里生效。
Post 的条件语法:
always
无论流水线或阶段的完成状态如何,都允许在 post
部分运行该步骤。
changed
只有当前流水线或阶段的完成状态与它之前的运行不同时,才允许在 post
部分运行该步骤。
failure
只有当前流水线或阶段的完成状态为"failure",才允许在 post
部分运行该步骤, 通常 web UI 是红色。
success
只有当前流水线或阶段的完成状态为"success",才允许在 post
部分运行该步骤, 通常 web UI 是蓝色或绿色。
unstable
只有当前流水线或阶段的完成状态为"unstable",才允许在 post
部分运行该步骤, 通常由于测试失败,代码违规等造成。通常 web UI 是黄色。
aborted
只有当前流水线或阶段的完成状态为"aborted",才允许在 post
部分运行该步骤, 通常由于流水线被手动的 aborted。通常 web UI 是灰色。
4.部署代码质量检测服务 sonarqube
sonar 依赖于 postgreSQL,所以要装 sonar 前,需要先安装 postgreSQL 才行。
postgreSQL 安装和启动
安装
apt update
apt-cache madison postgresql
apt install postgresql
启动
用的是版本 12,所以 start 后的数字是 12。
pg_createcluster --start 12 mycluster
配置
vim /etc/postgresql/12/mycluster/pg_hba.conf
#IPv4 local connections:
host all all 0.0.0.0/0 scram-sha-256
地址从 127.0.0.1 改为全 0。
vim /etc/postgresql/12/mycluster/postgresql.conf
listen_addresses = '' #defaults to 'localhost'; use '*' for all
把监听地址从 localhost 改为*,表示监听所有地址。
确认监听 5432 端口
试运行 postgreSQL
postgreSQL 不支持 root 用户,所以需要用 su - $USER 切换到 postgres 用户。
root@ecs-337800:~# su - postgres
postgres@ecs-337800:~$ psql -U postgres
psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))
Type "help" for help.
postgres=# CREATE DATABASE sonar
postgres-# CREATE USER sonar WITH ENCRYPTED PASSWORD '123456'
postgres-# GRANT ALL PRIVILEGES ON DATABASE sonar TO sonar
postgres-# ALTER DATABASE sonar OWNER TO sonar
postgres-# \q
postgres@ecs-337800:~$ exit
logout
sonarqube
安装
二进制安装
可以在这里下载:https://www.sonarqube.org/downloads/
系统 snap 安装
ubuntu 也可以通过snap install sonarqube
来安装。
Jenkins 插件安装
插件管理 - 搜索 sonarqube 即可。
配置
vi /etc/sysctl.conf
vm.max_map_count=26244
fs.file-max=65536
启动 sonar
mkdir /apps && cd /apps/
unzip sonarqube-9.7.1.62043.zip
ln -sv /apps/sonarqube-9.7.1.62043 /apps/sonarqube
useradd -r -m -s /bin/bash sonarqube && chown sonarqube.sonarqube /apps/ -R && su - sonarqube
vim /apps/sonarqube/conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:postgresql://125.124.238.46/sonar
/apps/sonarqube/bin/linux-x86-64/sonar.sh start
看是否启动
tail /apps/sonarqube/logs/*.log
http 登录 sonar 服务器
可配置 systemd 启动 sonar。
Administration-Marketplace 选择 Plugins,安装 chinese 插件,装好之后,需要重启。
关闭强制用户认证。
Sonar 可以配置通过 systemd 的 service 自动启动。
[Unit]
Description=SonarQube service
After=syslog.target network.target
[Service]
Type=simple
User=sonarqube
Group=sonarqube
PermissionsStartOnly=true
ExecStart=/bin/nohup /usr/bin/java -Xms1024m -Xmx1024m -Djava.net.preferIPv4Stack=true -jar /apps/sonarqube/lib/sonar-application-9.7.1.62043.jar
StandardOutput=syslog
LimitNOFILE=131072
LimitNPROC=8192
TimeoutStartSec=5
Restart=always
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
使能开机启动:
systemctl enable sonarqube.service
5.基于命令、shell 脚本和 pipline 实现代码质量检测
基于命令的扫描
https://binaries.sonarsource.com/
扫描命令是:/apps/sonar-scanner/bin/sonar-scanner -Dsonar.projectKey=magedu -Dsonar.projectName=magedu-python-app1 -Dsonar.projectVersion=1.0 -Dsonar.sources=./src -Dsonar.language=py -Dsonar.sourceEncoding=UTF-8
扫描结束会打印出信息。
基于 shell
把命令放到 jenkins 的 shell 里,执行 job 即可。
基于 pipeline
pipeline {
agent any
parameters {
string(name: 'BRANCH', defaultValue: 'develop', description: '分支选择')
choice(name: 'DEPLOY_ENV', choices: ['develop', 'production'], description: '部署环境选择')
}
stages {
stage('变量测试1') {
steps {
sh "echo $env.WORKSPACE"
sh "echo $env.JOB_URL"
sh "echo $env.NODE_NAME"
sh "echo $env.NODE_LABELS"
sh "echo $env.JENKINS_URL"
sh "echo $env.JENKINS_HOME"
}
}
stage('python源代码质量扫描') {
steps {
sh "cd $env.WORKSPACE && /apps/sonar-scanner/bin/sonar-scanner -Dsonar.projectKey=magedu -Dsonar.projectName=magedupython-
app1 -Dsonar.projectVersion=1.0 -Dsonar.sources=./src -Dsonar.language=py -Dsonar.sourceEncoding=UTF-8"
}
}
}
}
6.扩展:jenkins 安装 Sonarqube Scanner 插件、配置 sonarqube server 地址、基于 jenkins 配置代码扫描参数实现代码质量扫描 Execute SonarQube Scanner
可以下载 sonar 的 binary,然后解压到 jenkins 插件目录,实现代码检测。或者通过 jenkins 的插件来安装。
评论