Skip to content

Commit 5c8fe45

Browse files
committed
chore: update service configurations and improve logging for better debugging
1 parent 9bdee0f commit 5c8fe45

File tree

1 file changed

+163
-181
lines changed

1 file changed

+163
-181
lines changed

.github/workflows/deploy.yml

Lines changed: 163 additions & 181 deletions
Original file line numberDiff line numberDiff line change
@@ -17,139 +17,129 @@ env:
1717
jobs:
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

Comments
 (0)