From 55814c375524b4fbf55e83c03c7305f8472b2ced Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Tue, 29 Apr 2025 16:42:47 +0000 Subject: [PATCH 01/31] 1 --- .github/workflows/ci-cd.yaml | 46 ++++++++++++++++++++++++++++++++++++ .whitesource | 14 ----------- Dockerfile | 9 +++++++ Jenkinsfile | 21 ---------------- 4 files changed, 55 insertions(+), 35 deletions(-) create mode 100644 .github/workflows/ci-cd.yaml delete mode 100644 .whitesource create mode 100644 Dockerfile delete mode 100644 Jenkinsfile diff --git a/.github/workflows/ci-cd.yaml b/.github/workflows/ci-cd.yaml new file mode 100644 index 000000000..e2c11d095 --- /dev/null +++ b/.github/workflows/ci-cd.yaml @@ -0,0 +1,46 @@ +name: Build and Deploy Java App + +on: + push: + branches: [ main ] + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + + - name: Build with Maven + run: mvn clean package + + - name: Log in to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build Docker image + run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest . + + - name: Push Docker image + run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest + + - name: Deploy to server via SSH + uses: appleboy/ssh-action@v1.0.0 + with: + host: ${{ secrets.SERVER_IP }} + username: ubuntu + key: ${{ secrets.SERVER_SSH_KEY }} + script: | + docker pull ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest + docker stop app || true + docker rm app || true + docker run -d --name app -p 8080:8080 ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest diff --git a/.whitesource b/.whitesource deleted file mode 100644 index 9c7ae90b4..000000000 --- a/.whitesource +++ /dev/null @@ -1,14 +0,0 @@ -{ - "scanSettings": { - "baseBranches": [] - }, - "checkRunSettings": { - "vulnerableCheckRunConclusionLevel": "failure", - "displayMode": "diff", - "useMendCheckNames": true - }, - "issueSettings": { - "minSeverityLevel": "LOW", - "issueType": "DEPENDENCY" - } -} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..cb99f7e4a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM maven:3.8.5-openjdk-17 AS build +WORKDIR /app +COPY . . +RUN mvn package + +FROM openjdk:17 +WORKDIR /app +COPY --from=build /app/target/java-hello-world-with-maven-1.0-SNAPSHOT.jar app.jar +ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index 445611cb7..000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,21 +0,0 @@ -pipeline{ - agent any - - tools { - maven 'maven' - jdk 'java' - } - - stages{ - stage('checkout'){ - steps{ - checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'github access', url: 'https://github.com/sreenivas449/java-hello-world-with-maven.git']]]) - } - } - stage('build'){ - steps{ - bat 'mvn package' - } - } - } -} \ No newline at end of file From 52448484dcaf0f91311cceb6e39ea52f226487e0 Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Tue, 29 Apr 2025 16:53:18 +0000 Subject: [PATCH 02/31] Trigger CI/CD workflow --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6dcfe4465..04c77459a 100644 --- a/README.md +++ b/README.md @@ -250,3 +250,4 @@ Here’s the completed `pom.xml` file: + To run this project run the following command. `java -cp target/jb-hello-world-maven-0.1.0.jar hello.HelloWorld` +# Trigger CI/CD From 1280962dce9fced707fab2df4fcaf8b4d5ce743e Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Tue, 29 Apr 2025 16:58:07 +0000 Subject: [PATCH 03/31] edited branch --- .github/workflows/ci-cd.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-cd.yaml b/.github/workflows/ci-cd.yaml index e2c11d095..8e53e67d5 100644 --- a/.github/workflows/ci-cd.yaml +++ b/.github/workflows/ci-cd.yaml @@ -2,7 +2,7 @@ name: Build and Deploy Java App on: push: - branches: [ main ] + branches: [ master ] jobs: build-and-deploy: From 0237b878b161d6d42c1d7c26fe69f1ea09c22649 Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Tue, 29 Apr 2025 18:08:37 +0000 Subject: [PATCH 04/31] smth --- .github/workflows/ci-cd.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-cd.yaml b/.github/workflows/ci-cd.yaml index 8e53e67d5..0202982f2 100644 --- a/.github/workflows/ci-cd.yaml +++ b/.github/workflows/ci-cd.yaml @@ -37,7 +37,7 @@ jobs: uses: appleboy/ssh-action@v1.0.0 with: host: ${{ secrets.SERVER_IP }} - username: ubuntu + username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SERVER_SSH_KEY }} script: | docker pull ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest From e44466d58e94213197e9b2af634ddf0e2bb5be19 Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Tue, 29 Apr 2025 18:14:10 +0000 Subject: [PATCH 05/31] edited dfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index cb99f7e4a..ee45372dc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,5 +5,5 @@ RUN mvn package FROM openjdk:17 WORKDIR /app -COPY --from=build /app/target/java-hello-world-with-maven-1.0-SNAPSHOT.jar app.jar +COPY --from=build /app/target/jb-hello-world-maven-0.2.0.jar app.jar ENTRYPOINT ["java", "-jar", "app.jar"] From 1e8c56448e6ee0180b15bc84dab7714bed6ca168 Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Tue, 29 Apr 2025 19:29:26 +0000 Subject: [PATCH 06/31] edited --- .github/workflows/ci-cd.yaml | 4 ++-- id_github_ci | 7 +++++++ id_github_ci.pub | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 id_github_ci create mode 100644 id_github_ci.pub diff --git a/.github/workflows/ci-cd.yaml b/.github/workflows/ci-cd.yaml index 0202982f2..9131f28b6 100644 --- a/.github/workflows/ci-cd.yaml +++ b/.github/workflows/ci-cd.yaml @@ -1,12 +1,12 @@ name: Build and Deploy Java App - +#edited trigger on: push: branches: [ master ] jobs: build-and-deploy: - runs-on: ubuntu-latest + runs-on: self-hosted steps: - name: Checkout code diff --git a/id_github_ci b/id_github_ci new file mode 100644 index 000000000..75a1e8667 --- /dev/null +++ b/id_github_ci @@ -0,0 +1,7 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACDFrhZYivjYBHh2gWPiCZJnpOFBSg8jRwdlI+52QsU26QAAAJhxExN3cRMT +dwAAAAtzc2gtZWQyNTUxOQAAACDFrhZYivjYBHh2gWPiCZJnpOFBSg8jRwdlI+52QsU26Q +AAAEDne/cZRWRVya4IW3vzbOXvKv558bmJ9L3eyF46OYoZusWuFliK+NgEeHaBY+IJkmek +4UFKDyNHB2Uj7nZCxTbpAAAADmdpdGh1Yi1hY3Rpb25zAQIDBAUGBw== +-----END OPENSSH PRIVATE KEY----- diff --git a/id_github_ci.pub b/id_github_ci.pub new file mode 100644 index 000000000..979e114c3 --- /dev/null +++ b/id_github_ci.pub @@ -0,0 +1 @@ +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMWuFliK+NgEeHaBY+IJkmek4UFKDyNHB2Uj7nZCxTbp github-actions From 473ed78795e8a2ee310dcd2dcb776e542efc9b5c Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Tue, 29 Apr 2025 20:50:44 +0000 Subject: [PATCH 07/31] Remove SSH keys from repo and update .gitignore --- .gitignore | 2 ++ id_github_ci | 7 ------- id_github_ci.pub | 1 - 3 files changed, 2 insertions(+), 8 deletions(-) delete mode 100644 id_github_ci delete mode 100644 id_github_ci.pub diff --git a/.gitignore b/.gitignore index fed39ca9d..20c6919db 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ dependency-reduced-pom.xml .settings/ .vscode .DS_Store +id_github_ci +id_github_ci.pub diff --git a/id_github_ci b/id_github_ci deleted file mode 100644 index 75a1e8667..000000000 --- a/id_github_ci +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW -QyNTUxOQAAACDFrhZYivjYBHh2gWPiCZJnpOFBSg8jRwdlI+52QsU26QAAAJhxExN3cRMT -dwAAAAtzc2gtZWQyNTUxOQAAACDFrhZYivjYBHh2gWPiCZJnpOFBSg8jRwdlI+52QsU26Q -AAAEDne/cZRWRVya4IW3vzbOXvKv558bmJ9L3eyF46OYoZusWuFliK+NgEeHaBY+IJkmek -4UFKDyNHB2Uj7nZCxTbpAAAADmdpdGh1Yi1hY3Rpb25zAQIDBAUGBw== ------END OPENSSH PRIVATE KEY----- diff --git a/id_github_ci.pub b/id_github_ci.pub deleted file mode 100644 index 979e114c3..000000000 --- a/id_github_ci.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMWuFliK+NgEeHaBY+IJkmek4UFKDyNHB2Uj7nZCxTbp github-actions From 9954e6c4945cd6a3ce016f0e7aa5f1d7e69f09ed Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Wed, 30 Apr 2025 11:57:25 +0000 Subject: [PATCH 08/31] check --- .github/workflows/ci-cd.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-cd.yaml b/.github/workflows/ci-cd.yaml index 9131f28b6..07d519529 100644 --- a/.github/workflows/ci-cd.yaml +++ b/.github/workflows/ci-cd.yaml @@ -1,5 +1,5 @@ name: Build and Deploy Java App -#edited trigger + on: push: branches: [ master ] From 00e36e07eb8356c430c38f04693b533cc240d452 Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Wed, 30 Apr 2025 12:15:18 +0000 Subject: [PATCH 09/31] Java hello app web --- Dockerfile | 5 +- pom.xml | 86 ++++++++----------- .../com/example/helloweb/HelloController.java | 12 +++ .../example/helloweb/HelloWebApplication.java | 11 +++ src/main/java/hello/Greeter.java | 7 -- src/main/java/hello/HelloWorld.java | 13 --- 6 files changed, 64 insertions(+), 70 deletions(-) create mode 100644 src/main/java/com/example/helloweb/HelloController.java create mode 100644 src/main/java/com/example/helloweb/HelloWebApplication.java delete mode 100644 src/main/java/hello/Greeter.java delete mode 100644 src/main/java/hello/HelloWorld.java diff --git a/Dockerfile b/Dockerfile index ee45372dc..af4983fab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,10 @@ FROM maven:3.8.5-openjdk-17 AS build WORKDIR /app COPY . . -RUN mvn package +RUN mvn package -DskipTests FROM openjdk:17 WORKDIR /app -COPY --from=build /app/target/jb-hello-world-maven-0.2.0.jar app.jar +COPY --from=build /app/target/java-hello-web-0.1.0.jar app.jar +EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/pom.xml b/pom.xml index 263eb8be6..da6bedf99 100644 --- a/pom.xml +++ b/pom.xml @@ -1,51 +1,41 @@ - - - 4.0.0 - org.springframework - jb-hello-world-maven - jar - 0.2.0 + + + 4.0.0 + com.example + java-hello-web + 0.1.0 + jar - - - 1.8 - 1.8 - 1.8 - + + + org.springframework.boot + spring-boot-starter-parent + 3.1.5 + + - - - joda-time - joda-time - 2.2 - - - - - - - - org.apache.maven.plugins - maven-shade-plugin - 2.1 - - - package - - shade - - - - - hello.HelloWorld - - - - - - - - + + 17 + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + diff --git a/src/main/java/com/example/helloweb/HelloController.java b/src/main/java/com/example/helloweb/HelloController.java new file mode 100644 index 000000000..d2b0d14c2 --- /dev/null +++ b/src/main/java/com/example/helloweb/HelloController.java @@ -0,0 +1,12 @@ +package com.example.helloweb; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class HelloController { + @GetMapping("/hello") + public String hello() { + return "Hello from Spring Boot!"; + } +} diff --git a/src/main/java/com/example/helloweb/HelloWebApplication.java b/src/main/java/com/example/helloweb/HelloWebApplication.java new file mode 100644 index 000000000..91a38e1c6 --- /dev/null +++ b/src/main/java/com/example/helloweb/HelloWebApplication.java @@ -0,0 +1,11 @@ +package com.example.helloweb; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class HelloWebApplication { + public static void main(String[] args) { + SpringApplication.run(HelloWebApplication.class, args); + } +} diff --git a/src/main/java/hello/Greeter.java b/src/main/java/hello/Greeter.java deleted file mode 100644 index 650054052..000000000 --- a/src/main/java/hello/Greeter.java +++ /dev/null @@ -1,7 +0,0 @@ -package hello; - -public class Greeter { - public String sayHello() { - return "DevOps Project for AchiStar Technologies"; - } -} diff --git a/src/main/java/hello/HelloWorld.java b/src/main/java/hello/HelloWorld.java deleted file mode 100644 index 19e4ff928..000000000 --- a/src/main/java/hello/HelloWorld.java +++ /dev/null @@ -1,13 +0,0 @@ -package hello; - -import org.joda.time.LocalTime; - -public class HelloWorld { - public static void main(String[] args) { - LocalTime currentTime = new LocalTime(); - System.out.println("The current local time is: " + currentTime); - - Greeter greeter = new Greeter(); - System.out.println(greeter.sayHello()); - } -} From b7d225b905acc29da34c64d33f9bf924ca83a34b Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Wed, 30 Apr 2025 12:22:41 +0000 Subject: [PATCH 10/31] edited docker --- .github/workflows/ci-cd.yaml | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci-cd.yaml b/.github/workflows/ci-cd.yaml index 07d519529..affd8d397 100644 --- a/.github/workflows/ci-cd.yaml +++ b/.github/workflows/ci-cd.yaml @@ -39,8 +39,21 @@ jobs: host: ${{ secrets.SERVER_IP }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SERVER_SSH_KEY }} - script: | - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest - docker stop app || true - docker rm app || true - docker run -d --name app -p 8080:8080 ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest + set -e + IMAGE=${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest + + echo "🟡 Pulling latest image..." + docker pull $IMAGE + + echo "🧹 Stopping existing container if running..." + if docker ps -q --filter "name=app" | grep -q .; then + docker stop app + fi + + echo "🧽 Removing existing container if exists..." + if docker ps -a -q --filter "name=app" | grep -q .; then + docker rm app + fi + + echo "✅ Running container on port 8080..." + docker run -d --name app -p 8080:8080 $IMAGE From 836b7a968f16f8e71f120c4b1df4fb944e5bd20a Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Wed, 30 Apr 2025 12:30:59 +0000 Subject: [PATCH 11/31] added script --- .github/workflows/ci-cd.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci-cd.yaml b/.github/workflows/ci-cd.yaml index affd8d397..6f4ff38f9 100644 --- a/.github/workflows/ci-cd.yaml +++ b/.github/workflows/ci-cd.yaml @@ -39,6 +39,7 @@ jobs: host: ${{ secrets.SERVER_IP }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SERVER_SSH_KEY }} + script: | set -e IMAGE=${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest From c4495c3ed15894e1cb72c7b8fc7d7c2e6f8809a5 Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Wed, 30 Apr 2025 12:35:52 +0000 Subject: [PATCH 12/31] edited --- .github/workflows/ci-cd.yaml | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci-cd.yaml b/.github/workflows/ci-cd.yaml index 6f4ff38f9..422deef50 100644 --- a/.github/workflows/ci-cd.yaml +++ b/.github/workflows/ci-cd.yaml @@ -43,18 +43,13 @@ jobs: set -e IMAGE=${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest - echo "🟡 Pulling latest image..." + echo "Pulling latest image..." docker pull $IMAGE - echo "🧹 Stopping existing container if running..." - if docker ps -q --filter "name=app" | grep -q .; then - docker stop app - fi - - echo "🧽 Removing existing container if exists..." + echo "Stopping existing container if running..." if docker ps -a -q --filter "name=app" | grep -q .; then - docker rm app + docker rm -f app fi - echo "✅ Running container on port 8080..." + echo "Running container on port 8080..." docker run -d --name app -p 8080:8080 $IMAGE From 452ac1396ad7ea601f441379085e9270b24a0324 Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Wed, 30 Apr 2025 12:48:50 +0000 Subject: [PATCH 13/31] check --- .github/workflows/ci-cd.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-cd.yaml b/.github/workflows/ci-cd.yaml index 422deef50..d3af796aa 100644 --- a/.github/workflows/ci-cd.yaml +++ b/.github/workflows/ci-cd.yaml @@ -1,5 +1,5 @@ name: Build and Deploy Java App - +#trigger on: push: branches: [ master ] From f346b50ae1d4e5160c9df62fad9d08c6de782e77 Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Wed, 30 Apr 2025 13:25:57 +0000 Subject: [PATCH 14/31] READ.ME --- .github/workflows/ci-cd.yaml | 17 ++++++++++++++--- README.md | 1 + 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-cd.yaml b/.github/workflows/ci-cd.yaml index d3af796aa..77f90be5a 100644 --- a/.github/workflows/ci-cd.yaml +++ b/.github/workflows/ci-cd.yaml @@ -27,11 +27,22 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Set image tag + run: echo "IMAGE_TAG=${GITHUB_SHA::7}" >> $GITHUB_ENV + - name: Build Docker image - run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest . + run: | + docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:${{ env.IMAGE_TAG }} . + docker tag ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:${{ env.IMAGE_TAG }} ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest +# run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest . +# - name: Set image tag +# run: echo "IMAGE_TAG=${GITHUB_SHA::7}" >> $GITHUB_ENV - name: Push Docker image - run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest + run: | + docker push ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:${{ env.IMAGE_TAG }} + docker push ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest +# run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest - name: Deploy to server via SSH uses: appleboy/ssh-action@v1.0.0 @@ -41,7 +52,7 @@ jobs: key: ${{ secrets.SERVER_SSH_KEY }} script: | set -e - IMAGE=${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:latest + IMAGE=${{ secrets.DOCKERHUB_USERNAME }}/java-hello-world:${{ env.IMAGE_TAG }} echo "Pulling latest image..." docker pull $IMAGE diff --git a/README.md b/README.md index 04c77459a..e33d7d398 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # Building Java Projects with Maven +THIS Is test This guide walks you through using Maven to build a simple Java project. ## What you’ll build From e0b836e1fb7b00f1959a5cbd08d5b376a820a187 Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Wed, 30 Apr 2025 14:20:05 +0000 Subject: [PATCH 15/31] triggering --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e33d7d398..0bc9b6bd4 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Building Java Projects with Maven -THIS Is test +THIS Is a test This guide walks you through using Maven to build a simple Java project. ## What you’ll build From de12a2d32b56a81f13b3f6a92d08d8ee2ebb5839 Mon Sep 17 00:00:00 2001 From: Depth-monster Date: Wed, 30 Apr 2025 14:28:13 +0000 Subject: [PATCH 16/31] 3004 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0bc9b6bd4..4e154ddae 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Building Java Projects with Maven +#11 Building Java Projects with Maven THIS Is a test This guide walks you through using Maven to build a simple Java project. From bb1c91fc47c7aede0a321fcec084e3aada38c6d1 Mon Sep 17 00:00:00 2001 From: Azat Hajyyev <122405130+Depth-monster@users.noreply.github.com> Date: Sat, 3 May 2025 10:47:02 +0300 Subject: [PATCH 17/31] Update README.md --- README.md | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4e154ddae..f6dc9e565 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,25 @@ -#11 Building Java Projects with Maven -THIS Is a test +Финальный проект по курсу +Задача: +Реализовать полный цикл сборки-поставки приложения, используя +практики CI/CD. + +Работа представляет из себя следующее: +При переходе по ссылке по адресу, выводится такая страница. +![image](https://github.com/user-attachments/assets/a20253aa-d3a5-4a41-b64d-3ab0213762ec) +При пушах в репо, автоматически запускается сборка, версионирование и деплой. + +В качестве инструмента был выбран Github Actions. +Секреты хранятся в Github Actions secrets. +Разуемеется, мониторинг и логирование тоже настроены. В качестве стека использовано: Prometheus + Grafana, для инфрастурных логов используется ELK стек. +Структура проекта: + +``` + └── src + └── main + └── java + └── hello +``` + This guide walks you through using Maven to build a simple Java project. ## What you’ll build From 83342e3dd63d9d61ddfc204a3fe4d872897acb4e Mon Sep 17 00:00:00 2001 From: Azat Hajyyev <122405130+Depth-monster@users.noreply.github.com> Date: Sat, 3 May 2025 10:47:15 +0300 Subject: [PATCH 18/31] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f6dc9e565..2b2902692 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ Работа представляет из себя следующее: При переходе по ссылке по адресу, выводится такая страница. ![image](https://github.com/user-attachments/assets/a20253aa-d3a5-4a41-b64d-3ab0213762ec) + При пушах в репо, автоматически запускается сборка, версионирование и деплой. В качестве инструмента был выбран Github Actions. From a8aacbb371daff86abacd7b37d5c8d1b46c16f02 Mon Sep 17 00:00:00 2001 From: Azat Hajyyev <122405130+Depth-monster@users.noreply.github.com> Date: Sat, 3 May 2025 10:49:39 +0300 Subject: [PATCH 19/31] Update README.md --- README.md | 44 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 2b2902692..18f4e850f 100644 --- a/README.md +++ b/README.md @@ -13,14 +13,48 @@ Секреты хранятся в Github Actions secrets. Разуемеется, мониторинг и логирование тоже настроены. В качестве стека использовано: Prometheus + Grafana, для инфрастурных логов используется ELK стек. Структура проекта: - ``` - └── src - └── main - └── java - └── hello +root@Codeby:~/ex# tree +. +└── java-hello-world-with-maven + ├── Dockerfile + ├── README.md + ├── id_github_ci + ├── id_github_ci.pub + ├── pom.xml + ├── src + │   └── main + │   └── java + │   ── com + │      └── example + │      └── helloweb + │      ├── HelloController.java + │      └── HelloWebApplication.java + │   + └── target + ├── classes + │   └── com + │   └── example + │   └── helloweb + │   ├── HelloController.class + │   └── HelloWebApplication.class + ├── generated-sources + │   └── annotations + ├── java-hello-web-0.1.0.jar + ├── java-hello-web-0.1.0.jar.original + ├── maven-archiver + │   └── pom.properties + └── maven-status + └── maven-compiler-plugin + └── compile + └── default-compile + ├── createdFiles.lst + └── inputFiles.lst + +20 directories, 14 files ``` + This guide walks you through using Maven to build a simple Java project. ## What you’ll build From 00a837b58b85259260b82a0d74f647542586eb2b Mon Sep 17 00:00:00 2001 From: Azat Hajyyev <122405130+Depth-monster@users.noreply.github.com> Date: Sat, 3 May 2025 11:51:38 +0300 Subject: [PATCH 20/31] Update README.md --- README.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 18f4e850f..93f928d83 100644 --- a/README.md +++ b/README.md @@ -53,10 +53,37 @@ root@Codeby:~/ex# tree 20 directories, 14 files ``` - + Как разворачивается +Разработчик пушит изменения в ветку master GitHub-репозитория. +Запускается GitHub Actions workflow (.github/workflows/ci-cd.yaml), где: +Устанавливается JDK 17. +Выполняется сборка проекта с помощью Maven (mvn clean package). +Строится Docker-образ через Dockerfile. +Образ пушится на Docker Hub с двумя тегами: +latest — всегда самый свежий +commit-hash (например b3a2d1f) — версия, привязанная к коммиту. +Через SSH подключение GitHub Actions подключается к удаленному серверу и: +Скачивает последний образ +Удаляет старый контейнер (если есть) +Запускает новый контейнер на порту 8080. This guide walks you through using Maven to build a simple Java project. +Версионирование +При каждом пуше: +создается тег IMAGE_TAG=${GITHUB_SHA::7} — это первые 7 символов SHA коммита. +пример: java-hello-world:b3a2d1f +Также добавляется тег latest для последней стабильной сборки. +Таким образом, можно: +Всегда иметь стабильную ссылку на последнюю версию (latest) +Иметь уникальную ссылку на конкретную сборку (commit_sha), которую легко откатить или протестировать. + +Dockerfile: +Первый этап (stage build) использует Maven для сборки .jar. +Второй этап использует openjdk:17, в него копируется уже собранный .jar. +Приложение запускается с помощью команды java -jar app.jar. + + ## What you’ll build You’ll create an application that provides the time of day and then build it with Maven. From 6b29c7012810a3c8c0387e004a4470dec6b0cbdf Mon Sep 17 00:00:00 2001 From: Azat Hajyyev <122405130+Depth-monster@users.noreply.github.com> Date: Sat, 3 May 2025 11:58:45 +0300 Subject: [PATCH 21/31] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 93f928d83..508dd9f67 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,11 @@ Dockerfile: Второй этап использует openjdk:17, в него копируется уже собранный .jar. Приложение запускается с помощью команды java -jar app.jar. +Как устроен мониторинг? +Мониторинг построен на базе Prometheus и Grafana, с использованием Node Exporter для сбора метрик с хоста. +Node Exporter запускается как контейнер и отдаёт системные метрики по адресу :9100. Prometheus по расписанию (каждые 15 секунд) делает HTTP scrape на адрес node-exporter:9100/metrics. Метрики сохраняются во внутреннюю базу данных Prometheus. Grafana подключается к Prometheus как источник данных и отображает метрики на дашборде. +![image](https://github.com/user-attachments/assets/ceb62c09-4f4f-4c96-a80e-ef65a4a9b29f) + ## What you’ll build You’ll create an application that provides the time of day and then build it with Maven. From e4cfb8805540ef8c1321cda09ddb745722743330 Mon Sep 17 00:00:00 2001 From: Azat Hajyyev <122405130+Depth-monster@users.noreply.github.com> Date: Sat, 3 May 2025 11:59:34 +0300 Subject: [PATCH 22/31] Update README.md --- README.md | 249 ------------------------------------------------------ 1 file changed, 249 deletions(-) diff --git a/README.md b/README.md index 508dd9f67..cc4a490bb 100644 --- a/README.md +++ b/README.md @@ -89,253 +89,4 @@ Node Exporter запускается как контейнер и отдаёт ![image](https://github.com/user-attachments/assets/ceb62c09-4f4f-4c96-a80e-ef65a4a9b29f) -## What you’ll build -You’ll create an application that provides the time of day and then build it with Maven. -## What you’ll need -+ A favorite text editor or IDE -+ JDK 6 or later -+ Install Maven - -## Install Maven. -+ [Install Maven on Windows](https://www.baeldung.com/install-maven-on-windows-linux-mac#installing-maven-on-windows) -+ [Install Maven on Linux](https://www.baeldung.com/install-maven-on-windows-linux-mac#installing-maven-on-linux) -+ [Install Maven on Mac OSX](https://www.baeldung.com/install-maven-on-windows-linux-mac#installing-maven-on-mac-os-x) - -## Set up the project -First you’ll need to setup a Java project for Maven to build. To keep the focus on Maven, make the project as simple as possible for now. - -#### Create the directory structure ---- -+ Create a root project directory named `HelloWorldMaven` and `cd HelloWorldMaven`. -+ In a project directory of your choosing, create the following subdirectory structure. -+ For example, with `mkdir -p src/main/java/hello` on *nix systems:* - -+ on Windows you can create this directory manually. - - ``` - └── src - └── main - └── java - └── hello - ``` -+ Within the `src/main/java/hello` directory, you can create any Java classes you want. To maintain consistency with the rest of this guide, create these two classes: `HelloWorld.java` and `Greeter.java`. - -+ `src/main/java/hello/HelloWorld.java` - ``` - package hello; - public class HelloWorld { - public static void main(String[] args) { - Greeter greeter = new Greeter(); - System.out.println(greeter.sayHello()); - } - } - ``` - - + `src/main/java/hello/Greeter.java` - ``` - package hello; - public class Greeter { - public String sayHello() { - return "Hello world!"; - } - } - ``` - -Now that you have a project that is ready to be built with Maven, the next step is to build this project with Maven. - -### Define a simple Maven build ---- -+ You need to create a Maven project definition. -+ Maven projects are defined with an XML file named pom.xml. -+ Among other things, this file gives the project’s name, version, and dependencies that it has on external libraries. -+ Create a file named `pom.xml` at the root of the project and give it the following contents: - - `pom.xml` - -``` - - - 4.0.0 - org.springframework - jb-hello-world-maven - jar - 0.1.0 - - - - - org.apache.maven.plugins - maven-shade-plugin - 2.1 - - - package - - shade - - - - - hello.HelloWorld - - - - - - - - - -``` -With the exception of the optional `` element, this is the simplest possible `pom.xml` file necessary to build a Java project. It includes the following details of the project configuration: -+ ``. POM model version (always 4.0.0). -+ ``. Group or organization that the project belongs to. Often expressed as an inverted domain name. -+ ``. Name to be given to the project’s library artifact (for example, the name of its JAR or WAR file). -+ ``. Version of the project that is being built. -+ `` - How the project should be packaged. Defaults to "jar" for JAR file packaging. Use "war" for WAR file packaging. - -### Build Java code ---- -Maven is now ready to build the project. You can execute several build lifecycle goals with Maven now, including goals to compile the project’s code, create a library package (such as a JAR file), and install the library in the local Maven dependency repository. - -To try out the build, issue the following at the command line: - - `mvn compile` - + This will run Maven, telling it to execute the compile goal. When it’s finished, you should find the compiled .class files in the target/classes directory. - + Since it’s unlikely that you’ll want to distribute or work with .class files directly, you’ll probably want to run the package goal instead: - -`mvn package` - - + The package goal will compile your Java code, run any tests, and finish by packaging the code up in a JAR file within the target directory. The name of the JAR file will be based on the project’s `` and ``. For example, given the minimal `pom.xml` file from before, the JAR file will be named gs-maven-0.1.0.jar. - - **Note:** If you’ve changed the value of from "jar" to "war", the result will be a WAR file within the target directory instead of a JAR file. - -Maven also maintains a repository of dependencies on your local machine (usually in a .m2/repository directory in your home directory) for quick access to project dependencies. If you’d like to install your project’s JAR file to that local repository, then you should invoke the install goal: - -`mvn install` - -The install goal will compile, test, and package your project’s code and then copy it into the local dependency repository, ready for another project to reference it as a dependency. - -Speaking of dependencies, now it’s time to declare dependencies in the Maven build. - -### Declare Dependencies ---- - -The simple Hello World sample is completely self-contained and does not depend on any additional libraries. Most applications, however, depend on external libraries to handle common and complex functionality. - -For example, suppose that in addition to saying "Hello World!", you want the application to print the current date and time. While you could use the date and time facilities in the native Java libraries, you can make things more interesting by using the Joda Time libraries. - -First, change HelloWorld.java to look like this: - -`src/main/java/hello/HelloWorld.java` - -``` -package hello; - -import org.joda.time.LocalTime; - -public class HelloWorld { - public static void main(String[] args) { - LocalTime currentTime = new LocalTime(); - System.out.println("The current local time is: " + currentTime); - Greeter greeter = new Greeter(); - System.out.println(greeter.sayHello()); - } -} -``` -Here `HelloWorld` uses Joda Time’s `LocalTime` class to get and print the current time. - -If you were to run `mvn compile` to build the project now, the build would fail because you’ve not declared Joda Time as a compile dependency in the build. You can fix that by adding the following lines to `pom.xml` (within the `` element): - -``` - - 1.8 - - - - - joda-time - joda-time - 2.2 - - -``` -This block of XML declares a list of dependencies for the project. Specifically, it declares a single dependency for the Joda Time library. Within the `` element, the dependency coordinates are defined by three sub-elements: - -+ `` - The group or organization that the dependency belongs to. -+ `` - The library that is required. -+ `` - The specific version of the library that is required. - -By default, all dependencies are scoped as `compile` dependencies. That is, they should be available at compile-time (and if you were building a WAR file, including in the /WEB-INF/libs folder of the WAR). Additionally, you may specify a `` element to specify one of the following scopes: - -+ `provided` - Dependencies that are required for compiling the project code, but that will be provided at runtime by a container running the code (e.g., the Java Servlet API). - -+ `test` - Dependencies that are used for compiling and running tests, but not required for building or running the project’s runtime code. - -Now if you run `mvn compile` or `mvn package`, Maven should resolve the Joda Time dependency from the Maven Central repository and the build will be successful. - -Here’s the completed `pom.xml` file: - -`pom.xml` - -``` - - - 4.0.0 - org.springframework - hello-world-maven - jar - 0.1.0 - - - - 1.8 - - - - - joda-time - joda-time - 2.2 - - - - - - - - org.apache.maven.plugins - maven-shade-plugin - 2.1 - - - package - - shade - - - - - hello.HelloWorld - - - - - - - - - -``` - -### Run project ---- -+ To run this project run the following command. - - `java -cp target/jb-hello-world-maven-0.1.0.jar hello.HelloWorld` -# Trigger CI/CD From 10bb9be3c8b9c20a30c2a35b4218a47b0c61dbeb Mon Sep 17 00:00:00 2001 From: Azat Hajyyev <122405130+Depth-monster@users.noreply.github.com> Date: Sat, 3 May 2025 12:11:24 +0300 Subject: [PATCH 23/31] Update README.md --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cc4a490bb..d7f071b0f 100644 --- a/README.md +++ b/README.md @@ -67,8 +67,6 @@ commit-hash (например b3a2d1f) — версия, привязанная Удаляет старый контейнер (если есть) Запускает новый контейнер на порту 8080. -This guide walks you through using Maven to build a simple Java project. - Версионирование При каждом пуше: создается тег IMAGE_TAG=${GITHUB_SHA::7} — это первые 7 символов SHA коммита. @@ -77,6 +75,7 @@ This guide walks you through using Maven to build a simple Java project. Таким образом, можно: Всегда иметь стабильную ссылку на последнюю версию (latest) Иметь уникальную ссылку на конкретную сборку (commit_sha), которую легко откатить или протестировать. +![image](https://github.com/user-attachments/assets/a2b0f0b6-2e21-4d6d-8373-30aa2453324e) Dockerfile: Первый этап (stage build) использует Maven для сборки .jar. @@ -88,5 +87,11 @@ Dockerfile: Node Exporter запускается как контейнер и отдаёт системные метрики по адресу :9100. Prometheus по расписанию (каждые 15 секунд) делает HTTP scrape на адрес node-exporter:9100/metrics. Метрики сохраняются во внутреннюю базу данных Prometheus. Grafana подключается к Prometheus как источник данных и отображает метрики на дашборде. ![image](https://github.com/user-attachments/assets/ceb62c09-4f4f-4c96-a80e-ef65a4a9b29f) +ELK настроен на отдельном сервере. Разворачивается с помощью docker compose +Elasticsearch слушает на 9200, выделено 512MB памяти. Logstash слушает на порту 5000 для логов от Filebeat. Kibana слушает на 5601. +По logstash: +input — принимает логи от Filebeat по порту 5000 (по протоколу Beats). filter — обрабатывает syslog, если присутствует тег "syslog", применяет шаблон grok для парсинга и нормализует временные метки. output — сохраняет документы в Elasticsearch в индекс infrastructure-logs-YYYY.MM.dd. +![image](https://github.com/user-attachments/assets/5b74a4f5-764c-47b1-a41d-acaa27786f58) +Репозиторий с файлами grafana + prometheus и elk находятся здесь(https://github.com/Depth-monster/elk-grafana) From b087f1119077306f3468c014dd412c41049bfcb2 Mon Sep 17 00:00:00 2001 From: Azat Hajyyev <122405130+Depth-monster@users.noreply.github.com> Date: Sat, 3 May 2025 12:11:41 +0300 Subject: [PATCH 24/31] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d7f071b0f..a1dda3139 100644 --- a/README.md +++ b/README.md @@ -94,4 +94,4 @@ Elasticsearch слушает на 9200, выделено 512MB памяти. Log input — принимает логи от Filebeat по порту 5000 (по протоколу Beats). filter — обрабатывает syslog, если присутствует тег "syslog", применяет шаблон grok для парсинга и нормализует временные метки. output — сохраняет документы в Elasticsearch в индекс infrastructure-logs-YYYY.MM.dd. ![image](https://github.com/user-attachments/assets/5b74a4f5-764c-47b1-a41d-acaa27786f58) -Репозиторий с файлами grafana + prometheus и elk находятся здесь(https://github.com/Depth-monster/elk-grafana) +Репозиторий с файлами grafana + prometheus и elk находятся здесь https://github.com/Depth-monster/elk-grafana From cde1ab398298aae760155b6a7ba3bff7a507c077 Mon Sep 17 00:00:00 2001 From: Azat Hajyyev <122405130+Depth-monster@users.noreply.github.com> Date: Sat, 3 May 2025 12:19:31 +0300 Subject: [PATCH 25/31] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a1dda3139..b7ffca015 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ Работа представляет из себя следующее: При переходе по ссылке по адресу, выводится такая страница. ![image](https://github.com/user-attachments/assets/a20253aa-d3a5-4a41-b64d-3ab0213762ec) +Был создан пользователь для self-hosted runner. Чтобы запускался цикл после пуша, runner на хосте с приложением должен быть запущен: +![image](https://github.com/user-attachments/assets/2d19399f-a55a-4817-acd8-f34730c16549) При пушах в репо, автоматически запускается сборка, версионирование и деплой. From 4f1b2bbbc0d19c139a1a8805b873f0ed885ac9c8 Mon Sep 17 00:00:00 2001 From: Azat Hajyyev <122405130+Depth-monster@users.noreply.github.com> Date: Sat, 3 May 2025 12:21:28 +0300 Subject: [PATCH 26/31] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b7ffca015..4b922bce9 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ При переходе по ссылке по адресу, выводится такая страница. ![image](https://github.com/user-attachments/assets/a20253aa-d3a5-4a41-b64d-3ab0213762ec) Был создан пользователь для self-hosted runner. Чтобы запускался цикл после пуша, runner на хосте с приложением должен быть запущен: -![image](https://github.com/user-attachments/assets/2d19399f-a55a-4817-acd8-f34730c16549) +![image](https://github.com/user-attachments/assets/335ff912-afdb-4520-8f36-7608ec670a9d) При пушах в репо, автоматически запускается сборка, версионирование и деплой. From 1725f0f391f70a60b611f5de0de8ef23df45161b Mon Sep 17 00:00:00 2001 From: root Date: Sat, 3 May 2025 13:17:33 +0300 Subject: [PATCH 27/31] last push --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4b922bce9..20409db13 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ Финальный проект по курсу + Задача: Реализовать полный цикл сборки-поставки приложения, используя практики CI/CD. From 279411bb7af42035b51d62b922d038d1f14219b8 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 5 May 2025 00:59:52 +0300 Subject: [PATCH 28/31] done --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 20409db13..879858ffb 100644 --- a/README.md +++ b/README.md @@ -98,3 +98,4 @@ input — принимает логи от Filebeat по порту 5000 (по ![image](https://github.com/user-attachments/assets/5b74a4f5-764c-47b1-a41d-acaa27786f58) Репозиторий с файлами grafana + prometheus и elk находятся здесь https://github.com/Depth-monster/elk-grafana + . From 2c3781130a3b9f81fe1e2e6231a72db15b74806b Mon Sep 17 00:00:00 2001 From: root Date: Mon, 5 May 2025 01:05:44 +0300 Subject: [PATCH 29/31] giving to check --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 879858ffb..ef1c33ab7 100644 --- a/README.md +++ b/README.md @@ -98,4 +98,4 @@ input — принимает логи от Filebeat по порту 5000 (по ![image](https://github.com/user-attachments/assets/5b74a4f5-764c-47b1-a41d-acaa27786f58) Репозиторий с файлами grafana + prometheus и elk находятся здесь https://github.com/Depth-monster/elk-grafana - . + From 7c5a782e1f37c56e9c63a098b8081a6fd060505d Mon Sep 17 00:00:00 2001 From: root Date: Mon, 5 May 2025 01:07:09 +0300 Subject: [PATCH 30/31] added colaborator --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index ef1c33ab7..cfab13b15 100644 --- a/README.md +++ b/README.md @@ -97,5 +97,4 @@ Elasticsearch слушает на 9200, выделено 512MB памяти. Log input — принимает логи от Filebeat по порту 5000 (по протоколу Beats). filter — обрабатывает syslog, если присутствует тег "syslog", применяет шаблон grok для парсинга и нормализует временные метки. output — сохраняет документы в Elasticsearch в индекс infrastructure-logs-YYYY.MM.dd. ![image](https://github.com/user-attachments/assets/5b74a4f5-764c-47b1-a41d-acaa27786f58) -Репозиторий с файлами grafana + prometheus и elk находятся здесь https://github.com/Depth-monster/elk-grafana - +Репозиторий с файлами grafana + prometheus и elk находятся здесь https://github.com/Depth-monster/elk-grafana . From 40798c5efc1ed9bd844dfb02d0b2d6fbccce9c10 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 5 May 2025 01:08:24 +0300 Subject: [PATCH 31/31] added colaborator --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cfab13b15..d420d7328 100644 --- a/README.md +++ b/README.md @@ -98,3 +98,4 @@ input — принимает логи от Filebeat по порту 5000 (по ![image](https://github.com/user-attachments/assets/5b74a4f5-764c-47b1-a41d-acaa27786f58) Репозиторий с файлами grafana + prometheus и elk находятся здесь https://github.com/Depth-monster/elk-grafana . +!--end!--