Skip to content

doc: 리드미 초안 #182

doc: 리드미 초안

doc: 리드미 초안 #182

Workflow file for this run

name: Java CI/CD Pipeline
on:
push:
branches: [ dev ]
pull_request:
branches: [ dev ]
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup JDK 17
uses: actions/setup-java@v3
with:
java-version: "17"
distribution: "temurin"
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Test with Gradle
run: ./gradlew test
deploy:
needs: test
if: github.event_name == 'push' && github.ref == 'refs/heads/dev' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup JDK 17
uses: actions/setup-java@v3
with:
java-version: "17"
distribution: "temurin"
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build API Server
run: ./gradlew apiserver:clean apiserver:bootJar
- name: Build Crawler Server
run: ./gradlew crawlerserver:clean crawlerserver:bootJar
- name: Verify JAR files
run: |
echo "Checking API Server JAR:"
ls -la apiserver/build/libs/
echo "JAR file details:"
jar -tvf apiserver/build/libs/*.jar | grep -i main
echo "Checking Crawler Server JAR:"
ls -la crawlerserver/build/libs/
echo "JAR file details:"
jar -tvf crawlerserver/build/libs/*.jar | grep -i main
- name: DockerHub Login
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Docker Image Build - API Server
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/apiserver:dev -f apiserver/Dockerfile .
- name: DockerHub Push - API Server
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/apiserver:dev
- name: Docker Image Build - Crawler Server
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/crawlerserver:dev -f crawlerserver/Dockerfile .
- name: DockerHub Push - Crawler Server
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/crawlerserver:dev
- name: SSH Remote Commands
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_DEV_HOST}}
username: ec2-user
key: ${{ secrets.EC2_KEY }}
script: |
sudo yum update -y
sudo docker kill apiserver crawlerserver || true
sudo docker rm -f apiserver crawlerserver || true
sudo docker rmi ${{ secrets.DOCKERHUB_USERNAME }}/apiserver:dev ${{ secrets.DOCKERHUB_USERNAME }}/crawlerserver:dev || true
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/apiserver:dev
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/crawlerserver:dev
cat << 'EOF' > /tmp/apiserver-env-vars
PORT_API=${{ secrets.PORT_API }}
DB_PORT=${{ secrets.DB_PORT }}
DB_NAME=${{ secrets.DB_NAME_DEV }}
DB_URL=${{ secrets.DB_URL}}
JWT_SECRET=${{ secrets.JWT_SECRET }}
AWS_REGION=${{ secrets.AWS_REGION }}
CORS_ALLOWED_ORIGINS=${{ secrets.CORS_ALLOWED_ORIGINS_DEV }}
DB_USERNAME=${{ secrets.DB_USERNAME }}
DB_PASSWORD=${{ secrets.DB_PASSWORD }}
AWS_ACC_KEY=${{ secrets.AWS_ACC_KEY }}
AWS_S3_BUCKET=${{ secrets.AWS_S3_BUCKET }}
AWS_SEC_KEY=${{ secrets.AWS_SEC_KEY }}
AWS_STACK_VAL=${{ secrets.AWS_STACK_VAL }}
FILE_ALLOWED_MEME_TYPES=${{ secrets.FILE_ALLOWED_MEME_TYPES }}
JWT_ACC_EXPIRATION=${{ secrets.JWT_ACC_EXPIRATION }}
JWT_REF_EXPIRATION=${{ secrets.JWT_REF_EXPIRATION }}
REDIS_PORT=${{ secrets.REDIS_PORT }}
REDIS_URL=${{ secrets.REDIS_URL }}
SMS_API_KEY=${{ secrets.SMS_API_KEY }}
SMS_AUTH_KEY=${{ secrets.SMS_AUTH_KEY }}
SMS_SEC_KEY=${{ secrets.SMS_SEC_KEY }}
SMS_FROM_NUMBER=${{ secrets.SMS_FROM_NUMBER }}
SURVEY_DELIMITER=${{ secrets.SURVEY_DELIMITER }}
MAX_HTTP_TOMCAT_FORM_POST_SIZE=${{ secrets.MAX_HTTP_TOMCAT_FORM_POST_SIZE }}
KAKAO_API_KEY=${{secrets.KAKAO_API_KEY}}
SPRING_PROFILES_ACTIVE=dev
EOF
cat << 'EOF' > /tmp/crawlerserver-env-vars
PORT_CRAWLER=${{ secrets.PORT_CRAWLER }}
DB_PORT=${{ secrets.DB_PORT }}
DB_NAME=${{ secrets.DB_NAME }}
DB_URL=${{ secrets.DB_URL }}
DB_USERNAME=${{ secrets.DB_USERNAME }}
DB_PASSWORD=${{ secrets.DB_PASSWORD }}
MAX_USAGE_COUNT=${{ secrets.MAX_USAGE_COUNT }}
MIN_ROATION_INTERVAL=${{ secrets.MIN_ROATION_INTERVAL }}
PROXY_CLEANUP_INTERVAL=${{ secrets.PROXY_CLEANUP_INTERVAL }}
PROXY_CONNECTION_TIMEOUT=${{ secrets.PROXY_CONNECTION_TIMEOUT }}
PROXY_MAX_CONNECTION_PER_PROXY=${{ secrets.PROXY_MAX_CONNECTION_PER_PROXY }}
PROXY_MAX_FAILURES=${{ secrets.PROXY_MAX_FAILURES }}
PROXY_READ_TIMEOUT=${{ secrets.PROXY_READ_TIMEOUT }}
PROXY_RETRY_COUNT=${{ secrets.PROXY_RETRY_COUNT }}
PROXY_RETRY_DELAY=${{ secrets.PROXY_RETRY_DELAY }}
PROXY_VALIDATION_TIMEOUT=${{ secrets.PROXY_VALIDATION_TIMEOUT }}
PROXY_VALIDATION_URL=${{ secrets.PROXY_VALIDATION_URL }}
PROXY_UPLOAD_DIR=${{ secrets.PROXY_UPLOAD_DIR }}
PROXY_UPLOAD_FILE_NAME=${{ secrets.PROXY_UPLOAD_FILE_NAME }}
PROXY_UPLOAD_MAX_FILE_SIZE=${{ secrets.PROXY_UPLOAD_MAX_FILE_SIZE }}
PROXY_UPLOAD_MAX_LINES=${{ secrets.PROXY_UPLOAD_MAX_LINES }}
MAX_HTTP_TOMCAT_FORM_POST_SIZE=${{ secrets.MAX_HTTP_TOMCAT_FORM_POST_SIZE }}
SPRING_PROFILES_ACTIVE=dev
EOF
echo "Starting API Server..."
sudo docker run -d -p ${{ secrets.PORT_API }}:${{ secrets.PORT_API }} \
--name apiserver \
--env-file /tmp/apiserver-env-vars \
${{ secrets.DOCKERHUB_USERNAME }}/apiserver:dev
echo "Starting Crawler Server..."
sudo docker run -d -p ${{ secrets.PORT_CRAWLER }}:${{ secrets.PORT_CRAWLER }} \
--name crawlerserver \
--env-file /tmp/crawlerserver-env-vars \
${{ secrets.DOCKERHUB_USERNAME }}/crawlerserver:dev
echo "Checking container status..."
sudo docker ps -a
echo "API Server logs:"
sudo docker logs apiserver
echo "Crawler Server logs:"
sudo docker logs crawlerserver
rm /tmp/apiserver-env-vars /tmp/crawlerserver-env-vars