728x90
반응형
SMALL

AWS S3 연동하기

AWS S3는 파일 서버 역할을 한다. github action에서 빌드한 결과를 저장해 놓는 기능을 할 예정이며 flow는 다음과 같다.

AWS는 외부 서비스의 접근을 기본적으로 허용하지 않는다. 따라서 IAM(Identify & Access Management)를 사용하여 접근 권한을 획득해야 한다.

IAM 설정

AWS IAM에서 사용자 그룹에서 ‘사용자 추가’를 한다. 여기서 사용자란 AWS 외부에서 접속할 수 있는 권한을 줄 대상을 말한다.

해당 페이지에서 ‘AmazonS3FullAccess’, ‘AWSCodeDepolyFullAccess’ 두 가지 요소를 활성화 시킨다.

 

그러면 해당 권한을 가진 사용자가 생성되고 ACCESSKEY와 SECRETKEY가 발급이 된다.

권한 설정을 했으니 이제 실제로 S3에서 저장될 버킷을 생성한다.

S3 Bucket 설정

S3에서 ‘버킷 만들기’를 한다. 3단계 권한 설정에서 모든 퍼블릭 액세스 차단 이외에는 디폴트 옵션을 사용하였다.

github 설정

이제 github repository에서 해당 키 값들을 세팅한다. action에 키 값을 그대로 노출하는 것은 보안상 문제가 되므로 repository의 ‘Settings -> Secret’에서 해당 키 값을 등록해준다.


workflow에 S3로 파일을 옮기기

name: Deploy to Amazon EC2

on:
  push:
    branches: [ "main" ]
#   pull_request:
#     branches: [ "feature" ]

env:
  AWS_REGION: ap-northeast-2 (지역명!)
  S3_BUCKET_NAME: s3 버킷 이름
  ZIP_NAME: zip -r ./프로젝트명.zip .
  APPLICATION: ./src/main/resources/application.yml
	  # AWS 인증 (IAM 사용자 Access Key, Secret Key 활용)
    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: ${{ env.AWS_REGION }}

    #  빌드 결과물을 S3 버킷에 업로드
    - name: Upload to AWS S3
      run: |
        aws deploy push \\
          --application-name ${{ env.CODE_DEPLOY_APPLICATION_NAME }} \\
          --ignore-hidden-files \\
          --s3-location s3://$S3_BUCKET_NAME/$GITHUB_SHA.zip \\
          --source .

이렇게 맨 위쪽과 아래쪽에 입력을 해주면 됩니다!
실패할 경우 에러코드를 보면서 이름이나 깃허브 설정에서 키를 입력하지 않았거나 다른 지는 확인하면 됩니다!
AWS인증 부터는 코드의 변경은 비추합니다..  후에 codedeploy를 실행할 때, 작동이 하지 않을 수도 있습니다.!

secrets -> 깃허브 설정에 있는 키를 가져옵니다.
env -> 상단에 있는 부분을 활용합니다.(본인이 설정한 키를 입력하기!)


728x90
반응형
LIST

'개발 > sw' 카테고리의 다른 글

인스턴스IP 도메인 연결  (0) 2023.03.31
Codedeploy SQL 오류  (0) 2023.03.30
CodeDeploy  (0) 2023.03.30
CI/CD 구축 github action (3)  (0) 2023.03.28
CI/CD 구축 github action (1)  (0) 2023.03.28
728x90
반응형
SMALL

CI/CD

서비스 기능 개발 이후에는 빌드, 테스트, 소스 병합, 릴리즈, 배포라는 일련의 과정을 거친다. 하지만 이런 작업들은 생각보다 굉장히 번거로운 작업이며 프로젝트 규모가 클수록 괴로움은 증가한다.

CI/CD는 Continuous Integration, Continuous Deliver, Continuous Deployment를 나타내는 용어이며 위 과정들을 자동화하여 불필요한 공수를 줄이고 보다 빠른 서비스 제공을 할 수 있는 효과를 가질 수 있다.

CI/CD 구축을 지원하는 툴은 생각보다 많다.

  • Jenkins
  • Travis CI
  • Circle CI
  • Google Cloud Build
  • AWS CodeBuild

각 툴은 요금 체계부터 특성이 모두 다르므로 프로젝트에 적합한 것을 선택하면 된다. 이 포스팅에서는 github action을 사용하여 구축을 시도한다.

 

Github Action이란?

github action은 18년에 공개되어 베타 테스트를 거쳐 19년 부터 서비스를 하고 있는 비교적 최신 기술이다. 아래는 github에서 제공하는 개요이다.

Automate, customize, and execute your software development workflows right in your repository with GitHub Actions. You can discover, create, and share actions to perform any job you’d like, including CI/CD, and combine actions in a completely customized workflow.

github action은 ci/cd만을 위한 도구는 아니고, 다양한 workflow를 작성할 수 있다고 되어있다. 일례로 cron 식을 사용하여 batch job을 실행할 수 있는 기능을 제공한다. 또한, 이는 github 자체에서 제공하는 기능이기 때문에 다른 서드파티를 사용하는 것보다 관리해야할 포인트가 줄어든다는 이점을 가진다.

 

Workflow 작성하기전에!

