[JAVA] Utilisez Jenkins pour créer dans Docker, puis créez une image Docker.

introduction

Je construisais à l'intérieur d'un conteneur Maven en utilisant Jenkins. Quoi qu'il en soit, je voulais créer une image Docker en une seule fois. Cela a pris plus de temps que prévu.

Configuration du référentiel

src
Dockerfile
Jenkinsfile
pom.xml

La source et les fichiers ci-dessus sont stockés dans le référentiel git.

Dockerfile

FROM tomcat:jdk14-openjdk

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

Le fichier war créé par la construction est stocké sous des applications Web. Gérez dans le même référentiel que votre 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 .'
            }
            ////Lors de la suppression après coup.
            //     post {
            //     always {
            //         deleteDir()
            //     }
            // }
        }
    }
}

Créé avec Declarative Pipeline.

stage

Spécification de l'agent

pipeline {
    agent any
    stages {

S'il n'y a aucun agent, le travail a échoué, il est donc décrit.

delete_workspace

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

Il existe un modèle pour supprimer l'espace de travail à l'avance et toujours le faire après coup, mais lorsqu'une erreur se produit dans le travail, il est difficile de l'isoler personnellement s'il est supprimé, c'est donc un groupe pour le faire avant le travail.

build

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

Le conteneur maven s'exécute sur le nœud maître. Il m'a fallu un certain temps pour réaliser que la désignation du nœud était dans cette position.

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

maven construit et enregistre les artefacts.

docker build

    stage('docker build') {
        agent { label 'master'}
        steps {
            sh 'docker build -t test-tomcat:0.1 .'
        }
        ////Lors de la suppression après coup.
        //     post {
        //     always {
        //         deleteDir()
        //     }
        // }
    }

Depuis que j'ai commencé docker sur le maître, spécifiez l'agent comme maître. Étant donné que les artefacts créés avec le conteneur maven et le Dockerfile sont stockés sous l'espace de travail de l'hôte, Exécutez la version de docker telle quelle.

Résumé

Je ne savais pas que la construction sans conteneur laisserait les résultats de la construction dans l'espace de travail hôte, Il a fallu beaucoup de temps pour créer. J'ai également constaté que je devais écrire dans Scripted Pipeline pour faire diverses choses avec docker dans jenkins. En ce qui concerne jenkins, il est plus simple d'appeler des commandes Ansible ou docker-compose que de travailler dur avec des pipelines. J'ai senti que c'était facile à entretenir. Lequel est-ce en fait?

Les références

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

Recommended Posts

Utilisez Jenkins pour créer dans Docker, puis créez une image Docker.
[Introduction à Docker] Créer une image Docker pour l'apprentissage automatique et utiliser le notebook Jupyter
J'ai essayé d'utiliser Wercker pour créer et publier une image Docker qui lance GlassFish 5
[Splunk] Création de Splunk Enterprise (à l'aide de l'image Docker)
Créez une image Docker pour redoc-cli et enregistrez-la sur Docker Hub
Manuel Docker Compact (4: Créer une image personnalisée)
Script Shell qui construit une image Docker et la pousse vers ECR
[Docker] Comment créer un environnement virtuel pour les applications Rails et Nuxt.js
Comment créer une petite image docker de l'application openjdk 11 (EA) (1 Go → 85 Mo)
Tester, créer et pousser des images Docker vers GitHub Container Registry à l'aide d'actions GitHub
Créez un environnement de développement pour créer des applications Ruby on Jets + React avec Docker
Comment déployer à partir d'une image Docker locale vers Heroku
[Rails] [Docker] Le copier-coller est OK! Comment créer un environnement de développement Rails avec Docker
Comment créer un en-tête ou un pied de page une fois et l'utiliser sur une autre page
Créer un conteneur Docker pour convertir EPS en source PGF
Afficher une image de chargement dans JavaFX puis afficher une autre image
Comment quitter Docker pour Mac et créer un environnement de développement Docker avec Ubuntu + Vagrant
Comment créer un serveur Jenkins avec un conteneur Docker sur CentOS 7 de VirtualBox et accéder au serveur Jenkins à partir d'un PC local
Essayez de créer un environnement de développement Java à l'aide de Docker
Si vous souhaitez transformer une application Java en une image Docker, il est pratique d'utiliser jib.
[Rails 6.0, Docker] J'ai essayé de résumer la construction de l'environnement Docker et les commandes nécessaires pour créer un portfolio
Peut-être que ça marche! Créez une image avec Docker et partagez-la!
Comment créer une image de conteneur légère pour les applications Java
[Docker] Créez un site avec Hugo et publiez-le sur GitHub
Créez une image Docker avec le JDK Oracle installé (miam
[Notes personnelles] Comment pousser une image Docker vers des packages GitHub
J'ai essayé de créer un environnement de développement padrino avec Docker
Étudiez Java: utilisez Timer pour créer quelque chose comme un minuteur de bombe
Comment créer et lancer un Dockerfile pour Payara Micro
[Enum_help] Utilisez enum_help pour créer une boîte de sélection affichée en japonais!
Comment créer une méthode
Créer un compilateur C à utiliser avec Rust x CLion avec Docker
[Pour ceux qui créent des portefeuilles] Comment utiliser binding.pry avec Docker
Comment utiliser StringBurrer et Arrays.toString.
Créez un environnement Vue3 avec Docker!
Créer un environnement Node.js avec Docker
Préparation à la création de l'application Rails
Migrer l'image Docker vers un autre serveur
Comment utiliser l'égalité et l'égalité (comment utiliser l'égalité)
Comment créer un plug-in Jenkins
Essayez de créer une application client serveur
Défi pour installer WSL2 et docker
Comment créer CloudStack à l'aide de Docker
Installons Docker sur Windows 10 et créons un environnement de vérification pour CentOS 8!
Attendez que PostgreSQL démarre avec Docker, puis démarrez le service WEB
Activer le cache de construction de Docker dans GitHub Action et déployer sur Amazon ECS