Project Management/Github

GitHub Actions Runner 빌드 실전 적용기 / if(kakao)2022 정리

bluebamus 2023. 6. 5.

영상 자료 : https://www.youtube.com/watch?v=WILqVsNEKZA 

1. docker in docker VS docker out of docker 

   1. job에서 container를 실행하여 workflows 수행 

   2. 예시 : 

jobs:
	build-and-test:
    	run-on: k8s
        
        container:   //방법 1
        	image:[IMAGE]
            
        services:   //방법 2
        	redis:
            	image:[REDIS_IMAGE]
                ports:
                - 6379

   3. actions에서 확인 과정

      1. initialize containers와 stop containers로 확인할 수 있음

      2. 해당 스탭 동작시 관리자나 사용자가 제어할 수 없음

   4. docker in docker

      1. docker host로 부터 생성된 runner container의 workflows는 마운트된 file system에 접근할 수 있기 때문에 정상적으로 수행 가능

      2. workflow에서 job container를 생성하게 되면, runner container는 job container를 생성할 수 있지만 호스트의 작업 디렉토리에 접근을 할 수 없기 때문에 결국 해당 workflow는 실패하게 됨 

      3. 참고 :

GitHub Actions Runner 빌드 실전 적용기 / if(kakao)2022 영상 캡쳐

      4. docker in docker 지원 여부 : github runner 프로젝트의 컨테이너 오퍼레이션 프로바이더 코드를 확인하면 이미 docker로 구동된 상태에 내부에서 container를 생성하면 예외처리를 하는 코드가 있으므로 공식적으로 docker in docker는 지원하지 않음

      5. docker out of docker 지원 여부 : exit code 137 에러가 발생하게 

         1. 기본적으로 수행되는 모든 container는 동일한 label 값을 가지게 된다. 때문에 container 초기화시 job container1이 clean up을 하게 되면 같은 호스트의 동일한 label명을 가지고 있는 job container2도 영향을 받게 된다. 때문에 job container2도 같이 강제 종료하게 된다.

         2. 참고 : 

동일한 label명 사

         3. 해결 방법 : runner_bindir 값을 유일한 값으로 생성되는 unique_pod_name으로 변경 (쿠버네이스 변수 사용)

         4. 참고 :

해결 방법

2. github custom actions 구현

   1. github action runner build는 매번 수행시 이전 작업에 대한 데이터 혹은 아티팩트 정보를 가지고 있지 않고 동일한 과정을 거치므로 똑같은 수행시간을 요구함

   2. 이러한 경우 build cache가 요구됨

   3. 최신 버전에서는 해당 cache 기능이 제공되나 docker out of docker에서는 제대로 동작하지 않고 스토리지 저장소 크기가 한정적임

   4. kep cache 사용 :

jobs:
	[JOB_NAME]:
    	steps:
        - name: Gradle cache
          user: kep-actions/cache@v1
          id: cache
          with:
          	path: |
            ~/.gradle/caches

   5. 동작 방식 :

      1. 빌드시 생성된 데이터를 고유키를 이용해 압축하고 사용자가 설정한 스토리지에 저장

      2. 이후 같은 프로젝트가 재 빌드 될 때, 빌드 캐시를 가져올 조건에 맞을 경우 압축 저장된 데이터를 복원

      3. 빌드 속도 개선 

댓글