2016-05-24 29 views
1

私はジェンキンスで実行するには、このGroovyのスクリプトを取得しようとしている:のGroovyスクリプト:依存関係の管理

import java.lang.ProcessBuilder.Redirect 
import hudson.model.* 
import hudson.util.* 
import hudson.scm.* 
//I'm not sure that these 2 imports are correct: 
import hudson.plugins.tfs.model.ChangeSet; 
import hudson.plugins.tfs.model.ChangeSet.Item; 

// work with current build 
def build = Thread.currentThread()?.executable 

// get ChangesSets with all changed items 
def changeSet= build.getChangeSet() 
List<Item> items = changeSet.getItems() 

def affectedFiles = items.collect { it.paths } 

// get file names 
def fileNames = affectedFiles.flatten().findResults 

// setup log files 
def stdOutFile = "${build.rootDir}\\stdout_groovy.txt" 
def stdErrFile = "${build.rootDir}\\stderr_groovy.txt" 

//execute a command for each file 
fileNames.each 
{ 
    def params = ["cmd.exe", "/C", "dir ${it}"] 
    def processBuilder = new ProcessBuilder(params) 

    // redirect stdout and stderr to log files 
    processBuilder.redirectOutput(new File(stdOutFile)) 
    processBuilder.redirectError(new File(stdErrFile)) 

    def process = processBuilder.start() 
    process.waitFor() 

    // print log files 
    println new File(stdOutFile).readLines() 
    System.err.println new File(stdErrFile).readLines() 
} 

私の目標は、変更されたファイルのみを反復処理することができ、それらのファイルをコピーすることです別の場所に移動します。私はProcess only changed filesのTFSで動作するコードのバージョンを作成しようとしています。私は2つのエラーを取得:クラスhudson.plugins.tfs.model.ChangeSet

を解決することができませんクラスhudson.plugins.tfs.model.ChangeSet.Item

を解決する

できないがGroovyのため、これは理にかなっていますTFSコードを取得する場所がわかりません。 私はhttps://wiki.jenkins-ci.org/display/JENKINS/Team+Foundation+Server+PluginにTFSプラグインを使用しています。私はGroovyが依存管理のためにGrapeを使用できることを読んだことがあります。 TFSプラグインがhttp://mvnrepository.com/にあったなら、私はGroovyのは、このようになります最新のコードを取得できるように、それを使用することができます。

@Grapes(
    @Grab(group='org.apache.maven.scm', module='maven-scm-provider-tfs', version='1.9.4') 
) 

しかし、TFSプラグインがhttp://mvnrepository.com/ではありません。プラグインのソースはhttps://github.com/jenkinsci/tfs-pluginです。では、どのようにしてGroovyにコードを取得するかを伝えることができますか?理想的には、プラグインコードをビルドマシンにコピーして最新の状態に保つ必要はありません。 (私は自分のコードに誤りがあると確信しています。ただ、依存性管理を試してみようとしています(ただし、コーディングエラーを指摘することは自由です)。ありがとう。

答えて

0

プラグインがインストールされている限り、jenkinsで動作するgroovyからプラグインクラスにアクセスできます。プラグインがインストールされていない可能性があります。

理想的には、プラグインコードをビルドマシンにコピーして、最新の状態に保つ必要はありません。

この場合、jenkinsにインストールされていないプラグインコードを使用しようとすると、実際にはわかりません。

+0

プラグインがインストールされています。たぶん私のインポートステートメントが間違っていますか? import hudson.plugins.tfs.model.ChangeSet; import hudson.plugins.tfs.model.ChangeSet.Item; –

+0

私はtfs apiをチェックして、これらのインポートが正しいように見えます。クラスパスの問題である必要があります。どのようにスクリプトを実行していますか?仕事から?システムのグルーヴィースクリプトとして実行していますか?スクリプトコンソールから実行しようとするとどうなりますか?スクリプトコンソールからテストするとき、この 'Jenkins.instance.getJob(" jobName ")のようなビルドを得ることができます。getBuild( "1") '、ここで、' getBuild'の数値パラメータはそのジョブの有効なビルド番号です。 – TheEllis

0

「Groovy」プラグインを使用してジョブ内でGroovyスクリプトを実行しています。

プレーンな "Groovy Script"は、ビルドが実行されるスレーブ上のforkされたJVMで実行されます。基本的には "groovy"コマンドを実行してスクリプトを渡すのと同じです。だから、あなたのようなクラスパスエントリを追加する必要があります。

groovy -cp <path-to-jars> script.groovy 

システムグルーヴィーなスクリプトは、ジェンキンスマスターのJVM内で実行されます。したがって、Jenkinsのすべての内部オブジェクトにアクセスできるため、これを使用してJenkinsの状態を変更することができます。 Jenkins Script Consoleの機能に似ています。

したがって、Jenkinsが知っているクラス(プラグイン)にアクセスするには、 "System Groovy Script"を選択する必要があります。