[JAVA] Verwenden Sie Jenkins, um in Docker zu erstellen und dann ein Docker-Image zu erstellen.

Einführung

Ich habe mit Jenkins in einem Maven-Container gebaut. Wie auch immer, ich wollte auf einmal ein Docker-Image erstellen. Es dauerte länger als ich erwartet hatte.

Repository-Konfiguration

src
Dockerfile
Jenkinsfile
pom.xml

Die Quelle und die oben genannten Dateien werden im Git-Repository gespeichert.

Dockerfile

FROM tomcat:jdk14-openjdk

COPY target/*.war /usr/local/tomcat/webapps/ 

Die vom Build erstellte Kriegsdatei wird unter Webanwendungen gespeichert. Verwalten Sie im selben Repository wie Ihr Code.

Jenkinsfile

pipeline {
    agent any
    stages {
        stage('delete_workspace') {
            steps {
                 deleteDir()
            }
        }
        stage('build') {
            agent {
                docker {
                    label 'master'
                    image 'maven:3.6.3-openjdk-14'
                }
            }
            steps {
                // Run Maven on a Unix agent.
                sh "mvn clean package"
            }
            post {
                success { 
                archiveArtifacts 'target/*.war'          
                }
            }
        }
        stage('docker build') {
            agent { label 'master'}
            steps {
                sh 'docker build -t test-tomcat:0.1 .'
            }
            ////Beim Löschen nachträglich.
            //     post {
            //     always {
            //         deleteDir()
            //     }
            // }
        }
    }
}

Erstellt mit deklarativer Pipeline.

stage

Agentenspezifikation

pipeline {
    agent any
    stages {

Wenn kein Agent vorhanden ist, ist der Job fehlgeschlagen, daher wird er beschrieben.

delete_workspace

stage('delete_workspace') {
    steps {
         deleteDir()
    }
}

Es gibt ein Muster, um den Arbeitsbereich im Voraus zu löschen und immer nachträglich auszuführen. Wenn jedoch ein Fehler im Job auftritt, ist es schwierig, ihn persönlich zu isolieren, wenn er gelöscht wird. Daher ist es eine Gruppe, ihn vor dem Job auszuführen.

build

agent {
    docker {
        label 'master'
        image 'maven:3.6.3-openjdk-14'
    }
}

Der Maven-Container wird auf dem Masterknoten ausgeführt. Es dauerte eine Weile, bis mir klar wurde, dass sich die Knotenbezeichnung in dieser Position befand.

steps {
         // Run Maven on a Unix agent.
         sh "mvn clean package"
    }
    post {
        success { 
        archiveArtifacts 'target/*.war'
                             
        }
    }

Maven baut und speichert Artefakte.

docker build

    stage('docker build') {
        agent { label 'master'}
        steps {
            sh 'docker build -t test-tomcat:0.1 .'
        }
        ////Beim Löschen nachträglich.
        //     post {
        //     always {
        //         deleteDir()
        //     }
        // }
    }

Da ich Docker auf dem Master gestartet habe, geben Sie Agent als Master an. Da die im Maven-Container erstellten Artefakte und Docker-Dateien im Arbeitsbereich des Hosts gespeichert sind, Führen Sie Docker Build so aus, wie es ist.

Zusammenfassung

Ich wusste nicht, dass ein Gebäude ohne Container die Build-Ergebnisse im Host-Arbeitsbereich belassen würde. Die Erstellung hat lange gedauert. Ich fand auch, dass ich in Scripted Pipeline schreiben musste, um verschiedene Dinge mit Docker in Jenkins zu tun. Für Jenkins ist es einfacher, Ansible- oder Docker-Compose-Befehle aufzurufen, als hart mit Pipelines zu arbeiten. Ich hatte das Gefühl, dass es leicht zu pflegen war. Welches ist es eigentlich?

Verweise

https://www.jenkins.io/doc/book/pipeline/docker/

Recommended Posts

Verwenden Sie Jenkins, um in Docker zu erstellen und dann ein Docker-Image zu erstellen.
[Einführung in Docker] Erstellen Sie ein Docker-Image für maschinelles Lernen und verwenden Sie das Jupyter-Notizbuch
Ich habe versucht, mit Wercker ein Docker-Image zu erstellen und zu veröffentlichen, mit dem GlassFish 5 gestartet wird
[Splunk] Erstellen von Splunk Enterprise (mit Docker-Image)
Erstellen Sie ein Docker-Image für redoc-cli und registrieren Sie es auf Docker Hub
Docker Compact Manual (4: Erstellen eines benutzerdefinierten Bildes)
Shell-Skript, das ein Docker-Image erstellt und an ECR weiterleitet
[Docker] So erstellen Sie eine virtuelle Umgebung für Rails- und Nuxt.js-Apps
So erstellen Sie ein kleines Docker-Image der openjdk 11 (ea) -Anwendung (1 GB → 85 MB)
Testen, erstellen und verschieben Sie Docker-Images mithilfe von GitHub-Aktionen in die GitHub-Container-Registrierung
Erstellen Sie eine Entwicklungsumgebung, um Ruby on Jets + React-Apps mit Docker zu erstellen
Bereitstellen von einem lokalen Docker-Image auf Heroku
[Rails] [Docker] Kopieren und Einfügen ist in Ordnung! So erstellen Sie eine Rails-Entwicklungsumgebung mit Docker
So erstellen Sie eine Kopf- oder Fußzeile einmal und verwenden sie auf einer anderen Seite
Erstellen Sie einen Docker-Container, um EPS in eine PGF-Quelle zu konvertieren
Zeigen Sie ein Ladebild in JavaFX an und zeigen Sie dann ein anderes Bild an
So beenden Sie Docker für Mac und erstellen eine Docker-Entwicklungsumgebung mit Ubuntu + Vagrant
So erstellen Sie einen Jenkins-Server mit einem Docker-Container unter CentOS 7 von VirtualBox und greifen von einem lokalen PC auf den Jenkins-Server zu
Versuchen Sie, mit Docker eine Java-Entwicklungsumgebung zu erstellen
Wenn Sie eine Java-Anwendung in ein Docker-Image verwandeln möchten, ist es praktisch, Jib zu verwenden.
[Rails 6.0, Docker] Ich habe versucht, die Konstruktion der Docker-Umgebung und die zum Erstellen eines Portfolios erforderlichen Befehle zusammenzufassen
Vielleicht funktioniert es! Erstellen Sie ein Bild mit Docker und teilen Sie es!
So erstellen Sie ein leichtes Container-Image für Java-Apps
[Docker] Erstellen Sie eine Site mit Hugo und veröffentlichen Sie sie auf GitHub
Erstellen Sie ein Docker-Image mit installiertem Oracle JDK (yum
[Persönliche Notizen] So verschieben Sie ein Docker-Image in GitHub-Pakete
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Java lernen: Verwenden Sie Timer, um so etwas wie einen Bomben-Timer zu erstellen
So erstellen und starten Sie eine Docker-Datei für Payara Micro
[Enum_help] Verwenden Sie enum_help, um ein Auswahlfeld zu erstellen, das auf Japanisch angezeigt wird!
So erstellen Sie eine Methode
Erstellen Sie einen C-Compiler zur Verwendung mit Rust x CLion mit Docker
[Für diejenigen, die Portfolios erstellen] Verwendung von binding.pry mit Docker
Verwendung von StringBurrer und Arrays.toString.
Erstellen Sie mit Docker eine Vue3-Umgebung!
Erstellen Sie mit Docker eine Node.js-Umgebung
Vorbereiten der Erstellung einer Rails-Anwendung
Migrieren Sie das Docker-Image auf einen anderen Server
Wie man Gleichheit und Gleichheit benutzt (wie man Gleichheit benutzt)
So erstellen Sie ein Jenkins-Plug-In
Versuchen Sie, eine Server-Client-App zu erstellen
Fordern Sie die Installation von WSL2 und Docker heraus
So erstellen Sie CloudStack mit Docker
Lassen Sie uns Docker unter Windows 10 installieren und eine Überprüfungsumgebung für CentOS 8 erstellen!
Warten Sie, bis PostgreSQL mit Docker gestartet ist, und starten Sie dann den WEB-Dienst
Aktivieren Sie den Build-Cache von Docker in GitHub Action und stellen Sie ihn auf Amazon ECS bereit