ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [배포자동화구축] 1. Github Actions로 CI 구축하기
    Project 2023. 10. 13. 23:20

     

    배포자동화 구축의 첫 단계로 빌드 자동화를 통해 안전한 코드들이 머지될 수 있도록 하는 CI를 Github Actions로 구현해 볼 것이다.

     

     

     

    1. 먼저, 배포할 레파지토리의 Actions탭으로 들어가 New workflow를 생성한다

     

     

    2. 빌드도구에 맞는 workflow를 선택한다. 나는 gradle로 빌드해야 해서 Java with Gradle로 선택했다 

    클릭하면 레파지토리에 .github 패키지 아래에 생성될 gradle.yml 파일을 작성하는 편집기가 생성된다. 

     

     

    3. Gradle.yml 파일 작성

     

    name: Java CI with Gradle
    
    on:
      push:
        branches: [ "develop" ]// develop 브랜치에서 push 이벤트가 나거나 
      pull_request:
        branches: [ "develop" ]// develop 브랜치로 통합하는 PR이 생성될 때 Github Actions가 수행되도록 설정한다
    
    permissions:
      contents: read // 읽기 권한을 부여한다 
    
    jobs:
      build:// Github Actions workflow의 실행환경 구성 
        runs-on: ubuntu-latest// 우분투 서버에서 진행 
        permissions:
          pull-requests: write// 쓰기 권한 부여
          
        steps:// 실행할 단계를 스텝별로 설정하게 된다
        
        - name: checkout repository// 레파지토리의 최신 코드를 workflow로 가져오는 단계  
          uses: actions/checkout@v3
            
        - name: Set up JDK 11// JDK 환경을 구성하는 단계 
          uses: actions/setup-java@v3
          with:
            java-version: '11'
            distribution: 'temurin'
            
        - name: Grant execute permission for gradlew// 빌드를 수행할 수 있도록 gradlew 폴더에 쓰기권한 부여 
          run: chmod +x gradlew
            
        - name: Build with Gradle// 빌드 수행 단계
          uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0
          with:
            arguments: build
            
        - name: Create test coverage report// JACOCO 테스트 커버리지 리포트 생성 단계
          id: jacoco
          uses: madrapps/jacoco-report@v1.5
          with:
            title: Jacoco Test Coverage
            paths: ${{ github.workspace }}/**/build/reports/jacoco/test/jacocoTestReport.xml
            token: ${{ secrets.GITHUB_TOKEN }}
            min-coverage-overall: 60
            min-coverage-changed-files: 60
            update-comment: true

    초기 세팅엔 checkout 스텝과 JDK 설정, 빌드실행만 되어있을 것이다. 최대한 원본 구조를 유지하면서 스텝을 추가한다. 

     

    밑의 JACOCO의 paths와 token에 설정한 값은 Actions에서 자동으로 설정하고 제공하기 때문에 다른 곳에 추가해 줄 필요는 없다.

    사용하는 madrapps/jacoco-report@v1.5 액션이 레파지토리에 리포트를 생성하기때문에 workspace와 token 정보가 필요하기 때문에 작성해줘야 한다. 

     

     

    4. 프로젝트에 JACOCO 설정 추가

     

    프로젝트 build.gradle에 플러그인 추가 

    plugins {
    	id 'java'
    	id 'org.springframework.boot' version '2.7.15'
    	id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    	id 'jacoco' // JACOCO 플러그인 추가 
    }
    
    group = 'com.devlop'
    version = '0.0.1-SNAPSHOT'
    
    java {
    	sourceCompatibility = '11'
    }
    
    configurations {
    	compileOnly {
    		extendsFrom annotationProcessor
    	}
    }
    
    repositories {
    	mavenCentral()
    }
    
    dependencies {
    	//생략
    }
    
    test{
    	finalizedBy jacocoTestReport// 테스트 작업이 끝나면 아래에 있는 jacocoTestReport을 수행 
    }
    
    jacoco{
    	toolVersion = '0.8.8'// JACOCO 버전 설정
    }
    
    jacocoTestReport{
    	reports {
    		xml.required = true// 리포트 형식 설정 
    		html.required = true
    	}
    }
    
    tasks.named('test') {
    	useJUnitPlatform()
    }

     

    이제 gradle.yml에서 설정한 브랜치에 푸시나 PR 요청 이벤트가 발생하면 설정한 스텝별로 빌드작업이 수행되는 것을 확인할 수 있다.

     

    PR의 checks탭이나 converstaion 아래쪽에 보면 이런식으로 테스트/빌드가 패스되었는지의 여부를 확인할 수 있고

    실패로 뜨면 어느 단계에서 실패가 났는지, 무슨 오류인지 로그를 통해 확인해볼 수 있다.

     

    checks Tab in PR

     

    conversation in PR

     

     

    레파지토리의 actions 탭의 Java CI with Gradle을 클릭하면 그동안 수행된 Actions의 로그들을 확인할 수 있다. 

     

     

     

    이렇게 develop에 코드 변경사항들을 병합하면서 자동으로 빌드를 수행할 수 있는 CI 작업을 Github Actions로 구현해 봤다.

     

    다음에는 배포서버를 구축하기 위해 AWS에 인스턴스를 만드는 것부터 jenkins 설치 및 설정작업까지 진행해 볼 것이다.

Designed by Tistory.