Back-end

[CI/CD] GitHub Actions๋ฅผ ์ด์šฉํ•œ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ์ž๋™ํ™”

์„œ์ฑ„๋ฆฌ 2023. 8. 10. 20:34

๐ŸŒŠ ๋ฐฐํฌ ํ๋ฆ„

 

๐Ÿง GitHub Actions๋ž€

Github๊ฐ€ ๊ณต์‹์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” CI/CD ํ”Œ๋žซํผ

GitHub Actions ์‚ฌ์šฉ ์‹œ repository์—์„œ ์ด๋ฒคํŠธ(PR ํ˜น์€ push)๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ํŠน์ • ์ž‘์—…์„ ์‹คํ–‰ํ•ด ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • CI/CD ์›Œํฌํ”Œ๋กœ์šฐ
    push, PR(Pull Request) ์ƒ์„ฑ, Issue ๋“ฑ์˜ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ์ง€์ •๋œ ์ž‘์—…์„ ์‹คํ–‰ํ•˜์—ฌ ์ง€์†์ ์œผ๋กœ ํ†ตํ•ฉํ•˜๊ณ  ๋ฐฐํฌํ•œ๋‹ค.
    ์ด๋ฅผ ํ†ตํ•ด ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ์ฝ”๋“œ ๋ฆฌ๋ทฐ, ๋ฐฐํฌ ๋“ฑ์˜ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ž๋™ํ™”
    ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ…Œ์ŠคํŠธํ•˜์—ฌ ํ’ˆ์งˆ ๊ด€๋ฆฌ๋ฅผ ๊ฐ•ํ™”ํ•˜๊ณ , ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ๋ฐ ๋ถ„์„ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์‹๋ณ„ํ•œ๋‹ค.
  • ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™”
    ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ, ๋ฒ„์ „ ๊ด€๋ฆฌ, ์•Œ๋ฆผ ๋ฐ ํ†ต์ง€, ๋ฌธ์„œ ์ƒ์„ฑ ๋“ฑ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.

GitHub Actions๋Š” YAML ๊ธฐ๋ฐ˜์˜ workflow ํŒŒ์ผ์„ ํ†ตํ•ด ์ž‘์—… ๋‹จ๊ณ„, ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ํŠธ๋ฆฌ๊ฑฐ ์กฐ๊ฑด ๋“ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•„์š”ํ•œ ๋„๊ตฌ ๋ฐ ์„œ๋น„์Šค์™€์˜ ํ†ตํ•ฉ์„ ์ง€์›ํ•œ๋‹ค.

 

๐Ÿง Code Deploy๋ž€

AWS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ์ž๋™ํ™” ์„œ๋น„์Šค
 

CICD - Codedeploy๋ž€? (Codedeploy๋ฅผ ์ด์šฉํ•œ ์ž๋™๋ฐฐํฌ(CD) ํ™˜๊ฒฝ ๊ตฌ์ถ•ํ•˜๊ธฐ)

AWs CodeDeployแ„…แ…กแ†ซ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” AWS์˜ ๋ฐฐํฌ์„œ๋น„์Šค์ธ Code Deploy์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Code deploy๋ž€?CodeDeploy๋Š” SourceCode๋ฅผ ์šด์˜ํ™˜๊ฒฝ์— ์ž๋™ ๋ฐฐํฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” AWS Service์ž…๋‹ˆ๋‹ค

galid1.tistory.com

Code Deploy์— ๊ด€ํ•œ ์ •๋ณด์™€ ์„ค์ •์€ ํ•ด๋‹น ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 


๐Ÿ‘ ์‚ฌ์ „ ์ค€๋น„

1. Pulbic Repository์—ฌ์•ผ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
2. AWS CLI์™€ Code Deploy Agent๊ฐ€ EC2์— ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
3. S3 ๋ฒ„ํ‚ท์ด ์ƒ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๐ŸŒฑ EC2์— AWS CLI ์„ค์น˜ (โ—๏ธUbuntu ๊ธฐ์ค€โ—๏ธ)

1. AWS CLI๋ฅผ ์„ค์น˜ํ•  ๋•Œ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜

$ sudo apt install curl unzip

 

2. curl์„ ํ†ตํ•ด awscliv2.zip ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›์•„ ์••์ถ• ํ’€๊ธฐ

# awscliv2.zip ํŒŒ์ผ ๋‹ค์šด
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

# ์••์ถ• ํ’€๊ธฐ
$ unzip awscliv2.zip

 

3. AWS CLI ์„ค์น˜๋ฅผ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰

$ sudo ./aws/install
You can now run: /usr/local/bin/aws --version

$ aws --version
aws-cli/2.13.0 Python/3.11.4 Linux/5.19.0-1026-aws exe/x86_64.ubuntu.22 prompt/off

 4. ์™„๋ฃŒ~

 

