2014-10-16 97 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