DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»DevOps Zone»Spinnaker rencontre Minikube : partie 2
    DevOps Zone

    Spinnaker rencontre Minikube : partie 2

    octobre 28, 2021
    Spinnaker rencontre Minikube : partie 2
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    introduction

    Dans l’article précédent, nous avons installé Spinnaker sur un cluster Minikube fonctionnant sous Windows 10. Dans cet article, nous ajouterons GitHub en tant que fournisseur de données pour un pipeline Spinnaker afin de déployer en continu un microservice Spring Boot dockerisé sur le cluster Minikube. Le pipeline sera déclenché à l’aide d’une tâche Cron et peut être modélisé de sorte que tous ses micro-services soient automatiquement déployés pour disposer d’un environnement de développement local entièrement à jour à tout moment.

    Conditions

    Une compréhension de Spring Boot, Github et Docker Hub est présumée. Cependant, des instructions de secours seront données pour ceux qui souhaitent suivre une piste plus légère qui extrait l’image Docker du registre de l’auteur. Cependant, certaines choses comme une liaison d’artefact appropriée peuvent ne pas fonctionner comme prévu si le guide complet n’est pas suivi.

    Spring Boot : l’objet d’affection

    Cette étape est facultative pour ceux sur la voie légère car le code est disponible sur jrb-s2c-github/spinnaker_tryout (branche google-jib-maven-plugin) et l’image docker résultante peut être extraite directement du registre DockerHub.

    La première étape consiste à créer un microservice Spring Boot qui doit être archivé dans un référentiel Github.

    Le contrôleur utilisé pour cet affichage est le suivant :

    package s2c.hello_svc;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    
    @RestController
    public class HelloController {
    
        @RequestMapping("https://dzone.com/")
        public String index() {
            return "Greetings from " + name;
        }
    
        private String name = "Minikube";
    
    }

    Avec le Maven pom.xml :

    <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>hello-svc</artifactId>
        <groupId>s2c.spinnaker.tryout</groupId>
        <version>1.0.18</version>
        <packaging>jar</packaging>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.4.0</version>
        </parent>
    
        <name>S2C Spinnaker Tryout :: Hello Service</name>
    
        <description>
            Spring Boot application with a single REST endpoint using JIB.
        </description>
    
        <properties>
            <jkube.version>1.0.2</jkube.version>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <jkube.build.strategy>jib</jkube.build.strategy>
        </properties>
    
        <distributionManagement>
            <snapshotRepository>
                <id>sonatype-nexus-snapshots</id>
                <name>Sonatype Nexus Snapshots</name>
                <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
            </snapshotRepository>
            <repository>
                <id>sonatype-nexus-staging</id>
                <name>Nexus Release Repository</name>
                <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
            </repository>
        </distributionManagement>
    
        <dependencies>
    
            <!-- Boot generator  -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.jolokia</groupId>
                <artifactId>jolokia-core</artifactId>
            </dependency>
            <!-- API, java.xml.bind module -->
            <dependency>
                <groupId>jakarta.xml.bind</groupId>
                <artifactId>jakarta.xml.bind-api</artifactId>
                <version>2.3.2</version>
            </dependency>
    
            <!-- Runtime, com.sun.xml.bind module -->
            <dependency>
                <groupId>org.glassfish.jaxb</groupId>
                <artifactId>jaxb-runtime</artifactId>
                <version>2.3.2</version>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
    
                <plugin>
                    <groupId>com.google.cloud.tools</groupId>
                    <artifactId>jib-maven-plugin</artifactId>
                    <version>3.1.4</version>
                    <configuration>
                        <from>
                            <image>openjdk:11-jdk-slim</image>
                        </from>
                        <to>
                            <image>docker.io/rbuhrmann/hello-svc</image>
                        </to>
                    </configuration>
                </plugin>
    
            </plugins>
        </build>
    
    </project>

    L’authentification pour le hub Docker doit être ajoutée à la section serveur du fichier settings.xml de Maven si l’on souhaite pousser vers le hub Docker à partir de la ligne de commande :

    <servers>
      <server>
        <id>registry-1.docker.io</id>
        <username>rbuhrmann</username>
        <password>${PASSWORD}</password>
      </server>
    </servers>

    Le jib-maven-plugin de Google peut ensuite être utilisé pour pousser vers le hub Docker à l’aide de Maven :

    mvn jib: build

    Github : le créateur

    Cette rubrique est facultative. La commande maven ci-dessus peut être utilisée pour une intégration continue au registre Docker.

    Enregistrez votre projet Spring Boot sur le compte Github. On peut également bifurquer le projet de l’auteur à partir de https://github.com/jrb-s2c-github/spinnaker_tryout, en utilisant la branche « google-jib-maven-plugin ».

    L’intégration continue est à mettre en œuvre à l’aide d’une action Github :

    # This workflow will build a Java project with Maven
    # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
    
    name: Java CI with Maven
    
    on:
      push:
        branches: [ google-jib-maven-plugin, main ]
      pull_request:
        branches: [ google-jib-maven-plugin, main ]
    
    jobs:
      build:
    
        runs-on: ubuntu-latest
    
        steps:
        - uses: actions/checkout@v2
        - name: Set up JDK 11
          uses: actions/setup-java@v2
          with:
            java-version: '11'
            distribution: 'adopt'
        - name: Build with Maven
          run: mvn -B clean compile jib:build -Djib.to.image=rbuhrmann/hello-svc:$GITHUB_SHA -Djib.to.auth.username=${{ secrets.DOCKER_USER }} -Djib.to.auth.password=${{ secrets.DOCKER_PWD }} --file hello_svc/pom.xml

    1. Le dernier identifiant de validation GIT est utilisé comme balise pour l’image Docker. De cette façon, on peut toujours tracer quel commit a été poussé dans un cluster Kubernetes. L’auteur est d’avis que l’on devrait être capable de traiter chaque build comme une release candidate.
    2. Les informations d’identification Docker sont ajoutées à partir du magasin secret GitHub.

    Il est maintenant temps de configurer Github en tant que fournisseur de données pour Spinnaker.

    Github en tant que fournisseur pour Spinnaker

    Cette étape est facultative. Le fichier manifeste peut également être copié dans l’interface utilisateur Spinnaker au lieu de le retirer de Github. Voir plus bas pour en savoir plus à ce sujet.

    Spinnaker récupérera le fichier manifeste Kubernetes à partir de Github. En tant que tel, le Github doit être configuré en tant que fournisseur d’artefacts pour Github :

    hal config artifact github account add jrb-s2c-github --token $TOKEN

    Le jeton Github peut être créé ici et doit avoir la portée du dépôt.

    Une fois le compte Github enregistré, Github doit être activé :

    hal config artifact github enable

    Il est temps de ‘hal deploy apply’ :

    Étant donné que Spinnaker extraira l’artefact de déploiement de DockerHub, il nécessite des instructions d’un fichier manifeste Kubernetes sur la façon de procéder.

    Donner un moteur à Spinnaker

    Créez le déploiement Kubernetes et les descriptions de service pour votre projet Spring Boot :

    kubectl create deployment hello-svc --image  rbuhrmann/hello-svc -o yaml --dry-run=true > deployment.yaml

    kubectl create service nodeport hello-svc  --tcp 9090:8080 -o yaml --dry-run=true> service.yaml

    Le microservice sera ouvert pour un accès extérieur en tant que NodePort.

    Combinez les deux fichiers en un seul :

    ---
    apiVersion: v1
    kind: List
    items:
      - apiVersion: v1
        kind: Service
        metadata:
          creationTimestamp: null
          labels:
            app: hello-svc
          name: hello-svc
        spec:
          ports:
            - name: 9090-8080
              port: 9090
              protocol: TCP
              targetPort: 8080
          selector:
            app: hello-svc
          type: NodePort
        status:
          loadBalancer: {}
      - apiVersion: apps/v1
        kind: Deployment
        metadata:
          creationTimestamp: null
          labels:
            app: hello-svc
          name: hello-svc
        spec:
          replicas: 1
          selector:
            matchLabels:
              app: hello-svc
          strategy: { }
          template:
            metadata:
              creationTimestamp: null
              labels:
                app: hello-svc
            spec:
              containers:
                - image: rbuhrmann/hello-svc
                  name: hello-svc
                  resources: { }
        status: { }

    Ce fichier peut être validé dans GitHub pour que Spinnaker soit déployé à partir de celui-ci ou il peut être copié directement dans votre premier pipeline Spinnaker. Dans tous les cas, il servira de moteur au premier pipeline de déploiement.

    Le premier pipeline

    Créez une nouvelle application Spinnaker comme décrit dans l’article précédent, puis cliquez sur « Pipeline » dans la navigation de gauche :

    Cliquez sur Pipeline

    Cliquez sur « configurer un nouveau pipeline » :

    Cliquer sur "configurer un nouveau pipeline":

    Donnez un nom au pipeline et cliquez sur Créer :

    Donnez un nom au pipeline et cliquez sur Créer :

    Le déclencheur

    L’éditeur de pipeline s’ouvrira. Cliquez sur « Ajouter un déclencheur » :

    Cliquer sur "Ajouter un déclencheur":

    Sélectionnez Cron comme type de déclencheur :

    Sélectionnez Cron comme type de déclencheur

    Configurez la tâche Cron pour déclencher le pipeline toutes les deux minutes :

    Configurez la tâche Cron pour déclencher le pipeline toutes les deux minutes :

    Le premier stade

    Cette étape est facultative.

    Ajoutez une étape de type « Evaluate Expression » et appelez-la « Evaluate Variables » :

    Ajouter une étape de type "Évaluer l'expression" et appelez-le « Évaluer les variables » :

    Définissez le jeton d’autorisation Github sur une variable nommée « github_token » à l’aide de Spring Expression Language. Ce n’est pas obligatoire mais augmente le Github limite de débit donc on peut utiliser ce pipeline comme modèle avoir toujours le dernier ensemble de micro-services en cours d’exécution sur son environnement de développement local.

    Nom de la variable : github_token

    Spinnaker est maintenant prêt à récupérer la balise de la dernière image déployée dans le registre Docker.

    La deuxième étape

    Cette étape est facultative.

    Ajoutez une deuxième étape de type Webhook :

    Ajoutez une deuxième étape de type Webhook :

    Un peu de travail est nécessaire pour configurer ce webhook vers l’extérieur pour extraire en dernier l’identifiant de validation GIT de Github à l’aide de son API Rest :

    1. Laissez le nom de scène comme Webhook
    2. Faites-le exécuter après l’étape appelée « Évaluer les variables »
    3. Le reste de l’appel à Github pour la configuration de l’auteur est https://api.github.com/repos/jrb-s2c-github/spinnaker_tryout/commits/google-jib-maven-plugin. Cela variera en fonction du compte Github (jrb-s2c-github), du dépôt (spinnaker_tryout) et du nom de la branche (google-jib-maven-plugin). Soyez prêt à lire le guide sur Spinnaker SPEL et à expérimenter un peu pour obtenir le bon appel.
    4. L’appel de repos doit être de type GET.
    5. Ajoutez un en-tête nommé « Accepter » avec la valeur « application/vnd.github.VERSION.sha ». L’URL de repos renvoie beaucoup de choses, mais cet en-tête oblige Github à ne renvoyer que l’ID de validation.
    6. Ajoutez un en-tête nommé « Authorization » et définissez-le sur ${github_token}. Cette expression SPEL sera évaluée par rapport à la variable nommée « github_token » définie pendant le…
    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.