2017-09-19 1 views
3

dockerfile을 사용하는 jenkinsfile이 있습니다. docker 이미지에서 jenkins 작업 영역으로 파일을 복사하는 방법에 관심이 있습니다. 구체적으로 - 나는 jenkins 작업에 의해 게시하고 싶은 docker 이미지에 대한 HTML 보고서를 생성하고 있습니다.docker 이미지에서 jenkins 작업 영역으로 파일 복사

예를 들어, 도커 이미지의 /app/ 디렉토리에 test.html이라는 파일을 생성 한 경우 -이를 게시 할 수 있도록 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 

     } 
    } 
+0

젠킨스가 창조론을 다룰거야. 컨테이너 내부를 '안쪽'으로 닫는다. 'mkdir $ {env.WORKSPACE}/jenkinsOut && cp -r/app/$ {env.WORKSPACE}/'와 같이'/ app'에서'WORKSPACE'에 로컬로 파일을 복사하는 것이 쉬운 방법입니다. jenkinsOut ""컨테이너와 호스트간에 작업 공간이 공유되기 때문에. – mkobit

답변

0

고정 표시기의 CP [containerID] :/응용 프로그램/test.html를/경로/to_save /은/파일 docker cp으로

+0

작동하지 않는 것 같습니다 : 도커 exec -t 도커 이미지 : 18 cat /app/test.html Daemon의 오류 응답 : 해당 컨테이너 없음 : docker-image : 18 'sh'도커를 추가했습니다. exec - t $ {customImage.id} cat /app/test.html> test.html "customImage.inside 블록 바로 뒤에 있습니다. – cdm

+0

로컬로 작동하므로 내 대답이 바뀌 었습니다. – Sergiu

+0

Jenkins에서는 로컬로 작동하지만 동의하지 않는다고 동의합니다. 컨테이너의 ID를 올바르게 가져올 수는 있지만 컨테이너에 액세스 할 수없는 것처럼 보입니다. – cdm

1

파이프 라인에 대한 고정 표시기 플러그인에서 지원되지 않습니다, 그것을 할 수있는 두 가지 방법이 있습니다.

해결 방법 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 : (확인되지 ​​않음) 쉘에서를 사용하여 기존의 고정 표시기 명령

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 
""" 
관련 문제