88jobs :
99 build-and-deploy :
1010 runs-on : ubuntu-latest
11+ env :
12+ ORACLE_VM_IP : ${{ secrets.VM_IP_ADDRESS }}
13+ DOCKER_REGISTRY : ${{ secrets.OCI_REGISTRY }}
14+ OCI_USERNAME : ${{ secrets.OCI_USERNAME }}
15+ OCI_AUTH_TOKEN : ${{ secrets.OCI_AUTH_TOKEN }}
16+ SSH_KEY_PATH : ~/.ssh/id_rsa
17+
1118 steps :
1219 - name : Checkout code
1320 uses : actions/checkout@v3
@@ -62,13 +69,23 @@ jobs:
6269 run : |
6370 echo "Checking JAR files..."
6471 for service in eureka-server api-gateway recommendation-service statistics-service user-tracking-service; do
65- if [ ! -f "$service/target/$service-*.jar" ] && [ ! -f "$service/target/$service.jar" ]; then
72+ jar_files=$(find $service/target -type f -name "$service*.jar" | grep -v original || echo "")
73+ if [ -z "$jar_files" ]; then
6674 echo "ERROR: JAR file for $service not found!"
6775 find $service/target -type f -name "*.jar" || echo "No JARs found"
6876 exit 1
6977 fi
7078 done
7179
80+ # Debug step: List all JAR files in target directories
81+ - name : List target directory contents
82+ run : |
83+ echo "Listing all target directories contents..."
84+ for service in eureka-server api-gateway recommendation-service statistics-service user-tracking-service; do
85+ echo "=== $service/target contents: ==="
86+ ls -la $service/target/ || echo "No target directory found"
87+ done
88+
7289 # Critical step: Prepare Docker build context
7390 - name : Prepare Docker build context
7491 run : |
@@ -86,51 +103,95 @@ jobs:
86103 cp $(find statistics-service/target -name "statistics-service*.jar" | grep -v original) vm-deploy/statistics-service/statistics-service.jar
87104 cp $(find user-tracking-service/target -name "user-tracking-service*.jar" | grep -v original) vm-deploy/user-tracking-service/user-tracking-service.jar
88105
106+ # Copy Dockerfiles
107+ cp eureka-server/Dockerfile vm-deploy/eureka-server/
108+ cp api-gateway/Dockerfile vm-deploy/api-gateway/
109+ cp recommendation-service/Dockerfile vm-deploy/recommendation-service/
110+ cp statistics-service/Dockerfile vm-deploy/statistics-service/
111+ cp user-tracking-service/Dockerfile vm-deploy/user-tracking-service/
112+
89113 # Verify files were copied
90- echo "Verifying copied JAR files:"
114+ echo "Verifying copied files:"
91115 ls -la vm-deploy/*/
92116
117+ - name : Debug environment variables
118+ run : |
119+ echo "Checking environment variables (with sensitive data masked):"
120+ echo "ORACLE_VM_IP is set: ${{ secrets.VM_IP_ADDRESS != '' }}"
121+ echo "DOCKER_REGISTRY is set: ${{ secrets.OCI_REGISTRY != '' }}"
122+ echo "OCI_USERNAME is set: ${{ secrets.OCI_USERNAME != '' }}"
123+ echo "OCI_AUTH_TOKEN is set: ${{ secrets.OCI_AUTH_TOKEN != '' }}"
124+
93125 - name : Set up SSH key
94126 run : |
127+ # Create directory and set permissions
95128 mkdir -p ~/.ssh
96- echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
97- chmod 600 ~/.ssh/id_rsa
129+
130+ # Write the SSH key with proper error handling
131+ if [ -z "${{ secrets.SSH_PRIVATE_KEY }}" ]; then
132+ echo "ERROR: SSH_PRIVATE_KEY secret is not set!"
133+ exit 1
134+ fi
135+
136+ echo "${{ secrets.SSH_PRIVATE_KEY }}" > ${{ env.SSH_KEY_PATH }}
137+ chmod 600 ${{ env.SSH_KEY_PATH }}
138+
139+ # Verify the key was written correctly
140+ if [ ! -f "${{ env.SSH_KEY_PATH }}" ]; then
141+ echo "ERROR: Failed to create SSH key file!"
142+ exit 1
143+ fi
144+
145+ # Verify permissions
146+ ls -la ${{ env.SSH_KEY_PATH }}
147+
148+ # Add VM to known hosts - verify VM_IP_ADDRESS is set
149+ if [ -z "${{ secrets.VM_IP_ADDRESS }}" ]; then
150+ echo "ERROR: VM_IP_ADDRESS secret is not set!"
151+ exit 1
152+ fi
153+
98154 ssh-keyscan -H ${{ secrets.VM_IP_ADDRESS }} >> ~/.ssh/known_hosts
155+
156+ # Test SSH connection
157+ echo "Testing SSH connection..."
158+ ssh -o StrictHostKeyChecking=no -i ${{ env.SSH_KEY_PATH }} opc@${{ secrets.VM_IP_ADDRESS }} "echo SSH connection successful"
99159
100160 - name : Deploy to Oracle VM
101- env :
102- ORACLE_VM_IP : ${{ secrets.VM_IP_ADDRESS }}
103- DOCKER_REGISTRY : ${{ secrets.OCI_REGISTRY }}
104- OCI_USERNAME : ${{ secrets.OCI_USERNAME }}
105- OCI_AUTH_TOKEN : ${{ secrets.OCI_AUTH_TOKEN }}
106161 run : |
107- # Verify VM connection
108- ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa opc@${ORACLE_VM_IP} "echo VM connection verified"
109-
110162 # Create directories on VM
111- ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa opc@${ORACLE_VM_IP } "mkdir -p ~/music-analytics/vm-deploy/{eureka-server,api-gateway,recommendation-service,statistics-service,user-tracking-service}"
163+ ssh -o StrictHostKeyChecking=no -i ${{ env.SSH_KEY_PATH }} opc@${{ secrets.VM_IP_ADDRESS } } "mkdir -p ~/music-analytics/vm-deploy/{eureka-server,api-gateway,recommendation-service,statistics-service,user-tracking-service}"
112164
113- # Copy Dockerfiles and JAR files to VM
114- scp -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa vm-deploy/eureka-server/Dockerfile vm-deploy/eureka-server/eureka-server.jar opc@${ORACLE_VM_IP}:~/music-analytics/vm-deploy/eureka-server/
115-
116- # Repeat for other services...
117- # [Add similar scp commands for other services]
165+ # Copy JAR files and Dockerfiles to VM
166+ scp -o StrictHostKeyChecking=no -i ${{ env.SSH_KEY_PATH }} vm-deploy/eureka-server/eureka-server.jar vm-deploy/eureka-server/Dockerfile opc@${{ secrets.VM_IP_ADDRESS }}:~/music-analytics/vm-deploy/eureka-server/
167+ scp -o StrictHostKeyChecking=no -i ${{ env.SSH_KEY_PATH }} vm-deploy/api-gateway/api-gateway.jar vm-deploy/api-gateway/Dockerfile opc@${{ secrets.VM_IP_ADDRESS }}:~/music-analytics/vm-deploy/api-gateway/
168+ scp -o StrictHostKeyChecking=no -i ${{ env.SSH_KEY_PATH }} vm-deploy/recommendation-service/recommendation-service.jar vm-deploy/recommendation-service/Dockerfile opc@${{ secrets.VM_IP_ADDRESS }}:~/music-analytics/vm-deploy/recommendation-service/
169+ scp -o StrictHostKeyChecking=no -i ${{ env.SSH_KEY_PATH }} vm-deploy/statistics-service/statistics-service.jar vm-deploy/statistics-service/Dockerfile opc@${{ secrets.VM_IP_ADDRESS }}:~/music-analytics/vm-deploy/statistics-service/
170+ scp -o StrictHostKeyChecking=no -i ${{ env.SSH_KEY_PATH }} vm-deploy/user-tracking-service/user-tracking-service.jar vm-deploy/user-tracking-service/Dockerfile opc@${{ secrets.VM_IP_ADDRESS }}:~/music-analytics/vm-deploy/user-tracking-service/
118171
119172 # Copy docker-compose file
120- scp -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa cloud-deploy/docker-compose.direct.yml opc@${ORACLE_VM_IP }:~/music-analytics/vm-deploy/docker-compose.yml
173+ scp -o StrictHostKeyChecking=no -i ${{ env.SSH_KEY_PATH }} cloud-deploy/docker-compose.direct.yml opc@${{ secrets.VM_IP_ADDRESS } }:~/music-analytics/vm-deploy/docker-compose.yml
121174
122175 # Build and run containers
123- ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa opc@${ORACLE_VM_IP} "cd ~/music-analytics/vm-deploy && \
124- docker login ${DOCKER_REGISTRY} -u ${OCI_USERNAME} -p ${OCI_AUTH_TOKEN} && \
176+ ssh -o StrictHostKeyChecking=no -i ${{ env.SSH_KEY_PATH }} opc@${{ secrets.VM_IP_ADDRESS }} "cd ~/music-analytics/vm-deploy && \
177+ echo 'Logging in to Docker registry...' && \
178+ docker login ${{ env.DOCKER_REGISTRY }} -u ${{ env.OCI_USERNAME }} -p ${{ env.OCI_AUTH_TOKEN }} && \
179+ echo 'Stopping existing containers...' && \
125180 docker-compose down --remove-orphans || true && \
181+ echo 'Starting new containers...' && \
126182 docker-compose up -d && \
183+ echo 'Container status:' && \
127184 docker-compose ps"
128185
129186 # Debug command
130187 - name : Debug on failure
131188 if : failure()
132189 run : |
133- ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa opc@${ORACLE_VM_IP} '
134- echo "==== EUREKA SERVER LOGS ====" &&
135- docker logs vm-deploy-eureka-server-1 || echo "No logs available"
136- '
190+ if [ -f "${{ env.SSH_KEY_PATH }}" ]; then
191+ ssh -o StrictHostKeyChecking=no -i ${{ env.SSH_KEY_PATH }} opc@${{ secrets.VM_IP_ADDRESS }} '
192+ echo "==== EUREKA SERVER LOGS ====" &&
193+ docker logs $(docker ps -q -f name=eureka-server) || echo "No eureka-server logs available"
194+ '
195+ else
196+ echo "SSH key file not found, cannot retrieve logs"
197+ fi
0 commit comments