Skip to content

Commit 8532b35

Browse files
authored
Merge pull request #5 from devsocket/feature/ci_cd_k8s_support
Feature/ci cd k8s support
2 parents a5617c3 + 31dfe8d commit 8532b35

12 files changed

Lines changed: 191 additions & 39 deletions

File tree

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: Build and Deploy to Local Kubernetes
2+
3+
on:
4+
push:
5+
branches:
6+
- feature/*
7+
8+
jobs:
9+
build-and-deploy:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
- name: Checkout code
14+
uses: actions/checkout@v3
15+
16+
- name: Set up JDK 21
17+
uses: actions/setup-java@v3
18+
with:
19+
java-version: '21'
20+
distribution: 'temurin'
21+
22+
- name: Build with Maven
23+
run: mvn clean package -DskipTests
24+
25+
- name: Log in to GitHub Container Registry
26+
run: echo "${{ secrets.GHCR_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
27+
28+
- name: Build and Push Docker Image
29+
run: |
30+
for service in user-service order-service product-service; do
31+
docker build -t ghcr.io/${{ github.repository_owner }}/$service:latest ./$service
32+
docker push ghcr.io/${{ github.repository_owner }}/$service:latest
33+
done
Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: Build and Deploy to Local Kubernetes
33
on:
44
push:
55
branches:
6-
- develop
6+
- feature/*
77

88
jobs:
99
build-and-deploy:
@@ -22,15 +22,15 @@ jobs:
2222
- name: Build with Maven
2323
run: mvn clean package -DskipTests
2424

25-
- name: Log in to GitHub Container Registry
26-
run: echo "${{ secrets.GHCR_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
27-
28-
- name: Build and Push Docker Image
29-
run: |
30-
for service in user-service order-service product-service; do
31-
docker build -t ghcr.io/${{ github.repository_owner }}/$service:latest ./$service
32-
docker push ghcr.io/${{ github.repository_owner }}/$service:latest
33-
done
25+
# - name: Log in to GitHub Container Registry
26+
# run: echo "${{ secrets.GHCR_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
27+
#
28+
# - name: Build and Push Docker Image
29+
# run: |
30+
# for service in user-service order-service product-service; do
31+
# docker build -t ghcr.io/${{ github.repository_owner }}/$service:latest ./$service
32+
# docker push ghcr.io/${{ github.repository_owner }}/$service:latest
33+
# done
3434
# - name: Set up kubectl
3535
# uses: azure/setup-kubectl@v3
3636
# with:
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
name: Release Pipeline
2+
3+
on:
4+
push:
5+
branches:
6+
- 'release/**'
7+
8+
jobs:
9+
release:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
- name: Checkout code
14+
uses: actions/checkout@v3
15+
with:
16+
fetch-depth: 0 # Needed to push tags & branches
17+
18+
- name: Set up JDK 21
19+
uses: actions/setup-java@v3
20+
with:
21+
java-version: '21'
22+
distribution: 'temurin'
23+
24+
- name: Extract release version from branch name
25+
id: vars
26+
run: |
27+
# Assuming branch name like release/1.2.3
28+
echo "RELEASE_VERSION=${GITHUB_REF#refs/heads/release/}" >> $GITHUB_OUTPUT
29+
30+
- name: Build with Maven
31+
run: mvn clean package -DskipTests
32+
33+
- name: Create and push Git tag for release
34+
env:
35+
RELEASE_VERSION: ${{ steps.vars.outputs.RELEASE_VERSION }}
36+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
37+
run: |
38+
git config user.name "github-actions[bot]"
39+
git config user.email "github-actions[bot]@users.noreply.github.com"
40+
git tag -a "v$RELEASE_VERSION" -m "Release $RELEASE_VERSION"
41+
git push origin "v$RELEASE_VERSION"
42+
43+
- name: Checkout master branch
44+
run: git checkout master
45+
46+
- name: Update master branch to latest release tag
47+
env:
48+
RELEASE_VERSION: ${{ steps.vars.outputs.RELEASE_VERSION }}
49+
run: |
50+
git reset --hard "v$RELEASE_VERSION"
51+
git push origin master --force
52+
53+
- name: Checkout develop branch
54+
run: git checkout develop
55+
56+
- name: Bump develop version to next SNAPSHOT
57+
env:
58+
RELEASE_VERSION: ${{ steps.vars.outputs.RELEASE_VERSION }}
59+
run: |
60+
# Extract major.minor.patch, then increment patch + add SNAPSHOT
61+
IFS='.' read -r major minor patch <<< "${RELEASE_VERSION}"
62+
next_patch=$((patch + 1))
63+
next_snapshot="${major}.${minor}.${next_patch}-SNAPSHOT"
64+
65+
echo "Next develop version: $next_snapshot"
66+
67+
# Update version in pom.xml or your version file
68+
mvn versions:set -DnewVersion=$next_snapshot
69+
mvn versions:commit
70+
71+
git config user.name "github-actions[bot]"
72+
git config user.email "github-actions[bot]@users.noreply.github.com"
73+
74+
git add pom.xml
75+
git commit -m "Bump develop version to $next_snapshot"
76+
git push origin develop
77+
78+
- name: Build and push Docker images
79+
env:
80+
RELEASE_VERSION: ${{ steps.vars.outputs.RELEASE_VERSION }}
81+
GHCR_TOKEN: ${{ secrets.GHCR_TOKEN }}
82+
run: |
83+
echo "${GHCR_TOKEN}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
84+
85+
for service in user-service order-service product-service; do
86+
docker build -t ghcr.io/${{ github.repository_owner }}/$service:$RELEASE_VERSION ./$service
87+
docker push ghcr.io/${{ github.repository_owner }}/$service:$RELEASE_VERSION
88+
done

k8s/configmaps/postgres-config-map.yaml

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,26 @@ data:
77
-- This script creates schemas for each microservice
88
CREATE SCHEMA IF NOT EXISTS "user";
99
CREATE SCHEMA IF NOT EXISTS "product";
10-
CREATE SCHEMA IF NOT EXISTS "order";
10+
CREATE SCHEMA IF NOT EXISTS "order";
11+
CREATE SCHEMA IF NOT EXISTS "categories";
12+
13+
CREATE TABLE IF NOT EXISTS product.categories (
14+
id SERIAL PRIMARY KEY,
15+
name VARCHAR(255) NOT NULL
16+
);
17+
18+
CREATE TABLE IF NOT EXISTS product.products (
19+
id SERIAL PRIMARY KEY,
20+
name VARCHAR(255) NOT NULL,
21+
description TEXT,
22+
price DOUBLE PRECISION,
23+
available_quantity INTEGER
24+
);
25+
26+
CREATE TABLE IF NOT EXISTS product.product_category (
27+
product_id BIGINT NOT NULL,
28+
category_id BIGINT NOT NULL,
29+
PRIMARY KEY (product_id, category_id),
30+
FOREIGN KEY (product_id) REFERENCES product.products(id) ON DELETE CASCADE,
31+
FOREIGN KEY (category_id) REFERENCES product.categories(id) ON DELETE CASCADE
32+
);

order-service/src/main/java/com/devsocket/ecommerce/order/entity/Order.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import java.time.LocalDateTime;
1010

1111
@Entity
12-
@Table(name = "orders")
12+
@Table(name = "orders", schema = "order")
1313
@Data
1414
@NoArgsConstructor
1515
@AllArgsConstructor

order-service/src/main/resources/application.yaml

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,18 @@ spring:
55
application:
66
name: order-service
77

8-
spring:
9-
datasource:
10-
url: ${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/orders}
11-
username: ${SPRING_DATASOURCE_USERNAME:admin}
12-
password: ${SPRING_DATASOURCE_PASSWORD:passowrd}
13-
driver-class-name: org.postgresql.Driver
14-
jpa:
8+
datasource:
9+
url: ${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/ecommerce}
10+
username: ${SPRING_DATASOURCE_USERNAME:admin}
11+
password: ${SPRING_DATASOURCE_PASSWORD:passowrd}
12+
driver-class-name: org.postgresql.Driver
13+
jpa:
14+
hibernate:
15+
ddl-auto: ${SPRING_JPA_HIBERNATE_DDL_AUTO:update}
16+
properties:
1517
hibernate:
16-
ddl-auto: ${SPRING_JPA_HIBERNATE_DDL_AUTO:update}
18+
default_schema: order
19+
1720

1821
jwt:
1922
secret: ${JWT_SECRET:dev_secret_key}

product-service/src/main/java/com/devsocket/ecommerce/product/ProductServiceApplication.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.boot.autoconfigure.domain.EntityScan;
56
import org.springframework.context.annotation.ComponentScan;
67

78
@SpringBootApplication
89
@ComponentScan(basePackages = {
910
"com.devsocket.ecommerce"
1011
})
12+
@EntityScan("com.devsocket.ecommerce.product.entity")
1113
public class ProductServiceApplication {
1214
public static void main(String[] args) {
1315
SpringApplication.run(ProductServiceApplication.class, args);

product-service/src/main/java/com/devsocket/ecommerce/product/entity/Category.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
@Data
1010
@Entity
11-
@Table(name = "categories")
11+
@Table(name = "categories", schema = "product")
1212
@NoArgsConstructor
1313
@AllArgsConstructor
1414
@Builder

product-service/src/main/java/com/devsocket/ecommerce/product/entity/Product.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import java.util.List;
1010

1111
@Entity
12-
@Table(name = "products")
12+
@Table(name = "products", schema = "product")
1313
@Data
1414
@NoArgsConstructor
1515
@AllArgsConstructor

product-service/src/main/resources/application.yaml

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,17 @@ spring:
55
application:
66
name: product-service
77

8-
spring:
9-
datasource:
10-
url: ${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/products}
11-
username: ${SPRING_DATASOURCE_USERNAME:admin}
12-
password: ${SPRING_DATASOURCE_PASSWORD:passowrd}
13-
driver-class-name: org.postgresql.Driver
14-
jpa:
8+
datasource:
9+
url: ${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/ecommerce}
10+
username: ${SPRING_DATASOURCE_USERNAME:admin}
11+
password: ${SPRING_DATASOURCE_PASSWORD:passowrd}
12+
driver-class-name: org.postgresql.Driver
13+
jpa:
14+
hibernate:
15+
ddl-auto: ${SPRING_JPA_HIBERNATE_DDL_AUTO:update}
16+
properties:
1517
hibernate:
16-
ddl-auto: ${SPRING_JPA_HIBERNATE_DDL_AUTO:update}
18+
default_schema: product
1719

1820
jwt:
1921
secret: ${JWT_SECRET:dev_secret_key}

0 commit comments

Comments
 (0)