๐ŸŒฑ EC2์— AWS Code Deploy ์„ค์น˜ (โ—๏ธUbuntu ๊ธฐ์ค€โ—๏ธ)

๋‚˜์˜ ๊ฒฝ์šฐ ์šฐ๋ถ„ํˆฌ๋ผ ๊ณต์‹ ๋ฌธ์„œ์˜ ์‚ฌ์šฉ ์„ค๋ช…์„œ๋ฅผ ์ฐธ๊ณ ํ•ด EC2์— Code Deploy๋ฅผ ์„ค์น˜ํ•ด ์ฃผ์—ˆ๋‹ค.

$ sudo apt update

$ sudo apt install ruby-full

$ sudo apt install wget

$ cd /home/ubuntu

$ wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install

$ chmod +x ./install

$ sudo ./install auto

 

โœŒ๏ธ ๋ฆฌ์†Œ์Šค ์„ค์ •

1๏ธโƒฃ Github Actions ์ƒ์„ฑ

ํ”„๋กœ์ ํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ -> โ–ถ๏ธ Actions๋กœ ์ด๋™ํ•ด workflow ์„ค์ •ํ•œ๋‹ค.

 

set up a workflow yourself ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋นˆ yml ์„ค์ •ํŒŒ์ผ๋กœ workflow๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ 

Suggested for this repository์—์„œ ์ถ”์ฒœ workflow ๊ตฌ์„ฑ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2๏ธโƒฃ Github Action ์„ค์ • ํŒŒ์ผ(Workflow) ๋งŒ๋“ค๊ธฐ

์šฐ์„  Java with Gradle์˜ workflow ๊ตฌ์„ฑ์„ ํด๋ฆญํ–ˆ๋”๋‹ˆ ์•„๋ž˜ workflow๊ฐ€ ์ถ”์ฒœ๋˜์—ˆ๋‹ค.

name: Java CI with Gradle

on:
  push:
    branches: [ "develop" ]
  pull_request:
    branches: [ "develop" ]

permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up JDK 11
      uses: actions/setup-java@v3
      with:
        java-version: '11'
        distribution: 'temurin'
    - name: Build with Gradle
      uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
      with:
        arguments: build

 

โ—๏ธGitHub Secret ๋“ฑ๋ก

GitHub Secret์€ API ํ‚ค๋‚˜ passsword ๊ฐ™์€ ๋ณด์•ˆ ์ด์Šˆ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ด ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
secrets์— ์›ํ•˜๋Š” ๊ฐ’ ์ž…๋ ฅ ์‹œ actions์˜ workflow๊ฐ€ ์‹คํ–‰๋  ๋•Œ ํ•ด๋‹น secrets์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
์ด๋•Œ ๋™์ ์œผ๋กœ secrets์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ทจํ•ฉํ•ด .env ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.

GitHub Actions์— ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์„ AWS์˜ S3 ๋ฒ„ํ‚ท์— ์ „์†กํ•˜๋Š” workflow๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ AWS์˜ Access Key์™€ Secret Key๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ์ด๋ฅผ ๊ณต๊ฐœํ•  ๊ฒฝ์šฐ ๋ณด์•ˆ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ GitHub Secret ์„ ๋“ฑ๋กํ•ด ๋ณด์•ˆ์ด ํ•„์š”ํ•œ ๊ฐ’๋“ค์„ ์ €์žฅํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

ํ”„๋กœ์ ํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ > Settings > Secrets and variables > Actions ๋กœ  ์ด๋™ํ•ด New repository secret์„ ํด๋ฆญํ•œ๋‹ค.

 

Access key๋ฅผ ๋ฐœ๊ธ‰๋ฐ›๋Š” ๊ณผ์ •์€ ํ•ด๋‹น ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. 

 

[AWS] AWS Access key ๋ฐœ๊ธ‰๋ฐ›๊ณ  aws-cli ์‚ฌ์šฉํ•˜๊ธฐ

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” AWS Access key๋ฅผ ๋ฐœ๊ธ‰๋ฐ›๊ณ  aws-cli๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•์„ ์ •๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค IAM์— ๋“ค์–ด๊ฐ€๊ธฐ ๋จผ์ €, [Security, Identity, & Compiliance] -> [IAM] ์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์„ ํƒํ•˜์—ฌ ๋“ค์–ด๊ฐ€๊ธฐ Users ํƒญ์— ๋“ค

seosh817.tistory.com

 

