-
Notifications
You must be signed in to change notification settings - Fork 0
130 lines (114 loc) · 6.16 KB
/
deploy_to_aca.yml
File metadata and controls
130 lines (114 loc) · 6.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
name: Reusable ACA Deployment
on:
workflow_call: # 다른 워크플로우에서 호출될 수 있도록 설정
inputs:
commit_sha:
description: "Git commit SHA to deploy"
required: true
type: string
target_environment:
description: "Target environment name (e.g., production, test)"
required: true
type: string
app_type:
description: "Type of the application (backend or frontend)"
required: true
type: string # 'backend' 또는 'frontend'
secrets:
AZURE_CREDENTIALS: # 호출하는 워크플로우로부터 Azure 자격증명 Secret을 받음
required: true
jobs:
deploy:
name: Deploy ${{ inputs.app_type }} to ${{ inputs.target_environment }} ACA
runs-on: ubuntu-latest
environment:
name: ${{ inputs.target_environment }}
# url: ${{ vars.ACA_FRONTEND_APP_URL }} # 필요시 해당 환경의 URL 설정
steps:
- name: Log in to Azure
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }} # 전달받은 Secret 사용
- name: Set Environment Variables and Construct Image Tag
id: set_vars
run: |
echo "Loading variables for environment: ${{ inputs.target_environment }}"
echo "ACA_RESOURCE_GROUP=${{ vars.ACA_RESOURCE_GROUP }}" >> $GITHUB_ENV
# --- 이미지 태그 조합 로직 시작 ---
ACR_LOGIN_SERVER_VAL="${{ secrets.ACR_LOGIN_SERVER }}"
# 환경(production/test)에 따라 ACR 리포지토리 이름 결정
if [[ "${{ inputs.target_environment }}" == "production" ]]; then
ACR_REPO_NAME="${{ vars.ACR_REPOSITORY_NAME }}"
elif [[ "${{ inputs.target_environment }}" == "test" ]]; then
ACR_REPO_NAME="${{ vars.ACR_REPOSITORY_NAME_TEST }}"
else
echo "Error: Unknown target_environment: ${{ inputs.target_environment }}"
exit 1
fi
COMMIT_SHA_FULL="${{ inputs.commit_sha }}"
SHORT_SHA=$(echo "$COMMIT_SHA_FULL" | cut -c1-7) # 앞 7자리 추출
IMAGE_TAG_VAL="sha-${SHORT_SHA}" # "sha-" 접두사 추가
FULL_IMAGE_TAG="${ACR_LOGIN_SERVER_VAL}/${ACR_REPO_NAME}:${IMAGE_TAG_VAL}"
echo "Constructed Image Tag for deployment (using ${IMAGE_TAG_VAL}): ${FULL_IMAGE_TAG}" # 로그 메시지 업데이트
echo "IMAGE_TAG_TO_DEPLOY=${FULL_IMAGE_TAG}" >> $GITHUB_ENV # 다음 단계에서 사용할 환경 변수로 설정
# --- 이미지 태그 조합 로직 끝 ---
# app_type에 따라 적절한 ACA 앱 이름 변수를 가져옴
if [[ "${{ inputs.app_type }}" == "backend" ]]; then
echo "ACA_APP_NAME=${{ vars.BACKEND_ACA_APP_NAME }}" >> $GITHUB_ENV
echo "Setting API_URL option for backend (none)"
echo "ENV_VARS_OPTION=" >> $GITHUB_ENV # 백엔드는 API_URL 설정 불필요
elif [[ "${{ inputs.app_type }}" == "frontend" ]]; then
echo "ACA_APP_NAME=${{ vars.FRONTEND_ACA_APP_NAME }}" >> $GITHUB_ENV
# 프론트엔드 배포 시 필요한 추가 변수 로드
BACKEND_URL="https://${{ vars.BACKEND_ACA_APP_NAME }}.calmforest-521dd431.eastus.azurecontainerapps.io"
echo "Setting Frontend API_URL to: $BACKEND_URL"
echo "ENV_VARS_OPTION=--set-env-vars NEXT_PUBLIC_API_URL=$BACKEND_URL API_URL=$BACKEND_URL" >> $GITHUB_ENV
else
echo "Invalid app_type: ${{ inputs.app_type }}"
exit 1
fi
echo "Target ACA App Name: ${ACA_APP_NAME:-Not Set}" # 디버깅용 로그 추가
- name: Deploy to ACA using Azure CLI
uses: azure/CLI@v1
with:
inlineScript: |
# 환경 변수가 설정되었는지 다시 확인 (디버깅)
if [[ -z "${{ env.ACA_APP_NAME }}" ]]; then
echo "Error: ACA_APP_NAME is not set!"
exit 1
fi
if [[ -z "${{ env.IMAGE_TAG_TO_DEPLOY }}" ]]; then
echo "Error: IMAGE_TAG_TO_DEPLOY is not set!"
exit 1
fi
echo "Deploying ${{ inputs.app_type }} image: ${{ env.IMAGE_TAG_TO_DEPLOY }} to ACA: ${{ env.ACA_APP_NAME }} in RG: ${{ env.ACA_RESOURCE_GROUP }}"
# ACA가 존재하는지 확인
ACA_EXISTS=$(az containerapp show --name "${{ env.ACA_APP_NAME }}" --resource-group "${{ env.ACA_RESOURCE_GROUP }}" --query "name" -o tsv 2>/dev/null || echo "false")
if [[ "$ACA_EXISTS" == "false" ]]; then
echo "Container App does not exist. Creating new one..."
# 백엔드인 경우 환경 변수 설정
if [[ "${{ inputs.app_type }}" == "backend" ]]; then
BASE_ENV_VARS="SYNC_DATABASE_URL=${{ secrets.SYNC_DATABASE_URL }} ASYNC_DATABASE_URL=${{ secrets.ASYNC_DATABASE_URL }} DB_ECHO_LOG=True SECRET_KEY=${{ secrets.SECRET_KEY }} IS_SECURE=${{ secrets.IS_SECURE }} AZURE_OPENAI_API_KEY=${{ secrets.AZURE_OPENAI_API_KEY }} AZURE_OPENAI_ENDPOINT=${{ secrets.AZURE_OPENAI_ENDPOINT }} AZURE_OPENAI_DEPLOYMENT_NAME=${{ secrets.AZURE_OPENAI_DEPLOYMENT_NAME }} AZURE_OPENAI_API_VERSION=${{ secrets.AZURE_OPENAI_API_VERSION }}"
fi
# ACA 생성
az containerapp create \
--name "${{ env.ACA_APP_NAME }}" \
--resource-group "${{ env.ACA_RESOURCE_GROUP }}" \
--environment "${{ vars.ACA_ENVIRONMENT_NAME }}" \
--image "${{ env.IMAGE_TAG_TO_DEPLOY }}" \
--target-port 8000 \
--ingress external \
--env-vars $BASE_ENV_VARS \
--cpu 0.5 \
--memory 1.0Gi \
--registry-server "${{ secrets.ACR_LOGIN_SERVER }}" \
--registry-identity system
else
# 기존 ACA 업데이트
az containerapp update \
--name "${{ env.ACA_APP_NAME }}" \
--resource-group "${{ env.ACA_RESOURCE_GROUP }}" \
--image "${{ env.IMAGE_TAG_TO_DEPLOY }}" \
$ENV_VARS_OPTION
fi
echo "${{ inputs.app_type }} deployment initiated."