web-dev-qa-db-ja.com

マルチブランチワークフローによるクリーンビルド

マルチブランチワークフローを使用すると、チェックアウトするコマンドは次のようになります。

checkout scm

Jenkinsにクリーンチェックアウトを実行するように指示する方法が見つかりません。 「クリーン」とは、バージョン管理されていないすべてのファイルをワークスペースから削除する必要があることを意味します。

14
Chris Jones

これが元の質問に答えるかどうかはわかりませんが(ワークスペースにいくつかのファイルを残すつもりかどうかはわかりませんでした)、最初にワークスペースを削除しないのはなぜですか?これにより、クリーンなチェックアウトが可能になります:

stage ('Clean') {
    deleteDir()
}

stage ('Checkout') {
    checkout scm 
}
13
Brad Albright

私は同じ問題に遭遇し、これが私の回避策です。チェックアウト用に新しいscmオブジェクトを作成し、CleanBeforeCheckoutを使用して拡張機能を拡張しました。しかし、私はブランチやuserRemoteConfigsのような他の構成を維持しました。

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

新しいオブジェクトを作成する必要があるため、まだ完全ではありません:(

7
hEngi

まず、フリースタイルジョブの場合のように、ワークフロージョブにワークスペースがあると想定することはできません。実際、ワークフロージョブは複数のワークスペースを使用できます(nodeまたはwsブロックごとに1つ)。

とはいえ、私が提案するのは一種のハッキーです。チェックアウトの前にscmオブジェクトを変更して、CleanCheckout拡張機能を設定します(そこでいくつかの呼び出しを承認する必要があります)。

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

しかし、私はクリストファー・オアの提案を好みます。checkoutsh 'git clean -fdx')の後にシェルステップを使用します。

2
amuniz

workflow behavior

ソースを構成するときに動作を追加できます。 clean before checkoutclean after checkoutおよびWipe out repository and force clone。これにより、宣言型/スクリプト化されたパイプラインにロジックを追加する必要がなくなります。

0