一、引言
上一篇文章之后 我们应该已经成功完成的配置了扫描环境并执行了一次基本的本地扫描,但是之前的手动扫描需要我们每一次都手动切换到代码目标并手动执行扫描命令,效率很低。在代码库较大的情况下会占用大量的时间。这一章我们会通过编写python代码的形式来实现自动化的本地扫描。
本篇需要使用的基本工具
- python3
- linux下的shell脚本
- crontab定时任务
二、代码创建扫描项目
sonarqube官方提供了大量的api接口供我们使用,我们可调用这些接口来实现自动化创建。
通过这个地方就能查看当前安装版本支持的各种api接口,这里我们需要调用/api/projects/create
- mainBranch为项目分支,非必填,默认为main分支
- name为项目的名字,必填,可重复
- project为项目的唯一标识,必填,不可重复
- visibility为项目的公开属性,用于项目管理,非必填,默认为公开,即所有sonarqube用户都能查看该项目
代码示范,一次成功的项目创建实现如下:
user ='admin'
password = 'admin'
sonarqube_url ='url'
#创建sonarqube项目
def create_sonarqube_project(sonarqube_url, project_name, username, password):
api_endpoint = sonarqube_url + "/api/projects/create"
data = {
"project": project_name,
"name": project_name
}
try:
response = requests.post(api_endpoint, data=data, auth=HTTPBasicAuth(username, password))
response.raise_for_status() # 抛出异常如果响应不是 200 OK
print(f"项目 '{
project_name}' 创建成功!")
return True
except requests.exceptions.RequestException as e:
print("创建项目失败:", e)
return False
- 创建项目同样需要授权,这里我们使用了auth=HTTPBasicAuth(username, password) 来实现,这里的账号信息就是对应sonarqube的账号密码,当然你也可以通过生成令牌的方式来实现授权,这里没有列举。
- 这里的代码中为了方便查看,将项目的name和key设置为同样的值
- 如果项目创建成功,会返回200
- 如果认证错误,会返回401
- 如果项目存在,会返回400
三、代码执行本地扫描
#调用sonarqube扫描mvn代码
def exec_mvn_scan(path,project):
command =f'''mvn clean verify sonar:sonar \
-Dsonar.projectKey={
project} \
-Dsonar.host.url=url \
-Dsonar.login=sqa_2cb36aeb59566dbc633bfc10b27371c732******
'''
working_dir = path
result = subprocess.run(command, cwd=working_dir, shell=True