JenkinsパイプラインスクリプトをGroovy言語で準備しています。すべてのファイルとフォルダを別の場所に移動したいのですが。 GroovyはJavaをサポートしているため、以下のJavaコードを使用して操作を実行しました。
パイプライン{エージェント
stages{
stage('Organise Files'){
steps{
script{
File sourceFolder = new File("C:\\My-Source");
File destinationFolder = new File("C:\\My-Destination");
File[] listOfFiles = sourceFolder.listFiles();
echo "Files Total: " + listOfFiles.length;
for (File file : listOfFiles) {
if (file.isFile()) {
echo file.getName()
Files.copy(Paths.get(file.path), Paths.get("C:\\My-Destination"));
}
}
}
}
}
}
}
このコードは、次の例外をスローします。
groovy.lang.MissingPropertyException:そのようなプロパティはありません:クラスのファイル:WorkflowScript
以下のコードも試してみましたが、うまくいきません。
FileUtils.copyFile(file.path, "C:\\My-Destination");
最後に、Java I/O Streamを使用して操作を実行しましたが、コードは次のとおりです。
def srcStream = new File("C:\\My-Source\\**\\*").newDataInputStream()
def dstStream = new File("C:\\My-Destination").newDataOutputStream()
dstStream << srcStream
srcStream.close()
dstStream.close()
ただし、どちらも機能せず、以下の例外がスローされます。
Java.io.FileNotFoundException:C:\ My-Source(アクセスが拒否されました)
誰かが問題を解決する方法を私に提案できますか?また、コピーまたは移動した後、ソースの場所からファイルを削除する方法を教えてください?さらに、コピー中に、ワイルドカードを使用して一部のフォルダとファイルをフィルタリングできますか?それも教えてください。
プレーンなJava/Groovyを使用してこれらのI/O関数を実行しないでください。これを実行しても、ビルドエージェントではなく、常にマスターで実行されます。これにも パイプラインステップ を使用します。次に例を示します。
bat("xcopy C:\\My-Source C:\\My-Destination /O /X /E /H /K")
または File Operations Plugin を使用します
fileOperations([fileCopyOperation(
excludes: '',
flattenFiles: false,
includes: 'C:\\My-Source\\**',
targetLocation: "C:\\My-Destination"
)]).
私の例では、Windowsパスの正しい構文に達していないと思いますが、要点を理解していただければ幸いです。