Skip to content

Commit 4373741

Browse files
committed
feat: enhance workflow with comprehensive error handling and debugging
1 parent a3907ed commit 4373741

File tree

1 file changed

+161
-24
lines changed

1 file changed

+161
-24
lines changed

.github/workflows/deploy.yml

Lines changed: 161 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)