[JAVA] CI / CD Spring-Anwendung mit CircleCI (Heroku)

Überblick

Dies ist der erste Beitrag. Ich möchte eine Spring-Anwendung mit CircleCI CI / CD. Verwenden Sie Heroku als Bereitstellungsziel.

Umgebung

Voraussetzungen

Erstellen eines Frühlingsprojekts

Erstellen Sie zunächst eine Spring-Anwendung mit Spring Initializr. Dies ist eine praktische Site, die eine Vorlage für die Spring-Anwendung erstellt.

Nehmen Sie die Einstellungen wie in der Abbildung unten gezeigt vor und klicken Sie auf "GENERATE". Vergessen Sie nicht, "Spring Web" zu "Abhängigkeiten" hinzuzufügen. Spring Initializr

Eine Datei wie "demo.zip" wird heruntergeladen. Entpacken Sie sie also an einen beliebigen Ort.

Testerstellung

Erstellen Sie als Nächstes eine einfache Controller-Implementierung und testen Sie sie.

Erstellen Sie zunächst "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";
    }

}

Es ist ein sehr einfacher Controller, der nur "Hallo" zurückgibt, wenn Sie auf "/ Hallo" zugreifen.

Als nächstes erstellen Sie "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 gibt hallo zurück, wenn Sie auf die Seite zugreifen() throws Exception {
        final var mvcResult = this.mockMvc.perform(get("/hello"))
                .andDo(print()).andExpect(status().isOk()).andReturn();
        String content = mvcResult.getResponse().getContentAsString();
        assertEquals(content, "hello");
    }
}

Ich teste den oben genannten einfachen Controller mit einer Bibliothek namens "MockMvc". Wenn Sie eine gute Umgebung haben, führen Sie den Test hier durch und er sollte "GRÜN" sein.

CI zulassen

Jedes Mal, wenn Sie den zuvor erstellten Test an GitHub senden, wird er von CircleCI automatisch ausgeführt. Erstellen Sie .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

Ich versuche, "./gradlew test" mit dem Bild "circleci / openjdk: 11-jdk" auszuführen.

Erstellen Sie ein Repository auf GitHub und übertragen Sie die bisherigen Änderungen.

Wählen Sie dann auf der Circle CI-Anmeldeseite (https://circleci.com/vcs-authorize/) die Option "Mit Git Hub anmelden", um sich anzumelden. Wenn nach Eingabe Ihrer GitHub-Kontoinformationen der Bildschirm "Organisation auswählen" angezeigt wird, wählen Sie Ihr GitHub-Konto aus.

Wenn die Seite "Projekte" angezeigt wird, wählen Sie "Projekt einrichten" des diesmal erstellten Repositorys. Wenn Sie einen Bildschirm wie den folgenden sehen, haben Sie diesmal bereits ".circleci / config.yml" erstellt. Wählen Sie also "Manuell hinzufügen". Add Manually

Dadurch gelangen Sie zur Seite "Pipelines". Wenn der Test ausgeführt wird, ist CI abgeschlossen.

Weitere Informationen zum Einstieg in die Erstellung von CircleCI finden Sie auch auf der offiziellen Seite.

CD zulassen

Schließlich werden wir die Anwendung weiterhin bereitstellen. Machen Sie .circleci / config.yml wie folgt. Ermöglicht die Bereitstellung auf Heroku mithilfe einer Kugel namens 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
      - 

Als nächstes erstellen Sie die Heroku-Seite. Erstellen Sie Herokus Apps im Stammverzeichnis der Spring-Anwendung, die Sie dieses Mal erstellen.

$ heroku create

Sie können nach dem Erstellen eine beliebige Zeichenfolge übergeben, um sie zu Ihrer bevorzugten Domain zu machen.

Notieren Sie sich den xxx Teil des https: // xxx.herokuapp.com /, der von diesem erstellt wurde. Notieren Sie sich außerdem den Wert "API-Schlüssel" in der Mitte der Heroku-Kontoseite (https://dashboard.heroku.com/account).

Stellen Sie diese beiden Werte in den Umgebungsvariablen von CircleCI ein. Gehen Sie auf der Seite "Pipelines" zu "Projekteinstellungen" → "Umgebungsvariablen". Fügen Sie einen Teil der Domain als "HEROKU_APP_NAME" und den Wert des API-Schlüssels als "HEROKU_API_KEY" hinzu (siehe Abbildung unten). add env

add env

Fügen Sie abschließend die Konfigurationsdatei für Heroku hinzu.

Fügen Sie dem Stammverzeichnis "Procfile" hinzu.

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

Fügen Sie außerdem system.properties zum Stammverzeichnis hinzu.

java.runtime.version=11

Dadurch werden die bisherigen Unterschiede auf GitHub übertragen.

Anschließend wird der Job beendet, nachdem der Test auf der Seite "Pipelines" erfolgreich war. Wählen Sie daher "On_hold" aus und klicken Sie auf "Job genehmigen", um die Bereitstellung auszuführen. onhold

Die CD ist fertig, wenn sie endlich "heroku / deploy-via-git" erreicht.

Hier hat den Code dieses Mal erstellt. Wenn Sie möchten, lesen Sie ihn bitte.

Recommended Posts

CI / CD Spring-Anwendung mit CircleCI (Heroku)
Erstellen Sie eine Anfrage-App mit Spring Boot
Verarbeitung beim Starten einer Anwendung mit Spring Boot
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
Starten Sie die Nginx + Spring Boot-Anwendung mit Docker-Compose
Führen Sie die WEB-Anwendung mit Spring Boot + Thymeleaf aus
[Code Pipeline x Elastic Beanstalk] CI / CD-Java-Anwendung für Elastic Beanstalk mit Code Pipeline Part 2
[Code Pipeline x Elastic Beanstalk] CI / CD-Java-Anwendung für Elastic Beanstalk mit Code Pipeline Part 1
[Code Pipeline x Elastic Beanstalk] CI / CD-Java-Anwendung für Elastic Beanstalk mit Code Pipeline Part 3
Konfigurieren Sie die Spring Boot-Anwendung mit dem Maven Multi-Modul
Versuchen Sie, OpenID Connect mit Keycloak (Spring Boot-Anwendung) zu verwenden.
Frühlingsstiefel + Heroku Postgres
Feder mit Kotorin --5 Aktuator
Selbstgemachte Validierung mit Spring
Spring Boot 2.3 Verfügbarkeit von Anwendungen
Frühling mit Kotorin ―― 1. SPRING INITIALIZR
Mit Spring Boot herunterladen
Implementieren Sie die REST-API mit Spring Boot und JPA (Application Layer).
Die erste WEB-Anwendung mit Spring Boot-Making a Pomodoro Timer-
Stellen Sie die von Spring Boot erstellte Anwendung für Heroku (öffentlich) bereit ②
Stellen Sie die von Spring Boot erstellte Anwendung für Heroku (öffentlich) bereit ①
Spring Boot-Anwendung, die DB-Verbindungseinstellungen mit Parametern angibt