[HOTFIX] cors 설정 enable #124
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Continuous Deployment for SOPT makers Authentication Development Server | |
on: | |
workflow_dispatch: | |
push: | |
branches: [ dev ] | |
jobs: | |
build-and-push-image: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: ✅ Set up JDK 21 | |
uses: actions/setup-java@v3 | |
with: | |
java-version: 21 | |
distribution: 'corretto' | |
cache: gradle | |
- name: 🔒 Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }} | |
aws-region: ${{ secrets.AWS_REGION }} | |
- name: ⚙️ Create Property File | |
run: | | |
touch ./gradle.properties | |
echo "${{ secrets.PROPERTY_GRADLE }}" >> ./gradle.properties | |
- name: 📂 Download Keys and Env from S3 | |
env: | |
REGION: ${{ secrets.AWS_REGION }} | |
S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} | |
JWT_PUBLIC_KEY_PATH: ${{ secrets.JWT_PUBLIC_KEY_PATH }} | |
JWT_PRIVATE_KEY_PATH: ${{ secrets.JWT_PRIVATE_KEY_PATH }} | |
TEST_ENV_PATH: ${{ secrets.ENV_FILE_PATH_TEST }} | |
run: | | |
mkdir -p ./src/main/resources | |
aws s3 cp s3://$S3_BUCKET/dev/static/$JWT_PUBLIC_KEY_PATH ./src/main/resources/jwt_public_key.pem --region $REGION | |
aws s3 cp s3://$S3_BUCKET/dev/static/$JWT_PRIVATE_KEY_PATH ./src/main/resources/jwt_private_key.pem --region $REGION | |
mkdir -p ./src/main/resources/env | |
aws s3 cp s3://$S3_BUCKET/dev/$TEST_ENV_PATH ./src/main/resources/env/test.env --region $REGION | |
- name: 🧱 Build and Test with Gradle | |
run: ./gradlew build --no-daemon | |
shell: bash | |
- name: 🧱 Build Image and Push to ECR Public | |
env: | |
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} | |
AWS_ECR_REPO: ${{ secrets.AWS_ECR_REPO_DEV }} | |
GITHUB_SHA: ${{ github.sha }} | |
run: | | |
IMAGE_SHA_TAG=$(echo $GITHUB_SHA | cut -c1-8) | |
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws | |
docker build --build-arg PROFILE=dev \ | |
-t public.ecr.aws/$AWS_ACCOUNT_ID/$AWS_ECR_REPO:latest \ | |
-t public.ecr.aws/$AWS_ACCOUNT_ID/$AWS_ECR_REPO:$IMAGE_SHA_TAG . | |
docker push public.ecr.aws/$AWS_ACCOUNT_ID/$AWS_ECR_REPO:latest | |
docker push public.ecr.aws/$AWS_ACCOUNT_ID/$AWS_ECR_REPO:$IMAGE_SHA_TAG | |
- name: 🗑️ Prune old ECR Public images (keep 2 latest) | |
env: | |
ECR_APP_NAME: ${{ secrets.AWS_ECR_REPO_DEV }} | |
run: | | |
echo "Pruning old images, keeping only 2 most recent..." | |
IMAGES=$(aws ecr-public describe-images \ | |
--region us-east-1 \ | |
--repository-name $ECR_APP_NAME \ | |
--query 'sort_by(imageDetails,& imagePushedAt)[*].imageDigest' \ | |
--output json) | |
COUNT=$(echo $IMAGES | jq length) | |
if [ "$COUNT" -gt 2 ]; then | |
TO_DELETE=$(echo $IMAGES | jq -c ".[:$((COUNT-2))] | [{imageDigest: .[]}]") | |
if [ "$TO_DELETE" != "[]" ]; then | |
aws ecr-public batch-delete-image \ | |
--region us-east-1 \ | |
--repository-name $ECR_APP_NAME \ | |
--image-ids "$TO_DELETE" | |
else | |
echo "No images to delete." | |
fi | |
else | |
echo "Less than or equal to 2 images, skipping prune." | |
fi | |
deploy: | |
needs: build-and-push-image | |
runs-on: ubuntu-latest | |
steps: | |
- name: 📥 Checkout Source | |
uses: actions/checkout@v3 | |
- name: 🔒 Configure AWS Credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }} | |
aws-region: ${{ secrets.AWS_REGION }} | |
- name: 📂 Download Keys and Env from S3 | |
env: | |
REGION: ${{ secrets.AWS_REGION }} | |
S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} | |
JWT_PUBLIC_KEY_PATH: ${{ secrets.JWT_PUBLIC_KEY_PATH }} | |
JWT_PRIVATE_KEY_PATH: ${{ secrets.JWT_PRIVATE_KEY_PATH }} | |
DEV_ENV_FILE_PATH: ${{ secrets.ENV_FILE_PATH_DEV }} | |
run: | | |
mkdir -p ./key | |
aws s3 cp s3://$S3_BUCKET/dev/static/$JWT_PUBLIC_KEY_PATH ./key/jwt_public_key.pem --region $REGION | |
aws s3 cp s3://$S3_BUCKET/dev/static/$JWT_PRIVATE_KEY_PATH ./key/jwt_private_key.pem --region $REGION | |
aws s3 cp s3://$S3_BUCKET/dev/$DEV_ENV_FILE_PATH .env --region $REGION | |
- name: 🔄 Transfer Deployment Files to EC2 | |
uses: appleboy/scp-action@master | |
with: | |
host: ${{ secrets.HOST_DEV }} | |
username: ec2-user | |
key: ${{ secrets.PEM_KEY_DEV }} | |
port: 22 | |
source: ".env,docker-compose.yml,scripts,key" | |
target: /home/ec2-user/authentication | |
overwrite: true | |
- name: 🚀 Remote SSH Deployment | |
uses: appleboy/ssh-action@master | |
with: | |
host: ${{ secrets.HOST_DEV }} | |
username: ec2-user | |
key: ${{ secrets.PEM_KEY_DEV }} | |
port: 22 | |
script: | | |
sudo chmod +x /home/ec2-user/authentication/scripts/*.sh | |
cd /home/ec2-user/authentication/scripts | |
./deploy.sh |