我们使用GitLab和Jenkins进行CI。每当合并请求被批准到master
分支时,GitLab就会向Jenkins发送一个请求来运行构建作业,该作业在成功完成后部署到tomcat。
构建作业从gitlab master
分支检出文件,使用clean install
构建项目,并保存工件。
在很多情况下,提交是属性文件更新,html视图文件更新,我们实际上没有对这些文件进行任何测试。
我知道在mvn clean install
期间有一个跳过所有测试的开关,但如果提交只包含css,js,properties,html等文件,有没有办法有条件地跳过测试。 p>
谢谢!
答案 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脚本的返回值。