GitHub Action 시간 줄이기
병렬 구조로 빌드 환경 구축개발을 위한 개선
예전에 GitHub Action 을 개선하면서 빌드 시간을 절반 이상 단축시킨 일화가 있다. 그 당시에 오픈소스 프로젝트 개선을 위해 시도한 것보다 프로젝트를 개발하고 각 모델과 버전에 따른 빌드 결과를 확인하려면 1 시간이 넘는 작업시간이 걸려서 이러한 결과를 당연하게 생각했었다. 일상의 불편함을 당연하게 생각을 하면 안 된다는 관점을 갖게 되었고 게을러지는 순간 나태해진다는 느낌을 강하게 받았다. 이후로 GitHub Action 을 개선하고 빌드 시간을 단축하고자 연구했다. 기존 워크플로우는 일렬로 하나의 모델 하나의 언어 하나의 하드웨어를 순차적으로 빌드하여 진행하는 워크플로우를 진행하였다. 그러다 개발 버전에서 커밋했을 때 각 모델에 대한 빌드 결과를 빨리 확인하고자 워크플로우를 개선할 수 있는 방법을 찾아보았다.
위는 기존 워크픞로우 형식이다. 워크플로우를 진행하고 워크플로우 내부에서 빌드 스크립트를 구현하여 존재하는 모델과 지원하는 언어를 전부 빌드한다.
위와 같은 형태로 빌드 스크립트를 작성하여 지원하는 언어와 현재 배포된 혹은 실험중인 테스트 모델들에 대해 컴파일을 진행한다. 이때 순차적으로 진행하는 특징이 있어 모든 모델들이 빌드되기까지 시간이 꽤 걸린다. 이때 이 문제를 포착하여 어떻게 하면 빌드 시스템을 단축하고 좀 더 획기적인 구조로 개선로 만들 수 있을까 고민을 시작했다.
개선된 워크플로우
아래는 고민 끝에 여러 아이디어로 개선한 워크플로우 구조이다.
위는 개선된 워크플로우 모습이다. 워크플로우 내부에서 Matrix 키워들을 사용하여 지원하는 언어와 배포/실험중인 하드웨어를 선언한다. 이는 보통 하나의 워크플로우 다양한 버전의 테스트를 진행할 때 사용한다. 언어와 하드웨어 모델을 뽑아내면 내부에서 병렬 구조로 빌드를 시작하여 기존에 걸리는 시간에 절반 이하로 감소하는 것을 볼 수 있다.
결과 비교
최근 기능 개선을 위한 Pull Request 를 올린적이 있는데 개선된 워크폴루우 소요시간은 아래와 같다.
기존 워크플로우를 따른다면 아래와 같은 시간이 걸린다.
If you find any errors, please let me know by comment or email. Thank you.