Ceci est le premier message. Je souhaite CI / CD une application Spring utilisant CircleCI. Utilisez Heroku comme destination de déploiement.
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».
Un fichier tel que demo.zip
sera téléchargé, alors décompressez-le à l'emplacement de votre choix.
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».
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`.
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.
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.
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.
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