결론은 강제가 아니니 잘 지켜지지 않았고 정한 마감 시간이 되서야 우루루 코드 작업 사항이 반영되는 웃픈 현실:)
- 코드를 자주 합치지 않으니, 충돌이 나면 일단 두렵다. 코드 작성 스타일이 달라 간단한 기능임에도 다른 사람이 작성한 코드를 분석하는 데 시간이 꽤나 걸린다.
- 빌드가 실패하면 공동 코드에 반영하지 못하게 강제할 수 없었기 때문에 빌드할 때 발생하는 충돌을 서버에 배포하는 사람이 처리해야 했다. (휴먼 빌드머신)
- 변경 사항을 서버에 반영하기 위해 위의 배포 명령어를 반복적으로 입력해야 했다. (휴먼 배포머신)
- 이처럼 CI/CD를 도입할 이유가 분명해졌다.
사용할 수 있는 툴은 크게 github ci, gitlab ci, jenkins 정도로 볼 수 있었다. 사전조사해본 결과 jenkins가 만들어진지 가장 오래되어 지원하는 기능도 많고 수평적 확장에도 뛰어나고 대규모 파이프라인에서 성능도 우수하다는 것을 알았다. 그런데 기능이 많은 만큼 다른 툴보다 더 복잡해 보였다.
토이프로젝트는 gitlab에서 진행되고 있었고, 어떤 툴이든 위의 3가지 문제를 해결할 수 있었다. 다만, 젠킨스 같은 경우 빌드 서버가 필요하고 빌드 서버에서 이를 설치해야 한다. gitlab-ci는 무료 사용자에게도 빌드 서버(현재 기준 한달에 400분)를 빌려준다. 그래서 .gitlab-ci.yml 작성해서 빌드를 해보았고, 그리 어렵지 않았기 때문에 gitlab 파이프라인을 사용해보기로 결정했다.
cat /etc/os-release
stages: # 파이프라인 단계를 지정, compile -> test
- compile
- test
compile:
stage: compile
before_script:
- # gradle 설치하기 위한 의존성 추가 & gradle 설치
script:
- gradle build --exclude-task test
tags:
- compile
test:
stage: test
before_script:
- # gradle 설치하기 위한 의존성 추가 & gradle 설치
script:
- gradle build test
export PATH="/home/ubuntu/.sdkman/candidates/gradle/current/bin:$PATH"
실제로 파이프라인을 작성하는 과정은 다음 포스팅을 참고!