Deploy 배포: CI/CD

KoEunseo·2022년 10월 12일
1

코드스테이츠

목록 보기
44/45

개발방법론

전통적인 개발 방식은 워터폴 방식이다. 폭포수처럼 일단 땅으로 떨어지면 다시 전단계로 돌아갈 수 없다.

요구분석 -> 설계 -> 구현 -> 테스트 -> 유지보수 순으로 개발이 되는데, 테스트 단계에서 여러 다양한 테스트를 도입하기도 한다.

전통적인 개발 방식의 한계를 극복하고자 나타난 것이 애자일 개발방법론이다. 애자일은 스프린트라고 불리는 짧은 주기의 개발 사이클을 계속해서 반복한다.
애자일에서는 요구사항이 변하는 것을 당연한 전제로 두고 개발을 한다. 애자일 방식은 SaaS를 개발하는 데에 적합하다.
SaaS란 서비스형 소프트웨어를 뜻하는 말로, 브라우저에 접속하기만 해도 새 버전을 즉시 사용할 수 있는 서비스 방식을 말한다. 사용자 업데이트 문제에 대해 고려할 필요가 없으며 하루에도 여러번의 릴리즈도 가능하게 된다.

DevOps

개발 + 운영 의 합성어이다.
소프트웨어를 자주, 빨리, 안전하게 배포하는 것을 목표로 하며 애자일 방법론을 기반으로 한다.

개발에서 운영까지 하나의 통합된 프로세스로 묶는다.
툴과 시스템을 표준화하여 의사소통의 효율성을 확보한다.
일련의 작업들을 자동화한다.

즉 코드 통합, 테스트, 릴리즈, 배포 과정을 자동화시킨다.
이를 지속적 통합 및 배포(CI/CD)라고 한다.

CI/CD

  • CI Continuous Integration
    지속적 통합
    개발자를 위한 자동화 프로세스.
    잦은 풀 리퀘스트와 머지로 코드 자주 통합한다.
  1. Code 원격 코드 저장소에 push하는 단계
  2. Build 유닛 테스트 후 빌드하는 단계
  3. Test 잘 통합되는지 확인하는 단계
  • CD Continuous Delivery | Continuous Deployment
    지속적인 서비스 제공 및 지속적인 배포
  1. Release 배포 가능한 소프트웨어 패키지 작성
  2. Deploy 실질적인 배포 부분
  3. Operate 서비스 현황 파악, 문제 감지

CD/CD 파이프라인

  1. 개발자가 코드를 원격 저장소에 올린다.
  2. 코드가 빌드 및 테스트와 릴리즈를 거쳐 배포 서버로 전달
  3. 빌드된 코드 애플리케이션 서버로 최종 배포가 완료
  4. 결과물 직접 확인

클라이언트 배포 실습

갸아악 한참 헤매다 드디어 해냈다..

http://fe-4-ko-eunseo.s3-website.ap-northeast-2.amazonaws.com/

yml 파일 작성

.github/workflows/client.yml 경로로 파일을 만든다.

name: client
on:
  push:
    branches:
      - 'main' 
      #여기서 실습에서는 브랜치 이름이 reference였음. 보통은 main이지 않을까 싶다.
      #지정된 브렌치에 push가 되면 실행된다.
jobs:
  build: #빌드할것임
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout source code.
        uses: actions/checkout@v2
      - name: Install dependencies
        run: npm install
        working-directory: ./my-agora-states-client
      - name: Build
        run: npm run build #npm build하면 오류난다.
        working-directory: ./my-agora-states-client
      - name: SHOW AWS CLI VERSION #aws cli 버전 확인작업
        env:
        #여기서 aws 아이디와 비밀번호는 깃허브 레포지토리에 따로 등록한다.
        #절대!!! 하드코딩해서 올리면 안됨.
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_EC2_METADATA_DISABLED: true
        run: |
          aws --version
      - name: Sync Bucket #버킷 동기화
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_EC2_METADATA_DISABLED: true
        run: |
          aws s3 sync \
            --region ap-northeast-2 \ #지역확인
            build s3://{내버킷이름복붙한다} \ #빌드되는폴더이름 s3://버킷명
            --delete
        working-directory: ./my-agora-states-client #어떤 디렉토리 동작시킬것인지

레포지토리 -> 세팅 탭 -> Secrets -> Actions -> New repository secret -> 코드로 올린 이름과 동일한 이름으로 등록한다.

# 새로운 리포지토리를 원격 리포지토리로 등록
git remote add myRepo git@github.com:{깃허브아이디}/{리포지토리 이름}.git
### 기존 레퍼런스 코드를 새로운 리포지토리로 push
git push myRepo reference

이제 자동으로 빌드되어 배포된다!!

https://goodgid.github.io/Github-Action-CI-CD-Workflows/#5-upload-to-s3
https://byunjuneseok.tistory.com/9?category=974842
이분들의 블로그가 많은 도움이 되었다..

(+) 프로젝트 배포하고 ci/cd하는중이다. 그이름도 찬란한 자동배포!!!
환경변수 추가까지만 했었는데, 뭔가 더 추가로 해야하는 모양.
https://velog.io/@chaerin00/Github-Actions-React-.env-%EC%83%9D%EC%84%B1

아 뭔가 더 해줘야함... 환경변수 값을 가져오지 못하고 undefined가 뜬다... 지긋지긋허다...
https://velog.io/@heyoon/github-actions%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EB%B9%8C%EB%93%9C-%EB%B0%B0%ED%8F%AC%EB%90%9C-%EC%84%9C%EB%B2%84%EC%97%90%EC%84%9C-%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98process.env.%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%A0%A4%EB%A9%B4-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%95%B4%EC%95%BC-%ED%95%A0%EA%B9%8C%EC%9A%94

멘토님께 여쭤보고 받은 링크... 제발 됐으면
https://ji5485.github.io/post/2021-06-26/create-env-with-github-actions-secrets/
-> 이걸로 환경변수에 접근할수는 있게 되었다!

구글인증부분은 이부분을 참고해서...ㅜㅜ 해봐야할거같음
https://stackoverflow.com/questions/68438293/the-given-origin-is-not-allowed-for-the-given-client-id-gsi

profile
주니어 플러터 개발자의 고군분투기

0개의 댓글