[JAVA] Application CI / CD Spring avec CircleCI (Heroku)

Aperçu

Ceci est le premier message. Je souhaite CI / CD une application Spring utilisant CircleCI. Utilisez Heroku comme destination de déploiement.

environnement

Conditions préalables

Créer un projet Spring

Tout d'abord, créez une application Spring à l'aide de Spring Initializr. C'est un site pratique qui crée un modèle pour l'application Spring.

Effectuez les réglages comme indiqué dans l'image ci-dessous et cliquez sur «GÉNÉRER». N'oubliez pas d'ajouter «Spring Web» aux «Dépendances». Spring Initializr

Un fichier tel que demo.zip sera téléchargé, alors décompressez-le à l'emplacement de votre choix.

Création de test

Ensuite, créez une implémentation et un test de Controller simples.

Commencez par créer demo / src / main / java / com / example / demo / controller / HelloController.java.

package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping(path = "/hello")
    public String hello() {
        return "hello";
    }

}

C'est un contrôleur très simple qui renvoie simplement "" hello "" lorsque vous accédez à "/ hello".

Ensuite, créez demo / src / test / java / com / example / demo / controller / HelloControllerTest.java.

package com.example.demo.controller;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@SpringBootTest
@AutoConfigureMockMvc
class HelloControllerTest {
    @Autowired
    private MockMvc mockMvc;

    @Autowired
    WebApplicationContext webApplicationContext;

    @BeforeEach
    void setUp() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }

    @Test
void hello renvoie bonjour lorsque vous accédez à la page() throws Exception {
        final var mvcResult = this.mockMvc.perform(get("/hello"))
                .andDo(print()).andExpect(status().isOk()).andReturn();
        String content = mvcResult.getResponse().getContentAsString();
        assertEquals(content, "hello");
    }
}

Je teste le contrôleur simple ci-dessus en utilisant une bibliothèque appelée MockMvc. Si vous avez un bon environnement, lancez le test ici et il devrait être «VERT».

Autoriser CI

Ensuite, chaque fois que vous transférez le test que vous avez créé précédemment sur GitHub, CircleCI l'exécutera automatiquement. Créez .circleci / config.yml.

version: 2.1

workflows:
  java-ci:
    jobs:
      - test

jobs:
  test:
    docker:
      - image: circleci/openjdk:11-jdk

    working_directory: ~/repo
    environment:
      JVM_OPTS: -Xmx3200m
      TERM: dumb

    steps:
      - checkout
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "build.gradle" }}
            - v1-dependencies-
      - run: gradle dependencies
      - save_cache:
          paths:
            - ~/.gradle
          key: v1-dependencies-{{ checksum "build.gradle" }}
      - run: ./gradlew test

J'essaye d'exécuter ./gradlew test en utilisant l'image de circleci / openjdk: 11-jdk.

Créez un référentiel sur GitHub et poussez les modifications jusqu'à présent.

Ensuite, sélectionnez Connexion avec Git Hub sur la page de connexion Circle CI (https://circleci.com/vcs-authorize/) pour vous connecter. Lorsque l'écran «Sélectionner une organisation» apparaît après avoir saisi les informations de votre compte GitHub, sélectionnez votre compte GitHub.

Lorsque la page Projets s'affiche, sélectionnez Configurer le projet du référentiel créé cette fois. Si vous voyez un écran comme celui ci-dessous, cette fois, vous avez déjà créé .circleci / config.yml, alors sélectionnez ʻAjouter manuellement`. Add Manually

Cela vous mènera à la page Pipelines, et si le test est exécuté, CI est terminé.

Pour plus d'informations sur la façon de commencer à créer CircleCI, veuillez également consulter la Page officielle.

Autoriser le CD

Enfin, nous continuerons à déployer l'application. Créez .circleci / config.yml comme suit. Vous permet de vous déployer sur Heroku en utilisant un orbe appelé circleci / heroku.

version: 2.1

orbs:
  heroku: circleci/[email protected]

workflows:
  java-ci-cd:
    jobs:
      - test
      - start_deploy:
          type: approval
          requires:
            - test
      - heroku/deploy-via-git:
          requires:
            - start_deploy

jobs:
  test:
    docker:
      - image: circleci/openjdk:11-jdk

    working_directory: ~/repo
    environment:
      JVM_OPTS: -Xmx3200m
      TERM: dumb

    steps:
      - checkout
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "build.gradle" }}
            - v1-dependencies-
      - run: gradle dependencies
      - save_cache:
          paths:
            - ~/.gradle
          key: v1-dependencies-{{ checksum "build.gradle" }}
      - run: ./gradlew test
      - 

