지난 블로그(GitLab과 GitHub, 실무에서 어떤 차이가 있을까요?)에서 GitLab과 GitHub에 대 해서 비교해 봤습니다. 결론적으로는 GitHub의 Git에 대한 노하우는 무시할 수 없지만, 서비스 혹은 전체 라이프사이클에 대한 여러 가지 비용적인 요소에서 GitLab이 우수하다는 것을 확인할 수 있었습니다. 이번 블로그에서는 DevOps 측면에서 GitLab CI/CD와 GitHub Action을 좀 더 면밀하게 살펴보겠습니다.

솔루션 기술 선택 문제
가장 먼저 여러분이 GitLab과 GitHub 중에 선택을 할 때, 기술적으로 어떠한 문제들을 고려해야 하는지 알아보겠습니다. 다음은 기술 의사 결정자(Technical Decision Maker) 문제들에 대한 GitLab과 GitHub의 비교입니다.
지원 여부를 💚 전부 지원 💔 지원 안함으로 표시합니다.
| TDM 문제 | DevOps 솔루션 | GitLab | GitHub |
|---|---|---|---|
| 빌드하고 코드를 테스트하는 시간을 줄이고 복잡성을 줄임 | 파이프라인 오케스트레이션 | 💚 Parent-Child 파이프라인이 동시에 작동합니다. 더 작은 하위 파이프라인으로 구성할 수 있습니다. | 💔 파이프라인 오케스트레이션이 없어 파이프라인 실행 시간이 길어집니다. |
| 코드 업데이트 오류 및 충돌올 제거 | 병합 오케스트레이션 | 💚 Advanced Merge Train 처리 로직은 기본 개발 브랜치를 초록불로 유지합니다. | 💔 Advanced Merge Train 처리 로직이 없어 더 많은 코드 커밋 충돌이 발생합니다. |
| 초기 구성 시간과 러닝 커브를 줄임 | 미리 구성된 파이프라인 | 💚 Auto DevOps는 즉시 사용 가능한 파이프라인 구성을 제공합니다. | 💔 사전 구성된 파이프라인이 없어 파이프라인 설정 시간이 길어집니다. |
GitHub에서 누락된 GitLab CI 기능
다음은 GitHub에는 없지만 GitLab에서 제공하는 CI 기능목록입니다.
| GitLab 기능 | 기능 소개 |
|---|---|
| Built-in CI | 플러그인 혹은 third party 구성 요소가 없습니다 |
| 새로운 팀원을 위한 DevOps 프로세스 단순화 | Auto DevOps는 코드를 인식하고 자동으로 DevOps 템플릿을 설정합니다. |
| 병합 전에 앱 리뷰를 통한 결함 감사 및 개발 시간 단축 | 리뷰앱으로 변경을 미리 확인합니다. 리뷰앱을 위한 배포환경 자동 종료 기능이 포함됩니다. |
| 크고 복잡한 프로젝트와 팀 모델링 및 관리 | 큰 규모의 프로젝트를 관리하기 위한 그룹 내의 하위 그룹, 그룹 파일 템플릿(표준화를 위한 그룹 수준의 템플릿), 그룹을 쉽게 찾을 수 있는 탐색 기능을 제공합니다. |
GitHub Action의 문제점
2021년 5월 18일 기준으로 GitHub Action Community Forum에 등록된 이슈들입니다. 해당 이슈가 해결되었을 수 있습니다.
다음은 GitHub Action을 사용하는데 발생되는 문제들입니다. 아래의 문제점들은 운영 비용 혹은 배포 시간을 증가시키거나 보안 측면에서 리스크를 발생합니다.
지속적인 통합(CI)
다음 문제들은 운영 비용을 증가시킵니다.
지속적인 전달(CD)
다음 문 제들은 배포되는 시간을 늘립니다.
- 워크 플로우에서 단일 작업만 다시 실행할 수 없습니다.(링크)
다음 문제들은 운영 비용을 증가시킵니다.
- 스테이징 및 프로덕션 환경에 대해 서로 다른 워크플로우를 쉽게 트리거할 수 없습니다.(링크)
- 저장소의 GITHUB_TOKEN을 사용하여 다른 워크 플로에서 새 워크플로우를 트리거할 수 없습니다.(링크)
- YAML 앵커 및 별칭에 대한 지원 부족(링크)
엔터프라이즈 준비
다음 문제들은 리스크를 증가시킵니다.
- 포크된 것들의 빌드에서 보안정보를 사용할 수 있습니다.(링크)