Skip to content

Github action

sangpyeong edited this page Apr 8, 2024 · 1 revision

Github action 정리

[Github Action 사용법 정리](https://zzsza.github.io/development/2020/06/06/github-action/)

프로젝트 적용

  • 코드

    name: CI/CD Pipeline
    
    on:
      push:
        branches:
          - 'feature/cicd'
    #      - 'main'
    #      - 'dev'
    #  pull_request:
    #    branches:
    #      - 'main'
    #      - 'dev'
    
    jobs:
      ci-cd:
        runs-on: ubuntu-latest
        steps:
          - uses: 'actions/checkout@v3'
    
          - name: Set up JDK 17
            uses: 'actions/setup-java@v3'
            with:
              java-version: '17'
              distribution: 'corretto'
    
          - name: Grant execute permission for gradlew
            run: chmod +x ./gradlew
    
          - name: Test with Gradle
            run: ./gradlew test
    
          - name: Build with Gradle
            run: ./gradlew build
    
          - name: Setup GCP Auth
            uses: 'google-github-actions/auth@v2'
            with:
              credentials_json: ${{ secrets.GCP_SA_KEY }}
    
          - name: Set up Cloud SDK
            uses: 'google-github-actions/setup-gcloud@v2'
    
          - name: Configure Docker
            run: gcloud auth configure-docker asia-northeast3-docker.pkg.dev
    
          - name: Create application-dev.yaml
            run: |
              echo "${{ secrets.APPLICATION_DEV_YAML }}" > ./src/main/resources/application-dev.yaml
    
          - name: Build and push Docker image to GCP Artifact Registry
            run: |
              docker build -t ${{ secrets.GCP_ARTIFACT_REGISTRY }}/tfinder:${{ github.sha }} .
              docker push ${{ secrets.GCP_ARTIFACT_REGISTRY }}/tfinder:${{ github.sha }}
    
          - name: Deploy to GCE instance
            run: |
              gcloud compute instances update-container "tfinder-vm" \
                --zone "asia-northeast3-a" \
                --container-image "${{ secrets.GCP_ARTIFACT_REGISTRY }}/tfinder:${{ github.sha }}"
    
  • 코드 설명(gpt)

    이 GitHub Actions 워크플로우는 feature/cicd 브랜치에 대한 push 이벤트에 반응하여 CI/CD 파이프라인을 실행합니다. 이 파이프라인은 여러 단계로 구성되어 있으며, 각 작업은 Java 애플리케이션을 테스트, 빌드, 컨테이너화하고, Google Cloud Platform으로 배포하는 과정을 포함합니다.

    1. actions/checkout@v3: 이 액션은 GitHub Actions가 코드를 체크아웃하여 워크플로우가 실행되는 환경에 해당 코드를 가지고 올 수 있도록 해줍니다. 이를 통해 후속 단계에서 코드에 접근하고 작업을 수행할 수 있습니다.
    2. actions/setup-java@v3: 이 액션은 Java 개발 환경을 설정합니다. 여기서는 Java 17 버전을 사용하며, Amazon Corretto 배포판을 선택했습니다. 이는 Java 애플리케이션을 빌드하고 테스트하는 데 필요한 환경을 제공합니다.
    3. chmod +x ./gradlew: 이 명령어는 Gradle Wrapper 파일에 실행 권한을 부여합니다. 이는 Linux 기반 시스템에서 Gradle 명령을 실행할 수 있게 해줍니다.
    4. ./gradlew test: 이 명령어는 Gradle을 사용하여 애플리케이션의 테스트를 실행합니다. 이 단계는 코드의 정확성을 검증하는 데 중요합니다.
    5. ./gradlew build: 이 명령어는 애플리케이션을 빌드합니다. 이 과정에서 소스 코드는 실행 가능한 애플리케이션으로 컴파일되고 패키지됩니다.
    6. google-github-actions/auth@v2: 이 액션은 Google Cloud Platform(GCP)에 대한 인증을 설정합니다. 여기서는 GitHub Secrets에 저장된 서비스 계정 키를 사용하여 인증하며, 이는 GCP 리소스에 접근할 수 있는 권한을 부여합니다.
    7. google-github-actions/setup-gcloud@v2: 이 액션은 Google Cloud SDK를 설정합니다. 이는 GCP와 상호 작용하는 데 필요한 도구와 라이브러리를 제공합니다.
    8. gcloud auth configure-docker asia-northeast3-docker.pkg.dev: 이 명령어는 Docker 클라이언트를 GCP의 Artifact Registry와 인증하여 통신할 수 있도록 구성합니다. 이를 통해 Docker 이미지를 Artifact Registry로 푸시할 수 있습니다.
    9. docker builddocker push: 이 명령어들은 Docker 이미지를 빌드하고 GCP의 Artifact Registry로 푸시합니다. 이미지 태그는 GitHub 커밋 SHA를 사용하여 버전 관리됩니다.
    10. gcloud compute instances update-container "tfinder-vm": 이 명령어는 Google Compute Engine(GCE) 인스턴스에서 실행 중인 컨테이너를 새로운 이미지로 업데이트합니다. 이를 통해 배포된 애플리케이션을 최신 상태로 유지할 수 있습니다.

    이 워크플로우는 코드 변경 사항을 자동으로 테스트하고, 빌드하며, GCP에 배포하는 CI/CD 파이프라인을 구현합니다. 이 과정은 개발 팀이 보다 효율적으로 작업하고, 애플리케이션을 안정적으로 배포할 수 있도록 돕습니다.

고찰

Clone this wiki locally