1- name : continuous deployment
1+ name : continuous deployment (prod)
22
33on :
44 push :
@@ -9,17 +9,26 @@ permissions:
99 contents : read
1010
1111env :
12- AWS_REGION : ap-northeast-2
13- # ECR_REPOSITORY: jecthome/was-repo
14- S3_BUCKET_NAME : ject-bucket
15- CODE_DEPLOY_APPLICATION_NAME : ject-apply-deployer
16- CODE_DEPLOY_DEPLOYMENT_GROUP_NAME : actions-deployer
12+ AWS_REGION : ${{ secrets.AWS_REGION }}
13+ ECR_REPOSITORY : ${{ secrets.ECR_REPOSITORY }}
14+ AWS_ACCESS_KEY_ID : ${{ secrets.AWS_ACCESS_KEY_ID }}
15+ AWS_SECRET_ACCESS_KEY : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
16+ EC2_HOST : ${{ secrets.EC2_HOST }}
17+ EC2_SSH_KEY : ${{ secrets.EC2_SSH_KEY }}
1718
1819jobs :
19- build-deploy :
20+ build-and- deploy :
2021 runs-on : ubuntu-latest
22+
2123 steps :
22- - uses : actions/checkout@v4
24+ - name : Checkout code
25+ uses : actions/checkout@v4
26+
27+ - name : Set up JDK 21
28+ uses : actions/setup-java@v4
29+ with :
30+ java-version : ' 21'
31+ distribution : ' temurin'
2332
2433 - name : Cache Gradle packages
2534 uses : actions/cache@v4
@@ -31,92 +40,58 @@ jobs:
3140 restore-keys : |
3241 ${{ runner.os }}-gradle-
3342
34- - name : Set up JDK 21
35- uses : actions/setup-java@v4
36- with :
37- java-version : ' 21'
38- distribution : ' corretto'
39-
40- - name : AWS credential 설정
41- uses : aws-actions/configure-aws-credentials@v4
42- with :
43- aws-region : ${{ env.AWS_REGION }}
44- aws-access-key-id : ${{ secrets.AWS_ACCESS_KEY_ID }}
45- aws-secret-access-key : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
46-
47- # - name: ECR 로그인
48- # id: login-ecr
49- # uses: aws-actions/amazon-ecr-login@v2
43+ - name : Grant execute permission for gradlew
44+ run : chmod +x gradlew
5045
51- - name : S3에서 설정파일 복사
46+ - name : Copy the configuration file in S3
5247 run : |
5348 aws s3 cp s3://ject-bucket/properties/application-prod.yml \
5449 ./src/main/resources/application-prod.yml
5550
56- - name : gradle 실행 권한 부여
57- run : chmod +x ./gradlew
51+ - name : Build with Gradle
52+ run : ./gradlew clean build -x test
5853
59- - name : gradle 빌드
60- run : ./gradlew clean build -x test --no-daemon
54+ - name : Configure AWS credentials
55+ uses : aws-actions/configure-aws-credentials@v4
56+ with :
57+ aws-access-key-id : ${{ env.AWS_ACCESS_KEY_ID }}
58+ aws-secret-access-key : ${{ env.AWS_SECRET_ACCESS_KEY }}
59+ aws-region : ${{ env.AWS_REGION }}
6160
62- - name : Upload to AWS S3
63- run : |
64- aws deploy push \
65- --application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \
66- --ignore-hidden-files \
67- --s3-location s3://$S3_BUCKET_NAME/apps/$GITHUB_SHA.zip \
68- --source .
61+ - name : Login to Amazon ECR
62+ id : login-ecr
63+ uses : aws-actions/amazon-ecr-login@v2
6964
70- - name : Deploy to AWS EC2 from S3
65+ - name : Build, tag, and push image to Amazon ECR
66+ id : build-image
67+ env :
68+ ECR_REGISTRY : ${{ steps.login-ecr.outputs.registry }}
69+ IMAGE_TAG : ${{ github.sha }}
7170 run : |
72- aws deploy create-deployment \
73- --application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \
74- --deployment-config-name CodeDeployDefault.AllAtOnce \
75- --deployment-group-name ${{ env.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }} \
76- --s3-location bucket=$S3_BUCKET_NAME,key=apps/$GITHUB_SHA.zip,bundleType=zip
71+
72+ docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
73+ docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
74+
75+ docker tag $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG $ECR_REGISTRY/$ECR_REPOSITORY:latest
76+ docker push $ECR_REGISTRY/$ECR_REPOSITORY:latest
77+
78+ echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_OUTPUT
7779
78- # - name: Docker 이미지 빌드 및 ECR 배포
79- # id: build-image
80- # env:
81- # ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
82- # IMAGE_TAG: latest
83- # run: |
84- # docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
85- # docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
86- # echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_OUTPUT
87- #
88- # - name: EC2로 파일 복사 (compose-prod.yaml 및 nginx.conf 포함)
89- # uses: appleboy/scp-action@master
90- # with:
91- # host: ${{ secrets.EC2_IP }}
92- # username: ${{ secrets.EC2_USERNAME }}
93- # key: ${{ secrets.EC2_SSH_KEY }}
94- # source: './compose-prod.yml,./nginx.conf'
95- # target: '/home/ubuntu'
96- #
97- # - name: EC2에서 Docker Compose를 통한 애플리케이션 실행
98- # uses: appleboy/ssh-action@master
99- # with:
100- # host: ${{ secrets.EC2_IP }}
101- # username: ${{ secrets.EC2_USERNAME }}
102- # key: ${{ secrets.EC2_SSH_KEY }}
103- # script: |
104- # export AWS_REGION=${{ env.AWS_REGION }}
105- # export ECR_URI=${{ secrets.ECR_URI }}
106- # export ECR_REPOSITORY=${{ env.ECR_REPOSITORY }}
107- #
108- # # .env 파일 생성 및 ECR_IMAGE 변수 추가
109- # touch /home/ubuntu/.env
110- # echo ECR_IMAGE=${{ steps.build-image.outputs.image }} >> /home/ubuntu/.env
111- #
112- # # ECR 레지스트리에 로그인
113- # aws ecr get-login-password --region $AWS_REGION | sudo docker login --username AWS --password-stdin $ECR_URI/$ECR_REPOSITORY
114- #
115- # # 기존 컨테이너 다운
116- # sudo docker compose -f ~/compose-prod.yml down
117- #
118- # # 최신 이미지 Pull
119- # sudo docker compose -f ~/compose-prod.yml pull
120- #
121- # # 컨테이너 실행
122- # sudo docker compose -f ~/compose-prod.yml up -d
80+ - name : Blue-Green Deploy to EC2
81+ uses : appleboy/ssh-action@v1.0.3
82+ env :
83+ ECR_REGISTRY : ${{ steps.login-ecr.outputs.registry }}
84+ ECR_REPOSITORY : ${{ env.ECR_REPOSITORY }}
85+ IMAGE_TAG : ${{ github.sha }}
86+ with :
87+ host : ${{ env.EC2_HOST }}
88+ username : ec2-user
89+ key : ${{ env.EC2_SSH_KEY }}
90+ envs : ECR_REGISTRY,ECR_REPOSITORY,IMAGE_TAG
91+ script : |
92+ cd /home/ec2-user/app
93+ chmod +x deploy.sh
94+ export ECR_REGISTRY=$ECR_REGISTRY
95+ export ECR_REPOSITORY=$ECR_REPOSITORY
96+ export IMAGE_TAG=$IMAGE_TAG
97+ ./deploy.sh deploy
0 commit comments