2015-12-10 82 views
7

使用多枝的工作流程,該命令檢查出來的樣子清潔與建立多枝流程

checkout scm 

我不能找到一種方法來告訴詹金斯執行乾淨結賬。 「乾淨」,我的意思是它應該刪除工作區中所有不受版本控制的文件。

+3

我不知道是否checkout''可以採取進一步的參數多分支我想有更優雅的解決方案,但如果你使用Git,你應該可以運行'sh'git clean -fdx'在「結賬」步驟之後。 –

回答

4

我不知道這是否回答了原來的問題或沒有(我不知道,如果意圖是要離開在工作區中的某些文件),但爲什麼不先刪除工作區,這將允許一個乾淨的檢出。

stage ('Clean') { 
    deleteDir() 
} 

stage ('Checkout') { 
    checkout scm 
} 
2

首先,您不能假定工作流作業有一個工作區,因爲它是自由式作業。實際上,工作流作業可以使用多個工作空間(每個nodews塊都有一個)。

說了,我要提出的是一種hacky:在結帳前修改scm對象以設置CleanCheckout擴展名(您必須在那裏批准一些調用)。

import hudson.plugins.git.extensions.impl.CleanCheckout 
scm.extensions.replace(new CleanCheckout()) 
checkout scm 

但我更喜歡克里斯托弗·奧爾的建議,使用後checkoutsh 'git clean -fdx')一個配件臺階。

+0

謝謝你。這兩個建議的問題是,它只適用於Git。 –

+0

大多數SCM實現都有等價物。例如,對於Subversion,你可以使用'scm.setWorkspaceUpdater(new UpdateWithCleanUpdater())' – amuniz

+0

我在哪裏可以找到關於這些東西的文檔? (我正在使用Hg。) –

-1

詹金斯目前包含一個頁面來生成groovy管道語法。選擇結帳步驟,您應該可以添加您習慣的所有其他選項。

我產生哪些應該做你想要什麼樣的情況如下:我遇到了同樣的問題,這裏是我的解決辦法

checkout poll: false, scm: [$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CleanBeforeCheckout']], submoduleCfg: [], userRemoteConfigs: [[url: 'ssh://repo/location.git']]] 
+1

此答案僅適用於普通管道作業,但不適用於多分支管道作業。 –

0

。 我爲結帳創建了一個新的scm對象,並使用CleanBeforeCheckout擴展了擴展。但我保持其他配置像分支和userRemoteConfigs。

checkout([ 
    $class: 'GitSCM', 
    branches: scm.branches, 
    extensions: scm.extensions + [[$class: 'CleanBeforeCheckout']], 
    userRemoteConfigs: scm.userRemoteConfigs 
]) 

它仍然不是完美的,因爲你必須reate一個新的對象:(