@@ -18,10 +18,18 @@ jobs:
1818 with :
1919 java-version : ' 17'
2020 distribution : ' temurin'
21- server-id : central # This will create settings.xml with these credentials
21+ server-id : central
2222 server-username : MAVEN_USERNAME
2323 server-password : MAVEN_PASSWORD
2424
25+ # Verify Maven configuration
26+ - name : Debug Maven Configuration
27+ run : |
28+ echo "Verifying Maven configuration..."
29+ echo "JAVA_HOME: $JAVA_HOME"
30+ mvn -version
31+ ls -la ~/.m2 || true
32+
2533 # Create local Maven settings with credentials
2634 - name : Setup Maven Settings
2735 run : |
@@ -45,51 +53,125 @@ jobs:
4553 <mirrorOf>central</mirrorOf>
4654 </mirror>
4755 </mirrors>
56+ <profiles>
57+ <profile>
58+ <id>default</id>
59+ <repositories>
60+ <repository>
61+ <id>central</id>
62+ <url>https://repo1.maven.org/maven2</url>
63+ <releases>
64+ <enabled>true</enabled>
65+ </releases>
66+ <snapshots>
67+ <enabled>false</enabled>
68+ </snapshots>
69+ </repository>
70+ </repositories>
71+ </profile>
72+ </profiles>
73+ <activeProfiles>
74+ <activeProfile>default</activeProfile>
75+ </activeProfiles>
4876 </settings>" > ~/.m2/settings.xml
77+
78+ echo "Maven settings created. Verifying content:"
79+ cat ~/.m2/settings.xml
4980
5081 # Build with Maven using explicit credentials
5182 - name : Build with Maven
5283 env :
5384 MAVEN_USERNAME : ${{ secrets.MAVEN_USERNAME }}
5485 MAVEN_PASSWORD : ${{ secrets.MAVEN_PASSWORD }}
5586 run : |
56- mvn -B -s ~/.m2/settings.xml clean install -DskipTests
87+ echo "Starting Maven build..."
88+ mvn -B -X -s ~/.m2/settings.xml clean install -DskipTests || {
89+ echo "Maven build failed. Checking settings..."
90+ ls -la ~/.m2
91+ echo "Current directory contents:"
92+ ls -la
93+ exit 1
94+ }
95+
96+ # Verify build artifacts
97+ - name : Verify Build Artifacts
98+ run : |
99+ echo "Checking build artifacts..."
100+ for service in api-gateway eureka-server recommendation-service statistics-service user-tracking-service; do
101+ if [ -f "$service/target/$service-1.0-SNAPSHOT.jar" ]; then
102+ echo "$service build successful"
103+ else
104+ echo "Error: $service build failed - JAR not found"
105+ exit 1
106+ }
107+ done
57108
58109 # Set up Docker buildx
59110 - name : Set up Docker Buildx
60111 uses : docker/setup-buildx-action@v1
61112
62- # Login to Docker registry (Oracle Container Registry)
113+ # Verify Docker setup
114+ - name : Verify Docker Configuration
115+ run : |
116+ echo "Docker version:"
117+ docker version
118+ echo "Docker info:"
119+ docker info
120+
121+ # Login to Oracle Container Registry
63122 - name : Log in to Oracle Container Registry
64123 uses : docker/login-action@v1
65124 with :
66125 registry : ${{ secrets.OCI_REGISTRY }}
67126 username : ${{ secrets.OCI_USERNAME }}
68127 password : ${{ secrets.OCI_AUTH_TOKEN }}
69128
70- # Build and push Docker images with explicit environment variables
129+ # Build and push Docker images with better error handling
71130 - name : Build and push Docker images
72131 env :
73132 REGISTRY : ${{ secrets.OCI_REGISTRY }}
74133 NAMESPACE : ${{ secrets.OCI_NAMESPACE }}
75- OCI_USERNAME : ${{ secrets.OCI_USERNAME }}
76- OCI_AUTH_TOKEN : ${{ secrets.OCI_AUTH_TOKEN }}
77134 run : |
78- # Verify Docker login state
79- docker login ${REGISTRY} -u ${OCI_USERNAME} -p ${OCI_AUTH_TOKEN}
135+ echo "Building and pushing Docker images..."
80136
81- # Build and push images
82- docker build -t ${REGISTRY}/${NAMESPACE}/api-gateway:latest -f api-gateway/Dockerfile .
83- docker build -t ${REGISTRY}/${NAMESPACE}/eureka-server:latest -f eureka-server/Dockerfile .
84- docker build -t ${REGISTRY}/${NAMESPACE}/recommendation-service:latest -f recommendation-service/Dockerfile .
85- docker build -t ${REGISTRY}/${NAMESPACE}/statistics-service:latest -f statistics-service/Dockerfile .
86- docker build -t ${REGISTRY}/${NAMESPACE}/user-tracking-service:latest -f user-tracking-service/Dockerfile .
137+ # Function to build and push an image
138+ build_and_push() {
139+ local service=$1
140+ echo "Processing $service..."
141+
142+ # Build image
143+ echo "Building $service image..."
144+ docker build -t ${REGISTRY}/${NAMESPACE}/$service:latest -f $service/Dockerfile . || {
145+ echo "Error building $service image"
146+ return 1
147+ }
148+
149+ # Push image
150+ echo "Pushing $service image..."
151+ docker push ${REGISTRY}/${NAMESPACE}/$service:latest || {
152+ echo "Error pushing $service image"
153+ return 1
154+ }
155+
156+ echo "$service successfully built and pushed"
157+ return 0
158+ }
87159
88- docker push ${REGISTRY}/${NAMESPACE}/api-gateway:latest
89- docker push ${REGISTRY}/${NAMESPACE}/eureka-server:latest
90- docker push ${REGISTRY}/${NAMESPACE}/recommendation-service:latest
91- docker push ${REGISTRY}/${NAMESPACE}/statistics-service:latest
92- docker push ${REGISTRY}/${NAMESPACE}/user-tracking-service:latest
160+ # Process each service
161+ services=("api-gateway" "eureka-server" "recommendation-service" "statistics-service" "user-tracking-service")
162+ for service in "${services[@]}"; do
163+ build_and_push $service || {
164+ echo "Failed to process $service"
165+ exit 1
166+ }
167+ done
168+
169+ # Logout from Docker registry
170+ - name : Log out from Oracle Container Registry
171+ if : always()
172+ run : |
173+ echo "Logging out from Docker registry..."
174+ docker logout ${{ secrets.OCI_REGISTRY }}
93175
94176 deploy :
95177 runs-on : ubuntu-latest
@@ -103,16 +185,71 @@ jobs:
103185 - name : Checkout code
104186 uses : actions/checkout@v2
105187
188+ # Login to Oracle Container Registry for deployment
189+ - name : Log in to Oracle Container Registry
190+ uses : docker/login-action@v1
191+ with :
192+ registry : ${{ secrets.OCI_REGISTRY }}
193+ username : ${{ secrets.OCI_USERNAME }}
194+ password : ${{ secrets.OCI_AUTH_TOKEN }}
195+
196+ # Verify VM connection before deployment
197+ - name : Verify VM Connection
198+ env :
199+ ORACLE_VM_IP : ${{ secrets.ORACLE_VM_IP }}
200+ run : |
201+ echo "Verifying VM connection..."
202+ echo "${{ secrets.SSH_PRIVATE_KEY }}" > ssh_key.pem
203+ chmod 600 ssh_key.pem
204+ ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -i ssh_key.pem opc@${ORACLE_VM_IP} echo "VM connection successful" || {
205+ echo "Failed to connect to VM"
206+ exit 1
207+ }
208+
106209 - name : Deploy to Oracle VM
107210 env :
108211 ORACLE_VM_IP : ${{ secrets.ORACLE_VM_IP }}
109212 run : |
213+ echo "Starting deployment..."
110214 echo "${{ secrets.SSH_PRIVATE_KEY }}" > ssh_key.pem
111215 chmod 600 ssh_key.pem
112216 ssh -o StrictHostKeyChecking=no -i ssh_key.pem opc@${ORACLE_VM_IP} << 'EOF'
113- cd ~/music-analytics/vm-deploy
114- docker login ${REGISTRY} -u ${OCI_USERNAME} -p ${OCI_AUTH_TOKEN}
115- docker-compose pull
116- docker-compose up -d
117- EOF
217+ echo "Deploying to VM..."
218+ cd ~/music-analytics/vm-deploy || {
219+ echo "Failed to change directory"
220+ exit 1
221+ }
222+
223+ echo "Logging into Docker registry..."
224+ docker login ${REGISTRY} -u ${OCI_USERNAME} -p ${OCI_AUTH_TOKEN} || {
225+ echo "Docker login failed"
226+ exit 1
227+ }
228+
229+ echo "Pulling latest images..."
230+ docker-compose pull || {
231+ echo "Failed to pull images"
232+ docker logout ${REGISTRY}
233+ exit 1
234+ }
235+
236+ echo "Starting services..."
237+ docker-compose up -d || {
238+ echo "Failed to start services"
239+ docker logout ${REGISTRY}
240+ exit 1
241+ }
242+
243+ echo "Logging out from Docker registry..."
244+ docker logout ${REGISTRY}
245+
246+ echo "Deployment completed successfully"
247+ EOF
118248 rm -f ssh_key.pem # Clean up sensitive files
249+
250+ # Logout from Docker registry
251+ - name : Log out from Oracle Container Registry
252+ if : always()
253+ run : |
254+ echo "Final cleanup: Logging out from Docker registry..."
255+ docker logout ${{ secrets.OCI_REGISTRY }}
0 commit comments