Name์—๋Š” AWS_ACCESS_KEY์„, Secret์—๋Š” ๊ฐ’์„ ์ž…๋ ฅํ•ด ์ €์žฅํ•˜๋ฉด workflow์—์„œ ${{secrets.AWS_ACCESS_KEY}} ํ˜•ํƒœ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๋”ฐ๋ผ์„œ workflow ํŒŒ์ผ์— AWS Access Key์™€ Secret Access Key๋ฅผ ์ถ”๊ฐ€ํ•ด AWS ๊ถŒํ•œ์„ ํ™•์ธํ•œ๋‹ค.

# Access Key์™€ Secret Key๋ฅผ ํ†ตํ•ด ๊ถŒํ•œ์„ ํ™•์ธํ•œ๋‹ค.
- name: AWS Configure credentials
  uses: aws-actions/configure-aws-credentials@v1
  with:
    aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
    aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
    aws-region: ap-northeast-2

 

โ—๏ธ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’๋“ค์€ env๋กœ ์ง€์ •

env:
  PROJECT_NAME: ํ”„๋กœ์ ํŠธ ์ด๋ฆ„
  S3_BUCKET_NAME: Amazon S3 Bucket ์ด๋ฆ„
  CODE_DEPLOY_APPLICATION_NAME: Amazon Code Deploy ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„
  CODE_DEPLOY_DEPLOYMENT_GROUP_NAME: Code Deploy ๊ทธ๋ฃน ์ด๋ฆ„

 

โ—๏ธ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์„ S3 ๋ฒ„ํ‚ท์— ์ „์†ก

- ์šฐ์„  gradlew ํŒŒ์ผ์— ์‹คํ–‰ ๊ถŒํ•œ์„ ์ถ”๊ฐ€ํ•ด ์ค€ ํ›„ Gradle์„ ์‚ฌ์šฉํ•ด ์ปจํŠธ๋กค๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

(๋‚˜์˜ ๊ฒฝ์šฐ API ๋ฌธ์„œ๋กœ REST Docs๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปจํŠธ๋กค๋Ÿฌ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜์–ด์•ผ API ๋ฌธ์„œ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.)

- name: Grant execute permission for gradlew
  run: chmod +x ./gradlew

- name: Controller Test with Gradle
  run: ./gradlew test --tests "{์ปจํŠธ๋กค๋Ÿฌ ํ…Œ์ŠคํŠธ ๊ฒฝ๋กœ}"

 

- Gradle์„ ์‚ฌ์šฉํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์ œ์™ธํ•˜๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•œ ํ›„ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ์••์ถ•ํ•˜์—ฌ zip ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.

- name: Build with Gradle
  run: ./gradlew build -x test

- name: Make zip file
  run: zip -qq -r ./$GITHUB_SHA.zip .
  shell: bash

 

  • zip
    ํŒŒ์ผ์„ ์••์ถ•ํ•˜๋Š” ๋ช…๋ น์–ด
  • -qq
    "Quiet" ๋ชจ๋“œ. ์••์ถ• ๊ณผ์ • ์ค‘ ๋ฉ”์‹œ์ง€ ์ตœ์†Œํ™”
  • -r
    "Recursive" ๋ชจ๋“œ. ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํƒ์ƒ‰ํ•ด ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์™€ ํŒŒ์ผ ๋ชจ๋‘ ์••์ถ•
  • ./$GITHUB_SHA.zip
    ์••์ถ•๋œ ๊ฒฐ๊ณผ ํŒŒ์ผ์˜ ์ด๋ฆ„. '$GITHUB_SHA' ๋Š” GitHub์—์„œ ์ œ๊ณตํ•˜๋Š” ํ˜„์žฌ ์ปค๋ฐ‹์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ์ปค๋ฐ‹๋ณ„๋กœ ๊ณ ์œ ํ•œ ์••์ถ• ํŒŒ์ผ ์ด๋ฆ„ ์ƒ์„ฑ ๊ฐ€๋Šฅ
  • .
    ์••์ถ• ๋Œ€์ƒ. ์—ฌ๊ธฐ์„œ๋Š” ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ํŒŒ์ผ๊ณผ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํฌํ•จํ•˜์—ฌ ์••์ถ•ํ•˜๋ผ๋Š” ์˜๋ฏธ

 

- ๋นŒ๋“œ๋œ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ S3 ๋ฒ„ํ‚ท์œผ๋กœ ๋ณต์‚ฌ

- name: Upload to S3
  run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.zip s3://${{ env.S3_BUCKET_NAME }}/${{ env.PROJECT_NAME }}/$GITHUB_SHA.zip
  • --region ap-northeast-2
    ์—…๋กœ๋“œํ•  S3 ๋ฒ„ํ‚ท์˜ AWS region
  • ./$GITHUB_SHA.zip
    ๋กœ์ปฌ์— ์ƒ์„ฑ๋œ ์••์ถ• ํŒŒ์ผ ๊ฒฝ๋กœ
  • s3://${{ env.S3_BUCKET_NAME }}/${{ env.PROJECT_NAME }}/$GITHUB_SHA.zip
    S3 ๋ฒ„ํ‚ท์˜ ๊ฒฝ๋กœ

 

