>  기사  >  웹 프론트엔드  >  클라우드 재개 과제 자동화: GitHub Actions로 CI/CD 구현

클라우드 재개 과제 자동화: GitHub Actions로 CI/CD 구현

WBOY
WBOY원래의
2024-08-09 09:19:52629검색

클라우드 이력서 챌린지 - 2부

소개

이 시리즈의 첫 번째 부분에서는 다양한 AWS 서비스를 사용하여 클라우드 기반 이력서 웹 사이트를 구축하는 방법을 살펴보았습니다. 이제 GitHub Actions를 사용하여 CI/CD(지속적 통합 및 지속적 배포)를 구현하여 프로젝트를 한 단계 더 발전시키겠습니다. 이러한 자동화는 클라우드 이력서를 효율적으로 유지하고 업데이트하는 데 매우 중요합니다.

CI/CD는 앱 개발 단계 자동화를 강조하는 현대적인 소프트웨어 개발 방식입니다. Cloud Resume Challenge의 맥락에서 이는 이력서를 업데이트하거나 백엔드 코드를 변경하고 이러한 변경 사항을 GitHub에 푸시하고 AWS 인프라에 자동으로 배포할 수 있음을 의미합니다.

Automating the Cloud Resume Challenge: Implementing CI/CD with GitHub Actions

클라우드 개발에서 CI/CD가 중요한 이유

구현에 앞서 CI/CD가 왜 중요한지 논의해 보겠습니다.

  1. 일관성: 자동화된 배포를 통해 모든 변경 사항이 인프라 전체에 일관되게 적용됩니다.
  2. 효율성: 수동 배포는 시간이 많이 걸리고 사람의 실수가 발생하기 쉽습니다. 자동화는 시간을 절약하고 실수를 줄여줍니다.
  3. 빠른 반복: CI/CD를 사용하면 새로운 기능과 버그 수정을 빠르고 안전하게 배포할 수 있습니다.
  4. 모범 사례: CI/CD를 구현하면 빈번한 커밋, 포괄적인 테스트, 코드 검토와 같은 우수한 개발 사례가 장려됩니다.
  5. 확장성: 프로젝트가 성장함에 따라 CI/CD 파이프라인을 쉽게 확장하여 보다 복잡한 배포 프로세스를 수용할 수 있습니다.

GitHub 리포지토리 설정

이 프로젝트에서는 두 개의 별도 저장소를 사용합니다.

  1. 프런트엔드 저장소: 정적 웹사이트용 HTML, CSS 및 JavaScript 파일이 포함되어 있습니다.
  2. 백엔드 리포지토리: Lambda 함수, API 게이트웨이 및 DynamoDB 테이블에 대한 AWS CDK 코드를 보관합니다.

이러한 분리를 통해 프런트엔드와 백엔드 코드를 독립적으로 관리하고 버전을 제어할 수 있습니다.

프런트엔드용 CI/CD 구현

먼저 프런트엔드용 GitHub Actions 워크플로를 설정해 보겠습니다. .github/workflows/deploy-frontend.yml의 프런트엔드 저장소에 새 파일을 만듭니다.

name: Deploy Frontend

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3

    - 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: us-east-1

    - name: Deploy to S3
      run: aws s3 sync . s3://${{ secrets.S3_BUCKET }} --delete

    - name: Invalidate CloudFront
      run: |
        aws cloudfront create-invalidation --distribution-id ${{ secrets.CLOUDFRONT_DISTRIBUTION_ID }} --paths "/*"

이 워크플로는 다음을 수행합니다.

  1. 메인 브랜치에 대한 푸시 트리거
  2. AWS 자격 증명 설정(GitHub 비밀에서 구성)
  3. 저장소 콘텐츠를 S3 버킷에 동기화
  4. 최신 버전이 제공되도록 CloudFront 캐시를 무효화합니다

백엔드용 CI/CD 구현

