1
- name : Release CI/CD
1
+ name : Release
2
2
3
3
on :
4
4
push :
@@ -12,79 +12,110 @@ env:
12
12
DOTNET_VERSION : ' 8.0.x'
13
13
DOCKER_IMAGE_NAME : ghcr.io/projectvg/projectvgapi
14
14
ACTOR : projectvg
15
+
16
+ permissions :
17
+ contents : read
18
+ packages : write
15
19
16
20
jobs :
17
21
build :
22
+ name : Build & Push
18
23
runs-on : ubuntu-latest
19
24
20
25
steps :
21
- - name : Checkout Repository
26
+ - name : Checkout
22
27
uses : actions/checkout@v4
23
28
24
29
- name : Setup .NET
25
30
uses : actions/setup-dotnet@v4
26
31
with :
27
32
dotnet-version : ${{ env.DOTNET_VERSION }}
28
33
29
- - name : Cache NuGet packages
34
+ - name : Cache NuGet
30
35
uses : actions/cache@v4
31
36
with :
32
37
path : ~/.nuget/packages
33
38
key : ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
34
39
restore-keys : |
35
40
${{ runner.os }}-nuget-
36
41
37
- - name : 종속성 복원
42
+ - name : Restore
38
43
run : |
39
44
echo "복원 중..."
40
45
dotnet restore ProjectVG.sln
41
46
echo "복원 완료"
42
47
43
- - name : 솔루션 빌드
48
+ - name : Build
44
49
run : |
45
50
echo "🔨 빌드 중..."
46
51
dotnet build ProjectVG.sln --no-restore --configuration Release
47
52
echo "빌드 완료"
48
53
49
- - name : 단위 테스트 실행
54
+ - name : Test
50
55
run : |
51
56
echo "테스트 중..."
52
- dotnet test --no-build --configuration Release --verbosity normal --collect:"XPlat Code Coverage" --logger trx --results-directory coverage
57
+ dotnet test --no-build --configuration Release --verbosity normal
53
58
echo "테스트 완료"
54
59
55
- - name : Login to GitHub Container Registry
60
+ - name : Login GHCR
56
61
uses : docker/login-action@v3
57
62
with :
58
63
registry : ghcr.io
59
64
username : ${{ env.ACTOR }}
60
65
password : ${{ secrets.GHCR_TOKEN }}
61
66
62
- - name : Build and Push Docker Image
67
+ - name : Build & Push Image
63
68
run : |
64
69
docker build -t ${{ env.DOCKER_IMAGE_NAME }}:latest -f ProjectVG.Api/Dockerfile .
65
70
docker push ${{ env.DOCKER_IMAGE_NAME }}:latest
71
+
72
+ - name : Build Success Status
73
+ if : success()
74
+ run : |
75
+ echo "✅ 빌드 및 이미지 푸시 완료"
76
+ echo "이미지: ${{ env.DOCKER_IMAGE_NAME }}:latest"
77
+
78
+ - name : Build Failure Status
79
+ if : failure()
80
+ run : |
81
+ echo "❌ 빌드 또는 이미지 푸시 실패"
82
+ exit 1
66
83
67
84
deploy :
85
+ name : Deploy
68
86
needs : build
69
87
runs-on : [self-hosted, deploy-runner]
70
88
71
89
steps :
72
- - name : Login to GitHub Container Registry
90
+ - name : Checkout
91
+ uses : actions/checkout@v4
92
+
93
+ - name : Login GHCR
73
94
run : echo "${{ secrets.GHCR_TOKEN }}" | docker login ghcr.io -u ${{ env.ACTOR }} --password-stdin
74
95
75
- - name : Add Private Files
96
+ - name : Add Config Files
76
97
run : |
77
98
echo "${{ secrets.PROD_APPLICATION_ENV }}" | base64 --decode > .env
78
- echo "${{ secrets.PROD_DOCKER_COMPOSE }}" | base64 --decode > docker-compose.yml
99
+ echo "${{ secrets.PROD_DOCKER_COMPOSE }}" | base64 --decode > deploy/docker-compose.yml
100
+
101
+ - name : Make Script Executable
102
+ run : chmod +x deploy/deploy.sh
79
103
80
- - name : Run Deployment Script
81
- run : ./deploy.sh
104
+ - name : Deploy
105
+ run : ./deploy/deploy .sh
82
106
83
- - name : Cleanup Docker and Cache
107
+ - name : Cleanup
84
108
run : |
85
109
docker system prune -af --volumes
86
110
87
- - name : Deployment Status
111
+ - name : Deploy Success Status
112
+ if : success()
113
+ run : |
114
+ echo "✅ 배포 완료"
115
+ echo "이미지: ${{ env.DOCKER_IMAGE_NAME }}:latest"
116
+
117
+ - name : Deploy Failure Status
118
+ if : failure()
88
119
run : |
89
- echo "🚀 배포 완료 "
90
- echo "📦 이미지: ${{ env.DOCKER_IMAGE_NAME }}:latest"
120
+ echo "❌ 배포 실패 "
121
+ exit 1
0 commit comments