前回のビルドの成果物を取得したいことがたまにあるので調べた。

result.txtをarchiveしているとして考える

ArtifactManagerを使う場合

https://javadoc.jenkins.io/hudson/model/Run.html?is-external=true#getArtifactManager()

Run.getArtifactManager().root().child("relativepath/to/file")VirtualFile が取得できる

    script {
        def build = currentBuild.previousBuild.rawBuild
        def am = build.artifactManager
        def virtualFile = am.root().child('result.txt')
        println virtualFile
    }

shell内でファイルを使いたい場合

https://javadoc.jenkins.io/hudson/model/Run.html?is-external=true#getRootDir()

Run.getRootDir() でビルドディレクトリを java.io.File として取得できる あとはgetAbsolutePathで絶対パスを取得するなどする

    script {
        def prevBuild = currentBuild.previousBuild
        def prevBuildPath = prevBuild.rawBuild.rootDir.absolutePath
        
        withEnv(["PREV_BUILD=${prevBuildPath}"]) {
            sh '''
            echo '----prev ${prevBuildPath}----'
            cat ${PREV_BUILD}/archive/result.txt
            '''
        }

    }