如何有条件地跳过詹金斯对CI的maven测试

时间:2014-10-16 21:29:25

标签: git maven testing jenkins continuous-integration

我们使用GitLab和Jenkins进行CI。每当合并请求被批准到master分支时,GitLab就会向Jenkins发送一个请求来运行构建作业,该作业在成功完成后部署到tomcat。

构建作业从gitlab master分支检出文件,使用clean install构建项目,并保存工件。

在很多情况下,提交是属性文件更新,html视图文件更新,我们实际上没有对这些文件进行任何测试。

我知道在mvn clean install期间有一个跳过所有测试的开关,但如果提交只包含css,js,properties,html等文件,有没有办法有条件地跳过测试。 p>

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您正在使用Jenkins GIT plugin,那么您可以使用GIT_PREVIOUS_COMMIT和GIT_COMMIT变量在内部版本中引用当前和之前构建的最后一次提交。将它与git diff命令结合使用,可以获得自上一次构建以来所有已修改文件的列表:

git diff --name-only $GIT_PREVIOUS_COMMIT $GIT_COMMIT

接下来,使用 grep 命令,您可以检查是否有任何文件包含您提及的其他扩展名。如果是这样,您可以执行适当的Maven命令行。

答案 1 :(得分:1)

关注@PiotrOktaba's answer(命令中的换行符以提高可读性):

~/git/test  (master)$ git diff --name-only $GIT_PREVIOUS_COMMIT $GIT_COMMIT
test.txt

~/git/test  (master)$ git diff --name-only $GIT_PREVIOUS_COMMIT $GIT_COMMIT |
    grep -vE '.*\.css|.*\.js|.*\.properties|.*\.html|.*\.txt' | wc -l
      0

提交→跳过测试中没有其他文件。

~/git/test  (master)$ git diff --name-only $GIT_PREVIOUS_COMMIT $GIT_COMMIT
test.java
test.txt

~/git/test  (master)$ git diff --name-only $GIT_PREVIOUS_COMMIT $GIT_COMMIT |
    grep -vE '.*\.css|.*\.js|.*\.properties|.*\.html|.*\.txt' | wc -l 
      1

与提供的文件不同的是提交→不要跳过测试。

在条件构建步骤中使用它,检查Bash脚本的返回值。