devops(?)

Github action 으로 EC2 에 spring boot 배포하기(1)

방금시작한사람 2020. 7. 23. 18:21

아래 글을 보면 CI 도 github action 으로 해결했습니다

https://hi-dot.tistory.com/21

 

이제는 배포도 github action으로 해볼겁니당

 

배포는 AWS EC2, S3, CodeDeploy 를 사용할 예정입니다

 

aws codepipe line

이런 형태이지만, aws codepipeline 아닌 github action 이 해줄겁니다.

codepipeline 을 안쓰는 이유는 최소한의 도구만을 이용하고 싶어서 입니다! 

 

우선, CI 에서 테스트를 다 통과하고 build 를 해서 ~.jar 파일의 실행파일을 만들었습니다.

 

그걸 여차저차해서 EC2 에 옮기고 실행만 하면 되겠죠..?

 

1) aws cli 을 이용하여 build 파일을 S3 로 옮긴다

2) aws cli 을 이용하여 codedeploy 를 배포합니다

3) codedeploy 가 S3 에 있는 파일을 EC2 로 옮겨주고 실행하면 끝!

 

S3 는 Amazon Simple Storage Service 의 약자로 간단한 저장소입니다.

 

S3 저장소를 만들어줍니다

만들때는 리전을 EC2 와 같은 리전으로 선택해주시기 바랍니다.

 

뚝딱 만들고, 그냥 그대로 두시면됩니다. 권한 같은건 변경안해도 됩니당

어차피 AWS 내부에서 사용할 것이라, 별도의 퍼블릭 엑세스가 필요하시면 변경하셔도됩니다.

 

그다음 IAM 에서 S3 의 FullAccess 권한을 가진 사용자를 만들어줍니다.

 

기존정책직접 연결에서 S3FullAccess 권한을 선택합니다. 쭉쭉 진행

 

 

권한만 잘 보면 됩니당. 

 

 

다 만들어지면 ID 와 KEY 가 나오는데 잘 가지고 있어야됩니다.

github action 에서 aws cli 를 이용하여 S3 로 파일을 업로드하기 위한 ID 와 PW 입니다.

 

다운로드하면 파일로 저장되고, 다운하지않고 저 페이지를 나가면 다시 키를 다시 볼 수 없습니다 ;;

 

 

 

 

그럼 이제 이걸 가지고 Github action 에서 build 파일을 올려봅시다!

 

깃허브 레파지토리에서 Settings 에 Serects 에 발급받은 ID 와 Key 을 입력하면 됩니다

 

이름은 아무렇게 지어도 됩니다. 저는 AWS_S3_UPLOAD 라고 했습니당.

 

 

그다음 workflow 파일을 수정해봅시다!

 

name: Java CI with Gradle

on:
  push:
    branches: [ master, dev ]
  pull_request:
    branches: [ master, dev ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 11
      uses: actions/setup-java@v1
      with:
        java-version: 11
        
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
      
    - name: Build with Gradle
      run: |
        ./gradlew --version
        ./gradlew build # 빌드 
        
    - name: Upload S3
      env:
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_S3_UPLOAD }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_S3_UPLOAD_KEY }}
      run: |
        aws s3 cp \
          --region ap-northeast-2 \
          ./build/libs/*.jar s3://your-s3-bucket-name

 

Upload S3 를 보시면 env 에 아까 발급받은 ID 와 KEY 를 입력하는 곳이 있습니다.

 

그리고 aws cli 를 이용하여 *.jar 파일을 업로드 해줍니다.

 

 

 

다음 글은 Codedeploy 를 이용한 배포입니다.

 

끝!

 


그리고 github action 에 기본적으로 aws cli 가 깔려있습니다.

 

https://github.com/actions/virtual-environments/blob/master/images/linux/Ubuntu1804-README.md

 

actions/virtual-environments

GitHub Actions virtual environments. Contribute to actions/virtual-environments development by creating an account on GitHub.

github.com

ubuntu 18.04 기준, 깔린 프로그램입니다.

 

로컬 pc나 개발피시에서도 가능합니다. 

 

https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html

 

Installing the AWS CLI version 2 - AWS Command Line Interface

Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

docs.aws.amazon.com