持续集成部署
本文介绍如何基于docker,将代码静态分析工具sonarqube集成至Jenkins。
一、系统架构
以Jenkins为持续集成系统架构的核心,sonarqube在代码编译之后进行静态扫描,sonarqube使用PostgreSQL作为静态扫描的数据持久化方案。目前架构如下图所示: todo
二、部署步骤
2.1 镜像安装
使用以下命令拖取
Jenkins、PostgreSQL、SonarQube的docker镜像:docker pull jenkins/jenkins:lts docker pull sonarqube:lts docker pull postgres:10编写docker-compose.yaml
version: "3" services: jenkins: image: jenkins/jenkins:lts ports: - "8080:8080" - "50000:50000" networks: ci_net: ipv4_address: 172.20.0.2 volumes: - ${WQ_CI_HOME}/jenkins_home:/var/jenkins_home:rw sonarqube: image: sonarqube:lts ports: - "9000:9000" networks: ci_net: ipv4_address: 172.20.0.3 environment: - SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar volumes: - ${WQ_CI_HOME}/sonarqube_home/conf:/opt/sonarqube/conf:rw - ${WQ_CI_HOME}/sonarqube_home/logs:/opt/sonarqube/logs:rw - ${WQ_CI_HOME}/sonarqube_home/data:/opt/sonarqube/data:rw - ${WQ_CI_HOME}/sonarqube_home/extensions:/opt/sonarqube/extensions:rw db: image: postgres:10 networks: ci_net: ipv4_address: 172.20.0.4 ports: - "8001:5432" environment: - POSTGRES_USER=sonar - POSTGRES_PASSWORD=sonar volumes: - ${WQ_CI_HOME}/db_data:/var/lib/postgresql/data:rw networks: ci_net: driver: bridge ipam: driver: default config: - subnet: 172.20.0.0/16将
docker-compose.yaml中用到的bind目录创建出来;在
docker-compose.yaml同级目录下使用docker-compose up启动服务;等待服务器启动完成,即可进入
Jenkins和SonarQube进行配置。
2.2 配置
初始密码键入
Jenkins在初次启动会要求输入初始密码,该密码位于$JENKINS_HOME/secrets/initialAdminPassword,使用下列命令查看:输入该密码并进入
Jenkins。选择初始安装插件
这一步会选择初始安装的插件,如果当前环境不能翻墙,建议反选所有插件,并进入用户名密码设置阶段,设置完成后就可以进入
Jenkins。安装插件
Jenkins提供了在线安装的方式,如果不能翻墙,也可以选择使用下载好的离线插件。点击Manage Jenkins->Manage Plugin->Advanced,点击Browse上传已经下载好的*.hpi插件。配置证书
打开sonarqube的web管理页,登陆账号,初始账号和密码均为
admin。点击Administration->Security->User,在admin里面点击tokens下面的button,添加界面如下图所示:
在
Generate Tokens随意输入一个key,点击generate,复制弹出框中的token。打开Jenkins的web管理页,点击
Credentials->System,在右边点击Global credentials (unrestricted),然后点击左边的Add Credentials,在Kind中选为Secret Text,然后将刚刚复制的token粘贴到Secret框中,在ID中为该证书取名,Description可以为空。
配置
sonarqube服务器 点击Manage Jenkins->Configure System,找到SonarQube servers,按照下图进行设置。
其中
Name表示该服务器的名字,可以随意更改;Server URL为固定值,如果想修改,需要修改docker-compose.yaml中的ipam;Server authentication token是Jenkins和sonarqube服务器通信的证书,选择上一步添加的证书即可。配置
sonarqube scannersonarqube scanner是用于代码静态分析的工具,点击Manage Jenkins->Global Tool Configuration,找到SonarQube Scanner Installations,进入配置。如果不能翻墙,请反选Install Automatically,并将安装包解压的路径填入SONAR_RUNNER_HOME。
2.3 添加项目测试
Jenkins点击New Items,然后选择Freestyle Project,输入项目名称点击OK;找到
Source Code Management,选择Git,填入项目地址。如果是从公司的gerrit上clone代码,那么需要配置证书,配置方法跟上面所述类似。找到
Build,选择Add build step->Execute SonarQube Scanner。根据所测项目的类型,在Analysis properties,填入相关配置。以golang为例,通用填法如下:其中,
$(projectKey)可以随意填,例如项目的名字,但是对于maven项目,它的格式为<groupId>:<artifactId>。具体请参考官方文档。 其余语言参考sonarqube分析参数。
2.4 查看测试结果
在SonarQube页面点击Project即可查看扫描结果。 
三、troubleshooting
执行
docker-compose可能会有文件夹权限错误:solution:
error 1 bootstrap checks failed sonarqube
执行以下命令即可:
Last updated
Was this helpful?