백엔드의 경우 유사한 워크플로를 생성하겠습니다. .github/workflows/deploy-backend.yml의 백엔드 저장소에 새 파일을 만듭니다.

name: Deploy Backend

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3

    - name: Set up Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '16'

    - name: Install dependencies
      run: npm ci

    - name: Run tests
      run: npm test

    - 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: us-east-1

    - name: Deploy to AWS
      run: npx cdk deploy --require-approval never

이 작업 흐름:

  1. 메인 브랜치에 대한 푸시 트리거
  2. Node.js 설정
  3. 종속성 설치
  4. 테스트 실행(구현해야 함)
  5. AWS 자격 증명 설정
  6. CDK 스택 배포

비밀 관리

중요한 정보를 안전하게 보호하기 위해 GitHub Secrets를 사용합니다. 저장소 설정으로 이동하여 "비밀 및 변수", "작업"을 차례로 클릭하고 다음 비밀을 추가하세요.

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • S3_BUCKET
  • CLOUDFRONT_DISTRIBUTION_ID

이러한 비밀은 안전하게 암호화되며 실행 중에 GitHub Actions 워크플로에만 노출됩니다.

클라우드 네이티브 애플리케이션의 CI/CD 모범 사례

  1. 비밀을 안전하게 유지: 민감한 정보를 하드 코딩하지 마세요. 항상 환경 변수나 비밀 관리 서비스를 사용하세요.

  2. 강력한 테스트 구현: CI 파이프라인에 단위 테스트, 통합 테스트, 엔드투엔드 테스트를 포함합니다.

  3. 인프라를 코드로 사용: AWS CDK 또는 CloudFormation과 같은 도구를 사용하여 인프라를 정의하세요. 이를 통해 일관성이 보장되고 인프라의 버전 제어가 가능해집니다.

  4. 파이프라인 모니터링: 배포 실패에 대한 알림을 설정하고 CI/CD 로그를 정기적으로 검토하세요.

  5. 점진적 출시 구현: 보다 안전한 배포를 위해 블루-그린 배포 또는 카나리아 릴리스와 같은 기술 사용을 고려하세요.

과제와 교훈

CI/CD 구현에는 어려움이 있었습니다. 다음은 배운 교훈입니다.

  1. IAM 권한: AWS IAM 사용자에게 배포에 대한 올바른 권한이 있는지 확인하세요. 이 문제를 해결하려면 약간의 시행착오가 필요할 수 있습니다.

  2. 종속성 관리: CI 환경에서 종속성을 최신 상태로 유지하세요. 이 프로세스를 자동화하려면 Expectabot과 같은 도구를 사용해 보세요.

  3. 테스트가 중요합니다: 포괄적인 테스트를 작성하는 데 시간을 투자하세요. 프로덕션 환경에 버그를 배포할 필요가 없습니다.

  4. 비용 관리: 특히 광범위한 테스트나 배포를 자주 실행하는 경우 CI/CD 파이프라인과 관련된 비용에 유의하세요.

결론

GitHub Actions로 CI/CD를 구현함으로써 Cloud Resume Challenge의 개발 프로세스가 크게 간소화되었습니다. 이를 통해 우리는 배포가 간단하다는 것을 알면서 코드 작성과 개선에 집중할 수 있습니다.

이 경험은 클라우드 개발에서 자동화의 중요성을 강화하고 업계 표준 CI/CD 방식에 대한 실무 경험을 제공합니다. 개인 프로젝트에서 작업하든 대규모 애플리케이션에서 작업하든 강력한 CI/CD 파이프라인을 설정하는 데 시간을 투자하면 생산성과 안정성이 향상됩니다.

CI/CD는 일회성 설정이 아니라는 점을 기억하세요. 프로젝트가 발전함에 따라 계속해서 파이프라인을 개선하고, 더 많은 테스트를 추가하고, 워크플로를 최적화하세요. 즐거운 코딩과 배포를 즐겨보세요!

위 내용은 클라우드 재개 과제 자동화: GitHub Actions로 CI/CD 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.