Ensuite, créez le côté Heroku. Créez les applications Heroku dans le répertoire racine de l'application Spring que vous créez cette fois.

$ heroku create

Vous pouvez passer n'importe quelle chaîne après la création pour en faire votre domaine préféré.

Notez la partie xxx duhttps: // xxx.herokuapp.com /créé par celui-ci. Notez également la valeur de ʻAPI Key` au milieu de la page du compte Heroku (https://dashboard.heroku.com/account).

Définissez ces deux valeurs sur les «variables d'environnement» de CircleCI. Depuis la page Pipelines, allez dans Paramètres du projet → ʻVariables d'environnement`. Ajoutez une partie du domaine comme «HEROKU_APP_NAME» et la valeur de la clé API comme «HEROKU_API_KEY» comme indiqué dans l'image ci-dessous. add env

add env

Enfin, ajoutez le fichier de configuration pour Heroku.

Ajoutez Procfile au répertoire racine.

web: java -jar build/libs/demo-0.0.1.jar --server.port=$PORT

De plus, ajoutez system.properties au répertoire racine.

java.runtime.version=11

Cela poussera les différences jusqu'à présent sur GitHub.

Ensuite, Job s'arrêtera une fois le test réussi sur la page Pipelines, alors sélectionnez ʻOn_hold et cliquez sur ʻApprove Job pour lancer le déploiement. onhold

Le CD est complet lorsqu'il atteint finalement heroku / deploy-via-git.

Ici a créé le code cette fois-ci, veuillez donc vous y référer si vous le souhaitez.

Recommended Posts

Application CI / CD Spring avec CircleCI (Heroku)
Créer une application d'enquête avec Spring Boot
Traitement lors du démarrage d'une application avec Spring Boot
Démarrez le développement d'applications Web avec Spring Boot
Lancez l'application Nginx + Spring Boot avec docker-compose
Exécutez l'application WEB avec Spring Boot + Thymeleaf
[Code Pipeline x Elastic Beanstalk] Application Java CI / CD vers Elastic Beanstalk avec Code Pipeline, partie 2
[Code Pipeline x Elastic Beanstalk] Application Java CI / CD vers Elastic Beanstalk avec Code Pipeline, partie 1
[Code Pipeline x Elastic Beanstalk] Application Java CI / CD vers Elastic Beanstalk avec Code Pipeline Part 3
Configurer l'application Spring Boot avec le module multiple maven
Essayez d'utiliser OpenID Connect avec Keycloak (application Spring Boot)
Botte de printemps + Heroku Postgres
Ressort avec actionneur Kotorin --5
Validation personnalisée avec Spring
Disponibilité de l'application Spring Boot 2.3
Printemps avec Kotorin ―― 1. INITIALISATION PRINTEMPS
Télécharger avec Spring Boot
Implémenter l'API REST avec Spring Boot et JPA (Application Layer)
La première application WEB avec Spring Boot-Making a Pomodoro timer-
Déployez l'application créée par Spring Boot sur Heroku (public) ②
Déployez l'application créée par Spring Boot sur Heroku (public) ①
Application Spring Boot qui spécifie les paramètres de connexion à la base de données avec des paramètres