2014-10-16 61 views
3

我们使用GitLab和Jenkins作为CI。每当合并请求被批准到master分支时,GitLab发送一个请求给Jenkins运行一个构建作业,一旦成功完成,将部署到tomcat。如何有条件地跳过Jenkins的CI测试,对于CI

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

在提交属性文件更新,html视图文件更新以及我们没有对这些文件进行任何测试时,有很多情况。

我知道在mvn clean install期间有一个跳过所有测试的开关,但如果提交仅包含css,js,properties,html等文件,是否有条件跳过测试?

谢谢!

+0

如何为css,js,html,properties'制作单独的模块? – khmarbaise 2014-10-16 21:51:20

+0

@khmarbaise,我们在同一个GitLab仓库的同一个“母亲”项目中有多个模块。对任何模块的任何更改都会触发Maven构建。 – Jason 2014-10-17 15:09:20

回答

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脚本的返回值。

2

如果您使用的是Jenkins GIT plugin,那么您可以在构建中引用当前和之前构建的最后提交的GIT_PREVIOUS_COMMIT和GIT_COMMIT变量。用git diff命令结合起来将所有修改过的文件的列表,因为以前的版本:使用的grep命令

git diff --name-only $GIT_PREVIOUS_COMMIT $GIT_COMMIT 

接下来,您可以检查是否有比你提到另外一个扩展的任何文件。如果是这样,你可以执行适当的Maven命令行。

+0

感谢您的回答。有没有一个环境变量不仅包含前面的提交,还包括合并请求中的所有提交? – Jason 2014-10-17 15:35:12

+0

@Jason你什么意思_ _“合并请求”_? _“request”_在[git-merge](http://www.git-scm.com/docs/git-merge)中没有提及。无论如何,[不,没有](https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin-Environmentvariables)。 – 2014-10-17 21:24:14

+0

@GeriBroser在GitLab中,在'git push origin'从开发分支提交了一些提交之后,开发人员可以向主提交一个“合并请求”。在审阅者批准合并请求后,GitLab将提交合并到主和平局Jenkins中以启动构建。 – Jason 2014-10-17 22:05:51