2
votes

Exécution de commandes dans le conteneur Docker créé à l'aide de Dockerfile dans Jenkinsfile

J'ai créé un fichier de pipeline Jenkins et créé un fichier Jenkins. Dans Jenkinsfile, j'ai utilisé l'agent Dockerfile, puis j'ai exécuté quelques étapes. Les étapes sont censées s'exécuter à l'intérieur du docker, mais elles s'exécutent sur l'hôte. Hers le code.

#!/usr/bin/env groovy
@Library(['abc-jenkins','xyz-jenkins-library']) _
pipeline {
agent {
    dockerfile{
        dir 'TEST'
        filename 'dockerfile'
        label 'docker'
    }
}
stages {
    stage('Build Stage') {
        steps {
            echo 'testing stage running'
            sh "ls"
        }
    }
}   
}


0 commentaires

3 Réponses :


0
votes

Vous devez écrire l'étape de création de l'agent entre les crochets des étapes:

stages {
    stage('Build Stage') {
        agent {
           dockerfile{
           dir 'TEST'
           filename 'dockerfile'
           label 'docker'
        }
        steps {
           echo 'testing stage running'
           sh "ls"
       }
}


0 commentaires

1
votes

Vous pouvez utiliser -> docker.image ('image'). inside {..}

stage('BuildInside') {
         docker.image('ubuntu1804').withRun('-d=true -p 8888:8080') {c ->
            docker.image('ubuntu1804').inside{
               /*  Do something here inside container  */
               sh "ls"
            }
        }
  }


0 commentaires

4
votes

Vous l'avez mal compris en fonction de la sortie de ls .

Pour le docker DSL du pipeline Jenkins, il montera l'espace de travail du travail jenkins sur le conteneur du docker et changera le docker WORKDIR en l'espace de travail du travail jenkins.

Par conséquent, lorsque vous exécutez ls à l'intérieur du conteneur, il imprimera les fichiers et le fodler sous votre espace de travail jenkins.

Vous pouvez essayer un autre dossier cmd ou ls qui n'existe pas dans l'hôte pour approuver qu'il soit réellement exécuté dans le conteneur plutôt que dans l'hôte.


1 commentaires

C'est presque certainement la source du malentendu sur ce qui se passe.