将文件从Docker Image复制到Jenkins Workspace



我有一个使用dockerfile的jenkinsfile-并且对如何将文件从docker映像复制到jenkins workspace感兴趣。具体 - 我正在生成有关Docker图像的HTML报告,我想由Jenkins Job发表。

例如,如果我在Docker Image的/app/目录中生成一个名为test.html的文件 - 如何将其复制到Jenkins Workspace,以便我可以发布。

示例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
        }
    }

as docker插件中不支持docker cp,用于管道,有两种方法可以做到。

解决方案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:使用Shell中的传统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
"""

另一种选择是使用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'
        }
    }

最新更新