Skip to content

auto-cd(dev)

auto-cd(dev) #56

Workflow file for this run

name: auto-cd(dev)
on:
workflow_dispatch:
inputs:
command:
type: choice
required: true
description: "dev or prod"
options:
- dev
- prod
env:
SERVER_HOST: ${{ secrets.DEV_SERVER_HOST }}
SERVER_USER: ${{ secrets.DEV_SERVER_USER }}
SERVER_SSH_KEY: ${{ secrets.DEV_SERVER_SSH_KEY }}
SERVER_SSH_PASSPHRASE: ${{ secrets.DEV_SERVER_SSH_PASSPHRASE }}
IMAGE_TAG: ${{ inputs.command == 'dev' && '-dev' || '-prod' }}
PORT: ${{ inputs.command == 'dev' && '-p 3000:3000' || '-p 2000:2000' }}
DEPLOY_PATH: choose-tale/Gwon-Front
BRANCH: ${{github.ref_name}}
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: echo env
run: |
echo ${{ env.DEPLOY_PATH }}
echo ${{ env.BRANCH }}
- name: create npmrc
run: |
echo "${{ secrets.NPMRC }}" > .npmrc
- name: create next-env.d.ts
run: |
echo "${{ secrets.NEXT_ENV_D }}" > next-env.d.ts
- name: create env
run: |
if [[ "${{ inputs.command }}" == "dev" ]]; then
echo "${{ secrets.DEV_FRONT_CONFIG }}" > .env.production
else
echo "${{ secrets.PROD_FRONT_CONFIG }}" > .env.production
fi
- name: aws login
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- name: aws ecr get-login-password
id: login-password
run: |
aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.AWS_ECR_URI }}
- name: aws ecr build
run: |
docker build -t ${{ secrets.AWS_ECR_URI }}/choosetale:frontend${{ env.IMAGE_TAG }} .
- name: aws ecr push
run: |
docker push ${{ secrets.AWS_ECR_URI }}/choosetale:frontend${{ env.IMAGE_TAG }}
- name: Set up SSH key with passphrase
uses: webfactory/ssh-agent@v0.5.3
with:
ssh-private-key: ${{ env.SERVER_SSH_KEY }}
ssh-passphrase: ${{ env.SERVER_SSH_PASSPHRASE }}
- name: 원격 서버에 배포
run: |
ssh -o StrictHostKeyChecking=no ${{ env.SERVER_USER }}@${{ env.SERVER_HOST }} << 'EOF'
aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.AWS_ECR_URI }}
docker ps -a -q --filter "name=choosetale-frontend${{ env.IMAGE_TAG }}" | grep -q . && docker rm -f choosetale-frontend${{ env.IMAGE_TAG }} || echo "컨테이너가 없습니다."
docker images ${{ secrets.AWS_ECR_URI }}/choosetale:frontend${{ env.IMAGE_TAG }} && docker rmi ${{ secrets.AWS_ECR_URI }}/choosetale:frontend${{ env.IMAGE_TAG }} || echo "이미지가 없습니다."
docker pull ${{ secrets.AWS_ECR_URI }}/choosetale:frontend${{ env.IMAGE_TAG }}
docker run -e NEXTAUTH_SECRET=${{ secrets.NEXTAUTH_SECRET }} -d --net choosetale-network --name choosetale-frontend${{ env.IMAGE_TAG }} ${{ env.PORT }} ${{ secrets.AWS_ECR_URI }}/choosetale:frontend${{ env.IMAGE_TAG }}
EOF
- name: 슬랙 메시지 전송
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CI_CHANNEL_WEBHOOK }}
run: |
curl -X POST -H 'Content-type: application/json' --data '{"text":"프론트 배포가 완료되었습니다. port: ${{ env.PORT }} "}' $SLACK_WEBHOOK_URL
- name: SSH 키 정리
run: rm -rf ~/.ssh