web-dev-qa-db-ja.com

Dockerイメージからjenkinsワークスペースにファイルをコピーします

Dockerfileを使用するjenkinsfileがあります-dockerイメージからjenkinsワークスペースにファイルをコピーする方法に興味があります。具体的には、ジェンキンスの仕事で公開したいドッカー画像に関するHTMLレポートを生成しています。

たとえば、Dockerイメージのtest.htmlディレクトリに/app/というファイルを生成する場合、それをjenkinsワークスペースにコピーして公開するにはどうすればよいですか。

以下のサンプルJenkinsfile

node ('ondemand') {
    try {
        stage "build"
        checkout scm
        def customImage = docker.build("docker-image:${env.BUILD_ID}", "-f ./docker-image/Dockerfile .")

        stage "test copying files"
        customImage.inside('-u root') {
            sh 'touch /app/test.html && ls' // can see that test.html is generated

        }
    }
13
cdm

なので docker cpは、パイプラインのdockerプラグインではサポートされていません。2つの方法があります。

ソリューション1:ボリュームマッピング-vインスタンスを開始するとき

customImage.inside('-v $WORKSPACE:/output -u root') {
    sh 'touch /app/test.html && ls' // can see that test.html is generated
}
archiveArtifacts artifacts: '*.html'

完全を参照してください Jenkinsfile

解決策2:シェルで従来のdockerコマンドを使用(検証なし)

sh """
docker run --name sample -d -u root docker-image:${env.BUILD_ID} 'touch /app/test.html'
docker cp sample:/app/test.html .
docker rm -f sample
"""
4
Larry Cai

もう1つの方法は、Dockerボリュームオプション(-v /path/build:/app/build

例:

node ('ondemand') {
    try {
        stage "build"
        checkout scm
        def customImage = docker.build("docker-image:${env.BUILD_ID}", "-f ./docker-image/Dockerfile .")

        stage "test copying files"
        customImage.inside('-u root -v /path/build:/app/build') {
            sh 'touch /app/build/test.html'
        }
    }
1
Datageek

docker cp [コンテナID]:/ app/test.html/path/to_save/the/file

0
Sergiu