web-dev-qa-db-ja.com

JenkinsパイプラインとDocker-コンテナからファイルをアーカイブする方法

Jenkins Pipeline Docs によると、Dockerで作業しているときにパイプラインステップを使用できるはずです。ただし、「archiveArtifacts」は機能していないようです。

    def container = docker.image("some_image")
    container.inside {
        sh 'date > /tmp/test.txt'
        sh 'cat /tmp/test.txt' //works, shows file

        def fileContents = readFile '/tmp/test.txt' //works
        echo "Contents: ${fileContents}" //works, shows file

        archiveArtifacts '/tmp/*.txt' //FAILS
    }

"[〜#〜] error [〜#〜]:ファイルパターン" /tmp/*.txt "に一致するアーティファクトが見つかりませんでした。構成エラー? "。

私が試したこと:

  • これがファイル同期の問題である場合に備えて、アーカイブ手順の前にsyncとsleep(5)を追加します。
  • ホストで実行されている場合に備えて、「/ *」と「*」をアーカイブしようとしています(同じエラー)。

Dockerコンテナで生成されたファイルのアーカイブに関する提案はありますか?

PS: バグレポート ...を開きました。archiveArtifactsは、Dockerコンテナー内の$ WORKSPACE内のファイルでのみ機能するようです。

7
Akom

同じJiraチケット で報告されている解決策を見つけたようですので、ここに投稿します。

これは正常に機能します:

def image = docker.image("Alpine")
 image.inside { 
   sh 'date > /tmp/test.txt'
   sh "cp /tmp/test.txt ${WORKSPACE}"
   archiveArtifacts 'test.txt'
 }
1
rath