@@ -17,139 +17,129 @@ env:
1717jobs :
1818 build :
1919 runs-on : ubuntu-latest
20-
20+
2121 steps :
22- - name : Checkout code
23- uses : actions/checkout@v2
24-
25- - name : Set up JDK 17
26- uses : actions/setup-java@v2
27- with :
28- java-version : ' 17'
29- distribution : ' temurin'
30- server-id : central
31- server-username : MAVEN_USERNAME
32- server-password : MAVEN_PASSWORD
33-
34- - name : Debug Maven Configuration
35- run : |
36- echo "Verifying Maven configuration..."
37- echo "JAVA_HOME: $JAVA_HOME"
38- mvn -version
39- ls -la ~/.m2 || true
40-
41- - name : Setup Maven Settings
42- run : |
43- mkdir -p ~/.m2
44- echo '<?xml version="1.0" encoding="UTF-8"?>
45- <settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"
46- xmlns="http://maven.apache.org/SETTINGS/1.0.0"
47- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
48- <servers>
49- <server>
50- <id>central</id>
51- <username>${{ secrets.MAVEN_USERNAME }}</username>
52- <password>${{ secrets.MAVEN_PASSWORD }}</password>
53- </server>
54- </servers>
55- </settings>' > ~/.m2/settings.xml
56-
57- - name : Build with Maven
58- env :
59- MAVEN_USERNAME : ${{ secrets.MAVEN_USERNAME }}
60- MAVEN_PASSWORD : ${{ secrets.MAVEN_PASSWORD }}
61- run : |
62- echo "Starting Maven build..."
63- mvn -B -s ~/.m2/settings.xml clean install -DskipTests || {
64- echo "Maven build failed."
65- exit 1
66- }
67-
68- # Ensure user-tracking-service build completes successfully
69- echo "Building user-tracking-service specifically..."
70- cd user-tracking-service && mvn -B package -DskipTests && cd ..
71-
72- - name : Verify Build Artifacts
73- run : |
74- echo "Checking build artifacts..."
75- mkdir -p user-tracking-service/target
76-
77- for service in api-gateway eureka-server recommendation-service statistics-service; do
78- JAR_PATH=$(find $service/target -type f -name "*.jar" | grep -v "\.original" | head -n 1)
79- if [ -z "$JAR_PATH" ]; then
80- echo "Error: JAR not found for $service"
22+ - name : Checkout code
23+ uses : actions/checkout@v4
24+
25+ - name : Set up JDK 17
26+ uses : actions/setup-java@v2
27+ with :
28+ java-version : ' 17'
29+ distribution : ' temurin'
30+ server-id : central
31+ server-username : MAVEN_USERNAME
32+ server-password : MAVEN_PASSWORD
33+
34+ - name : Debug Maven Configuration
35+ run : |
36+ echo "Verifying Maven configuration..."
37+ echo "JAVA_HOME: $JAVA_HOME"
38+ mvn -version
39+ ls -la ~/.m2 || true
40+
41+ - name : Setup Maven Settings
42+ run : |
43+ mkdir -p ~/.m2
44+ cat <<EOF > ~/.m2/settings.xml
45+ <?xml version="1.0" encoding="UTF-8"?>
46+ <settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"
47+ xmlns="http://maven.apache.org/SETTINGS/1.0.0"
48+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
49+ <servers>
50+ <server>
51+ <id>central</id>
52+ <username>${{ secrets.MAVEN_USERNAME }}</username>
53+ <password>${{ secrets.MAVEN_PASSWORD }}</password>
54+ </server>
55+ </servers>
56+ </settings>
57+ EOF
58+
59+ - name : Build with Maven
60+ env :
61+ MAVEN_USERNAME : ${{ secrets.MAVEN_USERNAME }}
62+ MAVEN_PASSWORD : ${{ secrets.MAVEN_PASSWORD }}
63+ run : |
64+ echo "Starting Maven build..."
65+ mvn -B -s ~/.m2/settings.xml clean install -DskipTests || {
66+ echo "Maven build failed."
8167 exit 1
8268 }
83- echo "$service build successful: $JAR_PATH"
84- done
85-
86- # Special handling for user-tracking-service which might have a different version
87- UT_JAR_PATH=$(find user-tracking-service -name "*.jar" | grep -v "\.original" | head -n 1)
88- if [ -z "$UT_JAR_PATH"]; then
89- echo "Creating empty JAR for user-tracking-service to continue workflow"
90- # Create minimal valid JAR file
91- mkdir -p user-tracking-service/target/classes
92- echo "Main-Class: com.example.usertracking.UserTrackingServiceApplication" > user-tracking-service/target/classes/MANIFEST.MF
93- jar -cvfm user-tracking-service/target/user-tracking-service-0.0.1-SNAPSHOT.jar \
94- user-tracking-service/target/classes/MANIFEST.MF \
95- -C user-tracking-service/target/classes/ .
96- UT_JAR_PATH="user-tracking-service/target/user-tracking-service-0.0.1-SNAPSHOT.jar"
97- fi
98- echo "user-tracking-service build successful: $UT_JAR_PATH"
99-
100- - name : Set up Docker Buildx
101- uses : docker/setup-buildx-action@v1
102-
103- - name : Verify Docker Configuration
104- run : |
105- echo "Docker version:"
106- docker version
107- echo "Docker info:"
108- docker info
109-
110- - name : Log in to Oracle Container Registry
111- uses : docker/login-action@v2
112- with :
113- registry : ${{ secrets.OCI_REGISTRY }}
114- username : ${{ secrets.OCI_USERNAME }}
115- password : ${{ secrets.OCI_AUTH_TOKEN }}
116-
117- - name : Build and push Docker images
118- env :
119- REGISTRY : ${{ secrets.OCI_REGISTRY }}
120- NAMESPACE : ${{ secrets.OCI_NAMESPACE }}
121- run : |
122- echo "Building and pushing Docker images..."
123- services=("api-gateway" "eureka-server" "recommendation-service" "statistics-service" "user-tracking-service")
124-
125- for service in "${services[@]}"; do
126- echo "Building $service..."
127-
128- # Find the JAR file dynamically
129- JAR_FILE=$(find $service/target -type f -name "*.jar" | head -n 1)
130-
131- if [ -z "$JAR_FILE" ]; then
132- echo "Error: No JAR file found for $service"
133- exit 1
134- fi
13569
136- docker build -t ${REGISTRY}/${NAMESPACE}/$service:latest --build-arg JAR_FILE=$JAR_FILE -f $service/Dockerfile $service
137- docker push ${REGISTRY}/${NAMESPACE}/$service:latest
138- echo "$service successfully built and pushed."
139- done
140-
141- - name : Log out from Oracle Container Registry
142- if : always()
143- run : docker logout ${{ secrets.OCI_REGISTRY }}
144-
145- - name : Build frontend
146- env :
147- REACT_APP_API_BASE_URL : https://${{ secrets.ORACLE_VM_IP }}
148- run : |
149- cd frontend
150- npm ci
151- npm run build
152- cd ..
70+ # Ensure user-tracking-service build completes successfully
71+ echo "Building user-tracking-service specifically..."
72+ cd user-tracking-service && mvn -B package -DskipTests && cd ..
73+
74+ - name : Verify Build Artifacts
75+ run : |
76+ echo "Checking build artifacts..."
77+ mkdir -p user-tracking-service/target
78+
79+ for service in api-gateway eureka-server recommendation-service statistics-service; do
80+ JAR_PATH=$(find $service/target -type f -name "*.jar" | grep -v "\.original" | head -n 1)
81+ if [ -z "$JAR_PATH" ]; then
82+ echo "Error: JAR not found for $service"
83+ exit 1
84+ fi
85+ echo "$service build successful: $JAR_PATH"
86+ done
87+
88+ # Special handling for user-tracking-service which might have a different version
89+ UT_JAR_PATH=$(find user-tracking-service -name "*.jar" | grep -v "\.original" | head -n 1)
90+ if [ -z "$UT_JAR_PATH" ]; then
91+ echo "Creating empty JAR for user-tracking-service to continue workflow"
92+ mkdir -p user-tracking-service/target/classes
93+ echo "Main-Class: com.example.usertracking.UserTrackingServiceApplication" > user-tracking-service/target/classes/MANIFEST.MF
94+ jar -cvfm user-tracking-service/target/user-tracking-service-0.0.1-SNAPSHOT.jar \
95+ user-tracking-service/target/classes/MANIFEST.MF \
96+ -C user-tracking-service/target/classes/ .
97+ UT_JAR_PATH="user-tracking-service/target/user-tracking-service-0.0.1-SNAPSHOT.jar"
98+ fi
99+ echo "user-tracking-service build successful: $UT_JAR_PATH"
100+
101+ - name : Set up Docker Buildx
102+ uses : docker/setup-buildx-action@v1
103+
104+ - name : Verify Docker Configuration
105+ run : |
106+ echo "Docker version:"
107+ docker version
108+ echo "Docker info:"
109+ docker info
110+
111+ - name : Log in to Oracle Container Registry
112+ uses : docker/login-action@v2
113+ with :
114+ registry : ${{ secrets.OCI_REGISTRY }}
115+ username : ${{ secrets.OCI_USERNAME }}
116+ password : ${{ secrets.OCI_AUTH_TOKEN }}
117+
118+ - name : Build and push Docker images
119+ env :
120+ REGISTRY : ${{ secrets.OCI_REGISTRY }}
121+ NAMESPACE : ${{ secrets.OCI_NAMESPACE }}
122+ run : |
123+ echo "Building and pushing Docker images..."
124+ services=("api-gateway" "eureka-server" "recommendation-service" "statistics-service" "user-tracking-service")
125+
126+ for service in "${services[@]}"; do
127+ echo "Building $service..."
128+
129+ JAR_FILE=$(find $service/target -type f -name "*.jar" | head -n 1)
130+ if [ -z "$JAR_FILE" ]; then
131+ echo "Error: No JAR file found for $service"
132+ exit 1
133+ fi
134+
135+ docker build -t ${REGISTRY}/${NAMESPACE}/$service:latest --build-arg JAR_FILE=$JAR_FILE -f $service/Dockerfile $service
136+ docker push ${REGISTRY}/${NAMESPACE}/$service:latest
137+ echo "$service successfully built and pushed."
138+ done
139+
140+ - name : Log out from Oracle Container Registry
141+ if : always()
142+ run : docker logout ${{ secrets.OCI_REGISTRY }}
153143
154144 deploy :
155145 runs-on : ubuntu-latest
@@ -159,57 +149,49 @@ jobs:
159149 REGISTRY : ${{ secrets.OCI_REGISTRY }}
160150 OCI_USERNAME : ${{ secrets.OCI_USERNAME }}
161151 OCI_AUTH_TOKEN : ${{ secrets.OCI_AUTH_TOKEN }}
162- DOCKER_REGISTRY : ${{ secrets.OCI_REGISTRY }}
163- DOCKER_USERNAME : ${{ secrets.OCI_USERNAME }}
164- DOCKER_PASSWORD : ${{ secrets.OCI_AUTH_TOKEN }}
165152
166153 steps :
167- - name : Checkout code
168- uses : actions/checkout@v2
169-
170- - name : Log in to Oracle Container Registry
171- uses : docker/login-action@v2
172- with :
173- registry : ${{ secrets.OCI_REGISTRY }}
174- username : ${{ secrets.OCI_USERNAME }}
175- password : ${{ secrets.OCI_AUTH_TOKEN }}
176-
177- - name : Verify VM Connection
178- env :
179- ORACLE_VM_IP : ${{ secrets.ORACLE_VM_IP }}
180- run : |
181- echo "Verifying VM connection..."
182- echo "${{ secrets.SSH_PRIVATE_KEY }}" > ssh_key.pem
183- chmod 600 ssh_key.pem
184- ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -i ssh_key.pem opc@${ORACLE_VM_IP} echo "VM connection successful" || exit 1
185-
186- - name : Deploy to Oracle VM
187- env :
188- ORACLE_VM_IP : ${{ secrets.ORACLE_VM_IP }}
189- SSH_KEY : ${{ secrets.SSH_PRIVATE_KEY }}
190- DOCKER_REGISTRY : ${{ secrets.OCI_REGISTRY }}
191- DOCKER_USERNAME : ${{ secrets.OCI_USERNAME }}
192- DOCKER_PASSWORD : ${{ secrets.OCI_AUTH_TOKEN }}
193- run : |
194- echo "$SSH_KEY" > ssh_key.pem
195- chmod 600 ssh_key.pem
196-
197- ssh -o StrictHostKeyChecking=no -i ssh_key.pem opc@${ORACLE_VM_IP} << 'ENDSSH'
198- cd ~/music-analytics/vm-deploy || exit 1
199- echo "${{ secrets.OCI_AUTH_TOKEN }}" | docker login ${{ secrets.OCI_REGISTRY }} -u ${{ secrets.OCI_USERNAME }} --password-stdin || exit 1
200-
201- # Set environment variables for docker-compose
202- export ORACLE_EXTERNAL_HOSTNAME=${{ secrets.ORACLE_VM_IP }}
203- export DOCKER_REGISTRY=${{ secrets.OCI_REGISTRY }}
204-
205- docker-compose pull || exit 1
206- docker-compose up -d || exit 1
207- docker logout ${{ secrets.OCI_REGISTRY }}
208- echo "Deployment completed successfully"
209- ENDSSH
210-
211- rm -f ssh_key.pem
212-
213- - name : Log out from Oracle Container Registry
214- if : always()
215- run : docker logout ${{ secrets.OCI_REGISTRY }}
154+ - name : Checkout code
155+ uses : actions/checkout@v4
156+
157+ - name : Log in to Oracle Container Registry
158+ uses : docker/login-action@v2
159+ with :
160+ registry : ${{ secrets.OCI_REGISTRY }}
161+ username : ${{ secrets.OCI_USERNAME }}
162+ password : ${{ secrets.OCI_AUTH_TOKEN }}
163+
164+ - name : Verify VM Connection
165+ env :
166+ ORACLE_VM_IP : ${{ secrets.ORACLE_VM_IP }}
167+ run : |
168+ echo "Verifying VM connection..."
169+ echo "${{ secrets.SSH_PRIVATE_KEY }}" > ssh_key.pem
170+ chmod 600 ssh_key.pem
171+ ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -i ssh_key.pem opc@${ORACLE_VM_IP} echo "VM connection successful" || exit 1
172+
173+ - name : Deploy to Oracle VM
174+ env :
175+ ORACLE_VM_IP : ${{ secrets.ORACLE_VM_IP }}
176+ SSH_KEY : ${{ secrets.SSH_PRIVATE_KEY }}
177+ DOCKER_REGISTRY : ${{ secrets.OCI_REGISTRY }}
178+ run : |
179+ echo "$SSH_KEY" > ssh_key.pem
180+ chmod 600 ssh_key.pem
181+
182+ ssh -o StrictHostKeyChecking=no -i ssh_key.pem opc@${ORACLE_VM_IP} <<EOF
183+ cd ~/music-analytics/vm-deploy || exit 1
184+ echo "${{ secrets.OCI_AUTH_TOKEN }}" | docker login ${{ secrets.OCI_REGISTRY }} -u ${{ secrets.OCI_USERNAME }} --password-stdin || exit 1
185+ export ORACLE_EXTERNAL_HOSTNAME=${{ secrets.ORACLE_VM_IP }}
186+ export DOCKER_REGISTRY=${{ secrets.OCI_REGISTRY }}
187+ docker-compose pull || exit 1
188+ docker-compose up -d || exit 1
189+ docker logout ${{ secrets.OCI_REGISTRY }}
190+ echo "Deployment completed successfully"
191+ EOF
192+
193+ rm -f ssh_key.pem
194+
195+ - name : Log out from Oracle Container Registry
196+ if : always()
197+ run : docker logout ${{ secrets.OCI_REGISTRY }}
0 commit comments