diff --git a/.github/workflows/pipeline.yml b/.github/workflows/pipeline.yml new file mode 100644 index 000000000..aa6026a90 --- /dev/null +++ b/.github/workflows/pipeline.yml @@ -0,0 +1,71 @@ +name: CI + +on: + + push: + workflow_dispatch: + +jobs: + + build: + + runs-on: ubuntu-latest + + steps: + + - uses: actions/checkout@v3 + + - name: Build + run: | + chmod +x gradlew + ./gradlew build + ls -ltr + + - name: SonarCloud Analysis + run: | + chmod +x gradlew + ./gradlew build sonar -Dsonar.token=${{ secrets.TOKEN_SONARCLOUD }} + + - name: Docker Login + uses: docker/login-action@v2.2.0 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Copia de Jar a Raiz de proyecto + run: | + ls + cp $GITHUB_WORKSPACE/build/libs/testing-web-2.6.0.jar . + chmod 777 testing-web-2.6.0.jar + ls -lt + - name: Docker Build + run: | + docker build --tag ivanpizarroq/microservicio-java:latest . + docker images + + - name: Docker Push + run: | + docker push ivanpizarroq/microservicio-java + + deploy: + runs-on: self-hosted + needs: build + steps: + + - uses: actions/checkout@v3 + - name: Set PowerShell Execution Policy + run: | + Set-ExecutionPolicy Unrestricted + - name: Docker Login + uses: docker/login-action@v2.2.0 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Deploy to Minikube + run: | + kubectl apply -f deployment.yml + + + + + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..7b78c8bc6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM openjdk:11-jre + +EXPOSE 8085 + +ADD testing-web-2.6.0.jar /app/testing-web-2.6.0.jar + +WORKDIR /app + +CMD java -jar testing-web-2.6.0.jar diff --git a/build.gradle b/build.gradle index ee2bd23f9..99fcce3a2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,22 +1,52 @@ plugins { - id 'org.springframework.boot' version '2.6.3' - id 'io.spring.dependency-management' version '1.0.11.RELEASE' - id 'java' + id 'org.springframework.boot' version '2.6.6' + id 'io.spring.dependency-management' version '1.0.11.RELEASE' + id 'java' + id "org.sonarqube" version "4.2.1.3168" } -group = 'com.example' -version = '0.0.1-SNAPSHOT' -sourceCompatibility = '1.8' +apply plugin: 'java' + +group = 'org.springframework.samples' +version = '2.6.0' +sourceCompatibility = '11' + repositories { - mavenCentral() + mavenCentral() } +ext.webjarsFontawesomeVersion = "4.7.0" +ext.webjarsBootstrapVersion = "5.1.3" + dependencies { - implementation 'org.springframework.boot:spring-boot-starter-web' - testImplementation('org.springframework.boot:spring-boot-starter-test') + implementation 'org.springframework.boot:spring-boot-starter-cache' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'javax.cache:cache-api' + runtimeOnly 'org.springframework.boot:spring-boot-starter-actuator' + runtimeOnly 'org.webjars:webjars-locator-core' + runtimeOnly "org.webjars.npm:bootstrap:${webjarsBootstrapVersion}" + runtimeOnly "org.webjars.npm:font-awesome:${webjarsFontawesomeVersion}" + runtimeOnly 'org.ehcache:ehcache' + runtimeOnly 'com.h2database:h2' + runtimeOnly 'mysql:mysql-connector-java' + runtimeOnly 'org.postgresql:postgresql' + developmentOnly 'org.springframework.boot:spring-boot-devtools' + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +sonar { + properties { + property "sonar.projectKey", "IvanPizarroQ_microservicio-java" + property "sonar.organization", "ivanpizarroq" + property "sonar.host.url", "https://sonarcloud.io/" + property "sonar.projectName", "microservicio-java" + } } test { - useJUnitPlatform() + useJUnitPlatform() } diff --git a/deployment.yml b/deployment.yml new file mode 100644 index 000000000..073bf0517 --- /dev/null +++ b/deployment.yml @@ -0,0 +1,21 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: microservicio-java + labels: + app: microservicio-java +spec: + replicas: 1 + selector: + matchLabels: + app: microservicio-java + template: + metadata: + labels: + app: microservicio-java + spec: + containers: + - name: microservicio-java + image: ivanpizarroq/microservicio-java:latest + ports: + - containerPort: 8085 diff --git a/src/main/java/com/example/testingweb/GreetingService.java b/src/main/java/com/example/testingweb/GreetingService.java index 6661c82bc..2ca75995c 100644 --- a/src/main/java/com/example/testingweb/GreetingService.java +++ b/src/main/java/com/example/testingweb/GreetingService.java @@ -5,6 +5,6 @@ @Service public class GreetingService { public String greet() { - return "Hello, World"; + return "Hola, soy Ivan Pizarro"; } } diff --git a/src/main/java/com/example/testingweb/HomeController.java b/src/main/java/com/example/testingweb/HomeController.java index 6472ecdf7..74b46d70c 100644 --- a/src/main/java/com/example/testingweb/HomeController.java +++ b/src/main/java/com/example/testingweb/HomeController.java @@ -9,7 +9,7 @@ public class HomeController { @RequestMapping("/") public @ResponseBody String greeting() { - return "Hello, World"; + return "Hola, soy Ivan Pizarro"; } } diff --git a/src/test/java/com/example/testingweb/HttpRequestTest.java b/src/test/java/com/example/testingweb/HttpRequestTest.java index 79e679e60..89e979ac7 100644 --- a/src/test/java/com/example/testingweb/HttpRequestTest.java +++ b/src/test/java/com/example/testingweb/HttpRequestTest.java @@ -22,6 +22,6 @@ public class HttpRequestTest { @Test public void greetingShouldReturnDefaultMessage() throws Exception { assertThat(this.restTemplate.getForObject("http://localhost:" + port + "/", - String.class)).contains("Hello, World"); + String.class)).contains("Hola, soy Ivan Pizarro"); } } diff --git a/src/test/java/com/example/testingweb/TestingWebApplicationTest.java b/src/test/java/com/example/testingweb/TestingWebApplicationTest.java index 135f48986..d683308c9 100644 --- a/src/test/java/com/example/testingweb/TestingWebApplicationTest.java +++ b/src/test/java/com/example/testingweb/TestingWebApplicationTest.java @@ -23,6 +23,6 @@ public class TestingWebApplicationTest { @Test public void shouldReturnDefaultMessage() throws Exception { this.mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk()) - .andExpect(content().string(containsString("Hello, World"))); + .andExpect(content().string(containsString("Hola, soy Ivan Pizarro"))); } } diff --git a/src/test/java/com/example/testingweb/WebLayerTest.java b/src/test/java/com/example/testingweb/WebLayerTest.java index a0e87a8db..b30444b41 100644 --- a/src/test/java/com/example/testingweb/WebLayerTest.java +++ b/src/test/java/com/example/testingweb/WebLayerTest.java @@ -22,7 +22,7 @@ public class WebLayerTest { @Test public void shouldReturnDefaultMessage() throws Exception { this.mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk()) - .andExpect(content().string(containsString("Hello, World"))); + .andExpect(content().string(containsString("Hola, soy Ivan Pizarro"))); } } //end::test[] diff --git a/src/test/java/com/example/testingweb/WebMockTest.java b/src/test/java/com/example/testingweb/WebMockTest.java index 245b6cccb..ed6508897 100644 --- a/src/test/java/com/example/testingweb/WebMockTest.java +++ b/src/test/java/com/example/testingweb/WebMockTest.java @@ -25,8 +25,8 @@ public class WebMockTest { @Test public void greetingShouldReturnMessageFromService() throws Exception { - when(service.greet()).thenReturn("Hello, Mock"); + when(service.greet()).thenReturn("Hola, soy Ivan Pizarro"); this.mockMvc.perform(get("/greeting")).andDo(print()).andExpect(status().isOk()) - .andExpect(content().string(containsString("Hello, Mock"))); + .andExpect(content().string(containsString("Hola, soy Ivan Pizarro"))); } }