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
}
}
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
"""
docker cp [conteneurID]:/app/test.html/chemin/to_save/le/fichier
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'
}
}