web-dev-qa-db-fra.com

Copier le fichier de l'image du menu fixe vers l'espace de travail Jenkins

J'ai un fichier jenkins qui utilise un fichier docker - et je suis intéressé par la façon dont je peux copier un fichier de l'image du menu fixe vers l'espace de travail jenkins. Plus précisément, je génère un rapport HTML sur l'image du menu fixe que j'aimerais que le travail de Jenkins publie.

Par exemple, si je génère un fichier appelé test.html dans le répertoire /app/ de l'image du menu fixe, comment le copier dans l'espace de travail jenkins afin de pouvoir le publier. 

Exemple Jenkinsfile ci-dessous:

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

        }
    }
6
cdm

Comme docker cp n'est pas pris en charge dans docker plugin for pipeline, il existe deux façons de le faire.

Solution 1: mappage de volume -v au démarrage de l'instance

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

voir complet Jenkinsfile

Solution 2: Utiliser la commande traditionnelle du menu fixe dans Shell (non vérifié).

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
"""
2
Larry Cai

docker cp [conteneurID]:/app/test.html/chemin/to_save/le/fichier

0
Sergiu

Une autre alternative consiste à lier le dossier de l'espace de travail au conteneur à l'aide de l'option de volume de menu fixe (-v /path/build:/app/build).

Exemple:

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'
        }
    }
0
Datageek