问题描述:

使用Gitlab+Gerrit+Jenkins搭建CI环境,在完成各项配置以后,在Gerrit和Jenkins对接的时候出现问题,在develper提交代码Review后,能够触发Jenkins build job,但是jenkins build成功以后,Gerrit上始终不能给代码Verified+1.

各个组件版本如下:
gerrit2.12.2 + jenkins2.176.3 + gerrit trigger 2.30.5

问题截图:
预期是构建成功后,Verified + 1  jenkins在这里插入图片描述

搭建步骤参考:
https://www.cnblogs.com/kevingrace/p/5651447.html
说点题外话:步骤非常详尽,基本可以照着走。美中不足的一点是搭建环境没有描述,用户创建更清楚一点。因为Gitlab/Gerrit/Jenkins本身既有web界面的用户,又有服务器上同名的用户,不写清楚,有的步骤就弄晕了。但是确实是网上看到最全的一个。

问题解决:

网上查找了各种资料,实在是没办法从配置上解决这个问题。只好抛弃了配置方式,使用脚本的方式,达到了预期目的。

  1. 在Jenkins job中放弃了使用Git来下载源代码,因为即使配置了,也不能在当前工作区下载最新的源码。
  2. 构建触发器仍然选择Gerrit event。
    在这里插入图片描述
    在这里插入图片描述
  3. Gerrit trigger配置不变。

在这里插入图片描述
4.关键在构建脚本这里
在这里插入图片描述


```bash
#!/bin/bash
cd ${WORKSPACE}
rm -rf *
git init
#pull codes from gerrit
git pull ssh://jenkins@192.168.xxx.xx:29418/$GERRIT_PROJECT $GERRIT_REFSPEC

#do some test

if [ "x$?" == "x0" ] ; then   #成功则Verified +1
   ssh -x -p 29418 jenkins@192.168.xxx.xx gerrit review --project $GERRIT_PROJECT --verified 1 $GERRIT_PATCHSET_REVISION
else
    ssh -x -p 29418 jenkins@192.168.xxx.xx gerrit review --project $GERRIT_PROJECT --verified -1 $GERRIT_PATCHSET_REVISION
    #ssh -x -p $gerrit_port $user@$gerrit_addr gerrit review --project $GERRIT_PROJECT --code-review -2 $GERRIT_PATCHSET_REVISION
fi
解释:
$GERRIT_PROJECT  
$GERRIT_REFSPEC 
$GERRIT_PATCHSET_REVISION
这三个参数都是gerrit trigger plugin自带参数,$GERRIT_REFSPEC 指向最新提交的代码。

我这里只需要jenkins能够给通过build的代码加上Verfied +1 即可。

jenkins用户既是jenkins服务器linux用户(使用该用户启动jenkins服务),又是gerrit 的一个用户(配置在gerrit.config同目录下的用户配置问件passwords中)。jenkins用户的id_rsa.pub要配置到gerrit 用户的ssh中。

这种配置才能保证jenkins能够执行git pull命令下载代码到workspace中,又能保证jekins gerrit用户能够给review的代码打上Verified分。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