GitLab如何添加新项目 gitlab给项目添加成员_gitlab添加项目成员


日常工作中,用gitlab做代码管理,sonarqube做代码静态扫描,是质量保障的常见方式。具体落地实践过程中,需要解决如下几个问题:

  • 从gitlab中获取需要做静态扫描的项目信息,包括地址、分支等
  • sonarqube中访问扫描结果的权限问题
  • sonarqube扫描结果的报告汇总

获取需要扫描的项目信息

此处实现的方式方法较多,比如:

  • 使用gitlab4j的api从gitlab中拉取项目列表和分支信息,如果不需要扫描所有的项目和分支,可以对需要进行扫描的项目和分支进行约定,比如基于group或者项目名称或者分支名称等等
  • 另外一种方式就是提供白名单,只扫描白名单中的项目,比如:


GitLab如何添加新项目 gitlab给项目添加成员_访问权限_02


sonarqube中访问扫描结果的权限

如果采用sonarqube本身提供的web界面去访问bug等信息,那么需要注意代码安全问题,保证非项目组成员不能查看项目和代码,此处具体落地过程中采用如下方式:

  • 首先,修改项目模板,将项目的默认访问权限改为private:


GitLab如何添加新项目 gitlab给项目添加成员_访问权限_03


如此扫描任务完成之后,扫描结果无法直接访问

  • 然后从gitlab中获取该项目的访问权限列表,包括group和member的,然后采用定时任务调用sonarqube的api,添加group和member的访问权限给该扫描结果,如此进行基本权限控

sonarqube扫描结果的报告汇总

扫描结果的汇总,主要通过sonarqube的api获取,具体的api列表可以通过访问http://****:9000/web_api,访问方法如下:

  • 首先在MyAccount页面生成token
  • 然后使用api列表中指明的GET/POST等方法调用相应的接口进行请求,注意sonar采用HTTP Basic Auth的方式进行身份验证,此处的username为token,密码为空,比如我们采用Unirest进行请求的代码如下:
Unirest.get(sonarUrl + uri).basicAuth(sonarToken, "") .asString().getBody();
  • 扫描结果的获取,主要使用badges/measure这个API,获取的度量包括bug数、代码行数等,关键代码如下:
@Slf4jpublic class SonarBadgesApi extends SonarBaseApi { public SonarBadgesApi(String sonarUrl, String sonarToken){ super(sonarUrl, sonarToken); } static final String MEASURE_URI = "api/badges/measure"; static final Pattern PATTERN = Pattern.compile("(.*?)"); /** * 获取所有需要的measure * @param key * @return */ public String measures(String key){ Map map = new HashMap(); String[] metrics = {"bugs