저는 자바 11로 jdk도 11로 시작했습니다.

프로젝트에서 우클릭 후 Directory 클릭 후 build.gradle을 만들어 주고 필요한 의존성 주입을 해주고 링크빌리드 클릭하면 강제로 주입되게 됩니다.

src폴더를 만들고, main과 test폴더를 만들어서 하위에 폴더 완성하면 자동 주입 완성!!
만약 적용이 되지 않을 경우 "Mark Directoory as"에서 선택!!

없을 경우 프로젝트 구성에서 모듈을 클릭해서 주입시킬 수 있다!


먼저 인텔리제이의 폴더 구조

상위폴더에서 시작!
초기 설정부터 상위폴더에서 시작!
디렉토리안에 있던 파일 꺼내온 모습

이런식으로 디렉토리가 구성되어있는지 확인이 필요합니다!
저는 디렉토리가 하나 더 있어서 몇 주... 고생했습니다...
물론 디렉토리에서 하는 방법도 있지만, action에서 빌드를 인식을 하지 못하는 단점이 있어
폴더 안에서 꺼내와서 실행할 수 는 있지만, 실행시키는 과정에서 에러가 뜨게됩니다... 

결국 다시 처음부터 만들기 시작했습니다.

227...다 액션 시도..입니다 ㅠㅠㅠ


Workflow 작성하기

저는 java with gradle를 선택했습니다.

name: Deploy to Amazon EC2

on:
#   push:
#     branches: [ "main" ]
  pull_request:
    branches: [ "feature" ]

이름은 자기 마음대로 할 수 있습니다.
먼저 저희 프로젝트는 주로 feature에서 개발을 진행하고, 실험한 후 dev로 옮긴 후 변동 사항이 없으면 main으로 옮기는 식으로 깃 플로우를 정했습니다.

permissions:
  contents: read

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest
    environment: production

    steps:
    #  기본 체크아웃
    - name: Checkout
      uses: actions/checkout@v2
   #  JDK 11 세팅
    - name: Set up JDK 11
      uses: actions/setup-java@v1
      with:
        java-version: '11'
        distribution: 'temurin'
        
    # Gradle build (Test 제외)
    - name: Build with Gradle
      uses: gradle/gradle-build-action@(깃허브 액션에서 주는 것 이용!!)
      with:
        arguments: clean build -x test

저희는 test는 제외했습니다. 기본 체크 아웃 하고 jdk 11의 @1 이나 @2는 구성에 따라 달라서 맞는 방식을 찾는게 중요합니다.!

        - name: Build with Gradle
          uses: gradle/gradle-build-action@v2
          with:
            gradle-version: 7.5.1
            arguments: build 

빌드가 되지 않을 경우 버전을 주입해서 시도해보는 것도 좋습니다!

    #  디렉토리 생성
    - name: Make Directory
      run: mkdir -p deploy
    #  Jar 파일 복사
    - name: Copy Jar
      run: cp ./build/libs/*.jar ./deploy

위 사항을 넣지 않아도 잘 되는건 확인했지만, 저는 혹시라도 문제가 발생할 수도 있어 넣었습니다.


여기까지 했다면, 깃 액션에서 기본 구조는 완성했습니다!

    # (2) application.yml 추가
    - run: touch ./src/main/resources/application.yml
    - run: echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.yml
    - run: cat ./src/main/resources/application.yml

저희는 실행을 yml파일로 하기 때문에 yml을 넣어주었습니다!
깃허브 레파지토리 설정에 들어가서 키를 입력해주면 됩니다!

1차완성 코드 

name: Deploy to Amazon EC2

on:
#   push:
#     branches: [ "main" ]
  pull_request:
    branches: [ "feature" ]

env:
  APPLICATION: ./src/main/resources/application.yml

permissions:
  contents: read

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest
    environment: production

    steps:
    # (1) 기본 체크아웃
    - name: Checkout
      uses: actions/checkout@v2
      
    # (2) application.yml 추가
    - run: touch ./src/main/resources/application.yml
    - run: echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.yml
    - run: cat ./src/main/resources/application.yml
    
    # (3) JDK 11 세팅
    - name: Set up JDK 11
      uses: actions/setup-java@v1
      with:
        java-version: '11'
        distribution: 'temurin'
        
    # (4) Gradle build (Test 제외)
    - name: Build with Gradle
      uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
      with:
        arguments: clean build -x test
    # (5) 디렉토리 생성
    - name: Make Directory
      run: mkdir -p deploy
    # (6) Jar 파일 복사
    - name: Copy Jar
      run: cp ./build/libs/*.jar ./deploy

./src/main/resources/application.yml -> 파일 위치 설정!! 확인!!
디렉토리안에서 진행하시는 분들은
./디렉토리 파일명/src/main/resources/application.yml 이렇게 진행하게 되면 됩니다!

728x90
반응형
LIST

'개발 > sw' 카테고리의 다른 글

인스턴스IP 도메인 연결  (0) 2023.03.31
Codedeploy SQL 오류  (0) 2023.03.30
CodeDeploy  (0) 2023.03.30
CI/CD 구축 github action (3)  (0) 2023.03.28
CI/CD 구축 github action (2)  (0) 2023.03.28

+ Recent posts