GitHub Actions를 활용한 CI/CD (Self-Hosted Runner)
Continuous Integration
CI는 일련의 구체적인 과정을 의미하기보다는, 개발 방식 중 하나를 뜻합니다. 기능을 구현하고, 기존 저장소에 새로운 기능을 병합하는 일련의 과정을 말하죠. 이때 빌드/통합 오류를 가능한 한 빠르게 찾아내야 하며, 이때 자동화 빌드나 테스트 도구가 활용됩니다. 이 중 하나로 Jenkins, GitHub Actions와 같은 CI/CD 도구들이 사용돼요.
이슈를 발행해 할 일을 만들고, PR을 통해 서로 리뷰하고 머지하기. 추가적인 테스트나 자동화 빌드 도구가 필요할까요? 서로 확인했으니 믿고 사용해도 되지 않을까요? 실제로 팀 내에서 서로 다른 기능을 머지하려는 도중 충돌이 발생했어요. 이를 잘 해결한 뒤 머지할 수 있었습니다. 하지만 아래와 같은 일이 추가로 발생했어요.
사람은 실수하기 마련입니다. 코드에 변화가 있었음에도 회귀 테스트regression test를 진행하지 않았어요. 결국 테스트되지 않은 코드가 PR에 포함됐어요. 이를 다른 팀원들도 확인하지 못해 실제 개발 서버에 머지됐습니다. 이를 해결하기 위해 다시 이슈를 작성하고, 핫픽스를 적용하고, … 😮💨
테스트와 빌드가 매 PR마다, PR 안의 커밋마다 진행된다면 편리하지 않을까요? 만약 실패한다면 저장소에 통합하는 것이 실패하도록 한다면 더 좋겠습니다. GitHub Actions을 사용하면 이를 해결할 수 있습니다. 빌드부터 테스트 자동화와 더불어 Branch protection을 통해 빌드/테스트에 실패한다면 병합하지 않도록 설정할 수도 있어요.
이 글에서는 GitHub Actions를 활용한 CI, CD에 대해서 다룹니다. 아래와 같은 사전지식을 요구하나, 모르더라도 따라오는 데에 큰 어려움이 없도록 글을 써보려고 합니다. 😄
- Git
- Shell script
- Gradle task