Skip to content

Merge pull request #199 from AiKU-Dev/develop #82

Merge pull request #199 from AiKU-Dev/develop

Merge pull request #199 from AiKU-Dev/develop #82

Workflow file for this run

name: Java CI with Gradle
on:
push:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Start MySQL
uses: mirromutth/[email protected]
with:
host port: 3306
container port: 3306
mysql version: '8.0'
mysql database: 'aiku'
mysql root password: 1234
- name: Start Redis
uses: supercharge/[email protected]
with:
redis-version: 6
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582
- name: Create resource file
run: |
mkdir -p aiku/aiku-main/src/test/resources
mkdir -p aiku/aiku-map/src/test/resources
echo "${{ secrets.AIKU_MAIN_TEST_CONFIG }}" > aiku/aiku-main/src/test/resources/application.yml
echo "${{ secrets.AIKU_MAP_TEST_CONFIG }}" > aiku/aiku-map/src/test/resources/application.yml
echo "${{ secrets.FIREBASE_CONFIG }}" > aiku/aiku-alarm/src/main/resources/aiku2024-firebase-adminsdk-9fjfc-df87d6f024.json
- name: Build with Gradle Wrapper
working-directory: aiku
env:
AWS_ACCESS: ${{ secrets.AWS_ACCESS }}
AWS_BUCKET: ${{ secrets.AWS_BUCKET }}
AWS_SECRET: ${{ secrets.AWS_SECRET }}
CUSTOM_PASSWORD: ${{ secrets.CUSTOM_PASSWORD }}
GMAIL_ACCOUNT: ${{ secrets.GMAIL_ACCOUNT }}
GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }}
GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }}
GOOGLE_REFRESH_TOKEN: ${{ secrets.GOOGLE_REFRESH_TOKEN }}
JWT_SECRET: ${{ secrets.JWT_SECRET }}
KAKAO_APP_ID: ${{ secrets.KAKAO_APP_ID }}
APPLE_APP_ID: ${{ secrets.APPLE_APP_ID }}
MYSQL_PASSWORD: 1234
MYSQL_URL: jdbc:mysql://localhost:3306/aiku
MYSQL_USERNAME: root
KAFKA_SERVER_URL: ${{ secrets.KAFKA_SERVER_URL }}
AIKU_MAIN_IP: ${{ secrets.AIKU_MAIN_IP }}
AIKU_MAP_IP: ${{ secrets.AIKU_MAP_IP }}
run: |
./gradlew :aiku-gateway:build
./gradlew :aiku-main:build
./gradlew :aiku-alarm:build
# ./gradlew :aiku-map:build
- name: Stop MySQL
if: always()
run: docker stop mysql || true
- name: Stop Redis
if: always()
run: docker stop redis || true
- name: Build Docker image of aiku-gateway
working-directory: aiku/aiku-gateway
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/aiku-gateway:${{ github.sha }} .
- name: Build Docker image of aiku-main
working-directory: aiku/aiku-main
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/aiku-main:${{ github.sha }} .
- name: Build Docker image of aiku-alarm
working-directory: aiku/aiku-alarm
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/aiku-alarm:${{ github.sha }} .
# - name: Build Docker image of aiku-map
# working-directory: aiku/aiku-map
# run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/aiku-map:${{ github.sha }} .
- name: Log in to Docker Hub
run: echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin
- name: Push Docker image to Docker Hub
run: |
docker push ${{ secrets.DOCKERHUB_USERNAME }}/aiku-gateway:${{ github.sha }}
docker push ${{ secrets.DOCKERHUB_USERNAME }}/aiku-main:${{ github.sha }}
docker push ${{ secrets.DOCKERHUB_USERNAME }}/aiku-alarm:${{ github.sha }}
# docker push ${{ secrets.DOCKERHUB_USERNAME }}/aiku-map:${{ github.sha }}
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- name: excuting remote ssh commands to gateway
uses: appleboy/[email protected]
with:
host: ${{ secrets.EC2_AIKU_GATEWAY_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key : ${{ secrets.EC2_AIKU_GATEWAY_SSH_KEY }}
port: 22
script: |
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/aiku-gateway:${{ github.sha }}
if [ "$(docker ps -aq -f name=aiku-gateway)" ]; then
docker container stop aiku-gateway
docker container rm aiku-gateway
fi
docker run -d \
--name aiku-gateway \
--network="my_network" \
-e MYSQL_URL=${{ secrets.MYSQL_URL }} \
-e MYSQL_USERNAME=${{ secrets.MYSQL_USERNAME }} \
-e MYSQL_PASSWORD=${{ secrets.MYSQL_PASSWORD }} \
-e AIKU_MAIN_IP=${{ secrets.AIKU_MAIN_IP }} \
-e AIKU_MAP_IP=${{ secrets.AIKU_MAP_IP }} \
-e JWT_SECRET=${{ secrets.JWT_SECRET }} \
-e CUSTOM_PASSWORD=${{ secrets.CUSTOM_PASSWORD }} \
${{ secrets.DOCKERHUB_USERNAME }}/aiku-gateway:${{ github.sha }}
- name: excuting remote ssh commands to main
uses: appleboy/[email protected]
with:
host: ${{ secrets.EC2_AIKU_MAIN_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key : ${{ secrets.EC2_AIKU_MAIN_SSH_KEY }}
port: 22
script: |
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/aiku-main:${{ github.sha }}
if [ "$(docker ps -aq -f name=aiku-main)" ]; then
docker container stop aiku-main
docker container rm aiku-main
fi
docker run -d \
--name aiku-main \
--log-driver=awslogs \
--log-opt awslogs-region=ap-northeast-2 \
--log-opt awslogs-group=aiku-main \
--log-opt awslogs-stream=${{ secrets.EC2_AIKU_MAIN_ID }} \
--log-opt awslogs-multiline-pattern="^\[[a-f0-9-]{36}\]" \
--network="host" \
-e MYSQL_URL=${{ secrets.MYSQL_URL }} \
-e MYSQL_USERNAME=${{ secrets.MYSQL_USERNAME }} \
-e MYSQL_PASSWORD=${{ secrets.MYSQL_PASSWORD }} \
-e KAFKA_SERVER_URL=${{ secrets.KAFKA_SERVER_URL }} \
-e GOOGLE_CLIENT_ID=${{ secrets.GOOGLE_CLIENT_ID }} \
-e GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }} \
-e GOOGLE_REFRESH_TOKEN=${{ secrets.GOOGLE_REFRESH_TOKEN }} \
-e GMAIL_ACCOUNT=${{ secrets.GMAIL_ACCOUNT }} \
-e JWT_SECRET=${{ secrets.JWT_SECRET }} \
-e CUSTOM_PASSWORD=${{ secrets.CUSTOM_PASSWORD }} \
-e KAKAO_APP_ID=${{ secrets.KAKAO_APP_ID }} \
-e APPLE_APP_ID=${{ secrets.APPLE_APP_ID }} \
-e AWS_BUCKET=${{ secrets.AWS_BUCKET }} \
-e AWS_ACCESS=${{ secrets.AWS_ACCESS }} \
-e AWS_SECRET=${{ secrets.AWS_SECRET }} \
${{ secrets.DOCKERHUB_USERNAME }}/aiku-main:${{ github.sha }}
# - name: excuting remote ssh commands to map
# uses: appleboy/[email protected]
# with:
# host: ${{ secrets.EC2_AIKU_MAP_HOST }}
# username: ${{ secrets.EC2_USERNAME }}
# key : ${{ secrets.EC2_AIKU_MAP_SSH_KEY }}
# port: 22
# script: |
# docker pull ${{ secrets.DOCKERHUB_USERNAME }}/aiku-map:${{ github.sha }}
# if [ "$(docker ps -aq -f name=aiku-map)" ]; then
# docker container stop aiku-map
# docker container rm aiku-map
# fi
# docker run -d \
# --name aiku-map \
# --log-driver=awslogs \
# --log-opt awslogs-region=ap-northeast-2 \
# --log-opt awslogs-group=aiku-map \
# --log-opt awslogs-stream=${{ secrets.EC2_AIKU_MAP_ID }} \
# --log-opt awslogs-multiline-pattern="^\[[a-f0-9-]{36}\]" \
# --network="host" \
# -e MYSQL_URL=${{ secrets.MYSQL_URL }} \
# -e MYSQL_USERNAME=${{ secrets.MYSQL_USERNAME }} \
# -e MYSQL_PASSWORD=${{ secrets.MYSQL_PASSWORD }} \
# -e KAFKA_SERVER_URL=${{ secrets.KAFKA_SERVER_URL }} \
# ${{ secrets.DOCKERHUB_USERNAME }}/aiku-map:${{ github.sha }}
- name: excuting remote ssh commands to alarm
uses: appleboy/[email protected]
with:
host: ${{ secrets.EC2_AIKU_ALARM_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key : ${{ secrets.EC2_AIKU_ALARM_SSH_KEY }}
port: 22
script: |
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/aiku-alarm:${{ github.sha }}
if [ "$(docker ps -aq -f name=aiku-alarm)" ]; then
docker container stop aiku-alarm
docker container rm aiku-alarm
fi
docker run -d \
--name aiku-alarm \
--log-driver=awslogs \
--log-opt awslogs-region=ap-northeast-2 \
--log-opt awslogs-group=aiku-alarm \
--log-opt awslogs-stream=${{ secrets.EC2_AIKU_ALARM_ID }} \
--log-opt awslogs-multiline-pattern="^\[[a-f0-9-]{36}\]" \
--network="host" \
-e MYSQL_URL=${{ secrets.MYSQL_URL }} \
-e MYSQL_USERNAME=${{ secrets.MYSQL_USERNAME }} \
-e MYSQL_PASSWORD=${{ secrets.MYSQL_PASSWORD }} \
-e KAFKA_SERVER_URL=${{ secrets.KAFKA_SERVER_URL }} \
${{ secrets.DOCKERHUB_USERNAME }}/aiku-alarm:${{ github.sha }}