Skip to content

Commit 5822728

Browse files
committed
feat: enhance deployment workflow with environment variable management, SSH key handling, and debug steps
1 parent 192119f commit 5822728

File tree

2 files changed

+92
-26
lines changed

2 files changed

+92
-26
lines changed

.github/workflows/deploy.yml

Lines changed: 86 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ on:
88
jobs:
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

eureka-server/pom.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<project xmlns="http://maven.apache.org/POM/4.0.0"
22
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://www.apache.org/xsd/maven-4.0.0.xsd">
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
44
<modelVersion>4.0.0</modelVersion>
55

66
<groupId>com.example</groupId>
@@ -34,6 +34,7 @@
3434
</dependencies>
3535

3636
<build>
37+
<finalName>${project.artifactId}-${project.version}</finalName>
3738
<plugins>
3839
<plugin>
3940
<groupId>org.apache.maven.plugins</groupId>
@@ -55,6 +56,10 @@
5556
</goals>
5657
</execution>
5758
</executions>
59+
<configuration>
60+
<mainClass>com.example.eurekaserver.EurekaServerApplication</mainClass>
61+
<outputDirectory>${project.build.directory}</outputDirectory>
62+
</configuration>
5863
</plugin>
5964
</plugins>
6065
</build>

0 commit comments

Comments
 (0)