- AWS CodeDeploy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ

- name: Deploy with AWS codeDeploy
  run: aws deploy create-deployment
    --application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }}
    --deployment-group-name ${{ env.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }}
    --deployment-config-name CodeDeployDefault.AllAtOnce
    --s3-location bucket=$S3_BUCKET_NAME,key=$PROJECT_NAME/$GITHUB_SHA.zip,bundleType=zip
  • aws deploy create-deployment
    ์ƒˆ๋กœ์šด ๋ฐฐํฌ ์ƒ์„ฑ
  • --application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }}
    ๋ฐฐํฌํ•  AWS CodeDeploy ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„ ์ง€์ •
  • --deployment-group-name ${{ env.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }}
    ๋ฐฐํฌํ•  AWS CodeDeploy ๋ฐฐํฌ ๊ทธ๋ฃน ์ด๋ฆ„ ์ง€์ •
  • --deployment-config-name CodeDeployDefault.AllAtOnce
    ๋ฐฐํฌ ๊ตฌ์„ฑ ์ด๋ฆ„(CodeDeploy Application ์ƒ์„ฑ ์‹œ ์ •ํ•œ ๋ฐฐํฌ ๊ตฌ์„ฑ)
  • --s3-location bucket=$S3_BUCKET_NAME,key=$PROJECT_NAME/$GITHUB_SHA.zip,bundleType=zip
    S3์—์„œ ๋ฐฐํฌํ•  ๋ฐฐํฌ ํŒŒ์ผ์˜ ์œ„์น˜ ์ง€์ •

 

โœ… ์™„์„ฑ๋œ ํ’€ ์Šคํฌ๋ฆฝํŠธ

name: Deploy to Amazon EC2

on:
  push:
    branches: [ "develop" ]

permissions:
  contents: read

env:
  PROJECT_NAME: ํ”„๋กœ์ ํŠธ ์ด๋ฆ„
  S3_BUCKET_NAME: Amazon S3 Bucket ์ด๋ฆ„
  CODE_DEPLOY_APPLICATION_NAME: Amazon Code Deploy ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„
  CODE_DEPLOY_DEPLOYMENT_GROUP_NAME: Code Deploy ๊ทธ๋ฃน ์ด๋ฆ„

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v3
    
    - name: Set up JDK 17
      uses: actions/setup-java@v3
      with:
        java-version: '17'
        distribution: 'temurin'
        
    - name: Grant execute permission for gradlew
      run: chmod +x ./gradlew
    
    - name: Controller Test with Gradle
      run: ./gradlew test --tests "์ปจํŠธ๋กค๋Ÿฌ ํ…Œ์ŠคํŠธ ๊ฒฝ๋กœ"
        
    - name: Build with Gradle
      run: ./gradlew build -x test

    - name: Make zip file
      run: zip -qq -r ./$GITHUB_SHA.zip .
      shell: bash
        
    - name: AWS Configure credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
        aws-region: ap-northeast-2

    - name: Upload to S3
      run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.zip s3://${{ env.S3_BUCKET_NAME }}/${{ env.PROJECT_NAME }}/$GITHUB_SHA.zip
      
    - name: Deploy with AWS codeDeploy
      run: aws deploy create-deployment
        --application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }}
        --deployment-group-name ${{ env.CODE_DEPLOY_DEPLOYMENT_GROUP_NAME }}
        --deployment-config-name CodeDeployDefault.AllAtOnce
        --s3-location bucket=$S3_BUCKET_NAME,key=$PROJECT_NAME/$GITHUB_SHA.zip,bundleType=zip

 

yml ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ commitํ›„ push ํ•˜๋ฉด gradle.yml ํŒŒ์ผ์ด ์ƒ์„ฑ๋จ๊ณผ ๋™์‹œ์— workflow์— ์ž‘์„ฑ๋œ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ํ†ตํ•ด S3 ๋ฒ„ํ‚ท์— ์••์ถ• ํŒŒ์ผ์ด ์ „์†ก๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Actions ํƒญ์—์„œ ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ์˜ ๊ฐ ๋‹จ๊ณ„๋ณ„ ์ง„ํ–‰ ์ƒํ™ฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ง„ํ–‰/์„ฑ๊ณต/์‹คํŒจ ์—ฌ๋ถ€๋Š” repository์—์„œ ์ตœ๊ทผ commit ๋‚ด์—ญ๊ณผ ํ•จ๊ป˜ ํ‘œ์‹œ๋œ๋‹ค.

 

https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html

https://jinmay.github.io/2020/05/13/aws/how-to-install-code-deploy-agent-ubuntu/