web-dev-qa-db-ja.com

ファイルを別の宛先にコピーまたは移動するJenkinsパイプラインスクリプト

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(アクセスが拒否されました)

誰かが問題を解決する方法を私に提案できますか?また、コピーまたは移動した後、ソースの場所からファイルを削除する方法を教えてください?さらに、コピー中に、ワイルドカードを使用して一部のフォルダとファイルをフィルタリングできますか?それも教えてください。

3
mnu-nasir

プレーンな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パスの正しい構文に達していないと思いますが、要点を理解していただければ幸いです。

7
StephenKing