2016-07-21 4 views
0

Ich bin neu mit Jenkins und Docker und habe ein neues Multi-Branch-Pipeline-Projekt erstellt, um unabhängig von unserer Buildserver-Konfiguration zu sein. Meine Anwendung enthält eine Jenkins-Datei mit mehreren Stufen und zwei Docker-Images. Eines ist das offizielle Mongo-Bild von dockerhub. Das andere Docker-Bild wird von mir selbst erstellt und enthält maven und mercurial. Dockerfile:Multi-Branch Pipeline Projekt mit Jenkinsfile und Docker Best Practice

FROM maven:3.3.9-jdk-8 
RUN apt-get update && apt-get install -y -q mercurial 

Ich benutze dies mein Projekt in Phase zur Kasse und es in der zweiten Phase mit Maven zu bauen.

Mein Jenkinsfile sieht wie folgt aus:

node { 

    //... 

    //CREATE A MONGO DOCKER IMAGE 
    def dockerMongoImage = docker.image("mongo"); 

    // getting our maven container 
    def maven = docker.build('my:docker', '../workspace') 

    dockerMongoImage.withRun{ mongo -> 
     maven.inside("--link=${mongo.id}:mongo") { 
      stage "checkout branch '${env.BRANCH_NAME}'" 

       def cloneUrl = createScmCloneUrl("https", scmUser, scmPassword, scmHref) 
       sh "hg clone ${cloneUrl} -r ${env.BRANCH_NAME} ${workingDir} --insecure" 

      stage "build - running clean install" 
       runMvn(workingDir, mvnSettingsLocation, "clean install -U -V -DskipTests=true -X") 

      // AND SO ON 

Die gesamte Konfiguration funktioniert gut, aber ich bin nicht so glücklich mit der Kasse im Innern des Behälters. Meine Frage ist, gibt es eine bessere Lösung als die Kasse innerhalb des Containers zu tun. Dies würde einige Probleme mit DNS verhindern, denen ich begegnete. Gibt es jemanden, der etwas Erfahrung damit hat und mir sagen kann, was Best Practices sind? Ich habe viele Male durch Google gesucht, aber dafür keine schöne Lösung gefunden. Danke für jede Hilfe.

Antwort

0

Schauen Sie sich den Code auf dem Knoten zuerst, und dann montieren Sie den Ordner in dem Docker Behälter mit -v

(-v, --volume = [host-src:] Container-dest [: ]: Bind mount a volume.)

stage "checkout branch '${env.BRANCH_NAME}'" 
def cloneUrl = createScmCloneUrl("https", scmUser, scmPassword, scmHref) 
sh "hg clone ${cloneUrl} -r ${env.BRANCH_NAME} ${workingDir} --insecure" 

stage "build - running clean install" 
dockerMongoImage.withRun{ mongo -> 
    maven.inside("--link=${mongo.id}:mongo -v ${workingDir}:/source") { 
     runMvn("/source", mvnSettingsLocation, "clean install -U -V -DskipTests=true -X") 
    } 
}