프로젝트 중 무중단 배포 필요성을 느껴 ci/cd 구축을 해봤습니다.

여러 블로그에 리눅스, 우분투 혼용해서 설정한 정보글이 많기도 하고,

java코드는 기록이 남지만 aws ubuntu , S3, codedeploy 설정은 기록이 안남아서 까먹을 까봐 찾아본 정보를 기록합니다.

 

AWS S3 연동하기

AWS IAM(사용자) 추가하기

사용자 추가는 외부에서 접속 할 수 있는 권한을 가진 대상을 설정하는 과정입니다. 

 

IAM 검색 하시고 사용자 클릭합니다.

 

 

사용자 추가 눌러줍니다.

 

 

원하는 이름을 적고,  사용자 접속할 때 쓰일 액세스 키를 체크 하도 다음 버튼을 누릅니다.

 

 

 

다음 기존 정책 직접 연결 선택하시고, 뒤에서 사용하게 될 S3,CodeDeploy정책("AmazonS3FullAccess", "AWSCodeDeployFullAccess" )을 활성화하고 다음을 눌릅니다.  

 

 

사용자 Name(키) - 값을 정해주고 다음, 사용자 생성을 눌러줍니다.

 

 

사용자 추가가 완료되면 '액세스 키ID' 와  '비밀 액세스 키' 는 본인만 알 수 있게 저장 해두면 끝입니다.

 

S3 Bucket 설정

 

 

S3 검색하시고 버킷 클릭합니다.

 

 

버킷 만들기 클릭합니다.

 

 

 

 

원하시는 이름과  지역을 입력합니다.

 

 

 

엑세스 차단 설정하고  제일 하단에 버킷 생성 버튼 누르면 끝입니다.

(이미지첨부, 파일 다운로드 등 외부에서도 파일을 읽게 하고 싶으면 차단 해제하면 됩니다) 

버킷 생성 완료

 

 

IAM(사용자) 접근을 위한  github 설정

 

 

CI/CD 적용 repository - Settings 탭 - Security - Secrets - Actions 클릭해줍니다.

 

 

 

 

New repository Secret 눌러주세요

 

 

 

Name : AWS_ACCESS_KEY_ID

Value : IAM사용자 설정 시 발급 받은 액세스 키ID 입력  후

Add Secret 버튼 눌러주세요 

 

 

동일한 방법으로 AWS_SECRET_ACCESS_KEY  시크릿키까지 적용해 주시면 됩니다.

 

 

 

Github Actions에서 빌드된 파일을 S3로 옮기는 job추가하기

 

 

gradle.yml에 코드 추가 후 github   push 합니다.

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle

name: Java CI with Gradle

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]


jobs:
  build:
    runs-on: ubuntu-20.04

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8

      - name: Grant execute permission for gradlew
        run: chmod +x gradlew
        shell: bash

      - name: Build with Gradle
        run: ./gradlew build
        shell: bash

      - name: Make Directory for deliver
        run: mkdir deploy

        # Jar file Copy
      - name: Copy Jar
        run: cp ./build/libs/*.jar ./deploy/


      # 압축파일 형태로 전달(codedeploy는 zip형식만 읽을 수 있음)
      - name: Make zip file
        run: zip -r -qq -j ./S3에 담고자하는 파일의 이름 입력.zip ./deploy


      - name: Deliver to AWS S3
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        run: |
          aws s3 cp \
          --region S3에 설정한 리전 입력 \
          --acl private \
          ./S3에 담고자하는 파일의 이름 입력.zip s3://S3 버킷 이름 입력/

 

 

 

 

CI 성공,  버킷에 파일 업로드 되면 성공입니다.

CI build 성공
버킷에 build 파일 업로드

 

 

Github :  https://github.com/Jemoo1060/cicdPractice

 

GitHub - Jemoo1060/cicdPractice

Contribute to Jemoo1060/cicdPractice development by creating an account on GitHub.

github.com

 

출처 : https://shinsunyoung.tistory.com/120

출처 : https://www.sunny-son.space/AWS/AWS%20CodeDeploy%EC%99%80%20nginx%EB%A1%9C%20%EB%AC%B4%EC%A4%91%EB%8B%A8%20%EB%B0%B0%ED%8F%AC/

출처 : https://stalker5217.netlify.app/devops/github-action-aws-ci-cd-1/

복사했습니다!