Docker 기반 CI·CD 파이프라인 구축

CI/CD - 협업 상황에서의 CI/CD 파이프라인 설계와 구축 (ft. Slack) - (1) group

wy-family 2024. 12. 9. 08:51

지금까지는 CI/CD 파이프라인 설계하고 구축하는 걸 했지만 '혼자' 작업하는 상황이었다.

그런데 현실에서는 함께 일하는 상황일 것.

 

그러면, Group, project, user, permission 설정이 필요하다.

그러니까 Merge Request와 Approve 설정이 있을 것.

+

Slack을 이용한 CI/CD 모니터링, Slack 연동과 CI/CD 이벤트 메시지 전송을 해볼 것.


어찌됐든 지금까지 한 것들은 '혼자' 작업하고 있는 상황이었다보니 간단한 CI/CD 파이프라인을 구축했었다.

하지만 실제 협업할 때는 여러 가지 상황들, 여러 조건들이 필요하다.

 

실제로 서비스 중인 어떤 Main Branch 가 있다고 해보자.

개발자가 뭔가를 개발할 때, Main Branch를 가지고 바로 개발/적용을 하면 위험할 수 있다. 실제 서비스 중이니, Feature Branch 라고 가지를 새로 하나 만들어서 기능을 개발한다.

개발을 끝나서 feature branch를 main branch로 merge를 하려면, 다른 사람들로부터 피드백을 받던지 책임자에게 승인을 받아야 한다. 그러니까 Merge Request가 필요하고, Approve 절차가 필요하다.

만약 오류가 있으면 Approve를 해주지 않으면 되니까.

 

만약, main branch로 merge가 되면 코드 변경이 이루어진 거니까 gitlab runner가 그걸 감지해서 CI/CD 파이프라인을 실행하게 된다. 그러면, 이 과정을 협업하던 사람들과 공유를 할텐데, 모니터링을 할 수 있도록 해줘야 한다. 그리고 이런 이벤트가 있었다고 메시지 전송까지 해주면 된다.

 

그러니까, 어떤 사람들이 협업을 하는 사람들인지를 구분지어서 Group을 만들어야 할 것이다. 그 안에서 sub group을 가질 수도 있을 것. 예를 들어서, 개발 과정을 굳이 타 비개발 부서 직원들에게 알림이 가거나 할 필요가 없다.

그리고 같은 개발 부서 내에서도 각각 맡고 있는 프로젝트가 다를 수 있다. 그러니까 프로젝트 별로 구분지을 필요도 있다.

그럴려면 거기에 어떤 user, 어떤 사람들이 있는지를 정의해야 하고, 각각의 user 마다 작업 권한이 다를 수 있으니 그것까지 정의를 해야 한다. permission 이라는 건, user 마다 다를텐데 예를 들어 merge request의 approve는 책임자에게만 주어져야 한다. 또 다른 예로, QA 라고 평가하고 테스트만 하는 user (member)의 경우에는 코드 수정 권한을 가질 필요는 없다. 그냥 코드 읽기 권한만 가지고 있으면 되는 것.

 

CI/CD 이벤트가 발생하면 실시간으로 알림을 받아야 할 팀원들이 있을 것이다. 이벤트 알림을 받아야 각 멤버들이 자신의 역할을 적절하게 수행할 수 있다. 이 시스템은 Slack 을 통해서 구성해볼 예정.


GitLab 에서 Group을 만들자.

 

group 을 만들때, 멤버 초대를 할 수 있는데 거기에 이메일 주소를 입력해서 초대를 하면서 그룹을 만들어보자.

그리고나서 sub group 을 만들 필요는 없으니 create new project 를 해보자

 

새롭게 프로젝트를 만들고 나서, 아까 초대한 user를 이 group에 포함시키는 과정을 해보자.

 

GitLab 가입할 때 사용한 이메일로는 Owner 라는 역할로 이메일이 왔다.

그리고 초대한 이메일을 들어가보면

 

이렇게 초대가 와있다.

 

굿!

 

이제는 지난번까지했던 프로젝트에 사용자를 초대해서 CI/CD 파이프라인을 실행해보는 걸 해보자.

 

사용자 초대를 할 때, permission 은 developer 로 주었다.

그리고나서 확인을 해보니 초대가 되어서 프로젝트가 생성되어 있는 걸 확인할 수 있다.

 

초대가 완료되었으니 이제 이 user는 이 코드를 clone 해서 사용할 수가 있게 된다. 그럴려면 SSH key 를 등록해야 한다.

 

등록을 하려면 key 생성을 해야 하고 key 생성을 하려면 linux ubuntu 에서 새로운 user를 생성해서 진행하면 된다.

 

 

먼저 sudo adduser 유저이름 을 해서 추가를 해준다.

새로운 유저로 로그인했다.

이 유저를 통해서 코드를 클론해서 코드 작업을 할 것이다.

여기서 key 등록을 해주려면 keygen 으로 만들어줘야 한다.

id_rsa 가 private key 이고

id_rsa.pub 가 public key 이다.

공개키를 카피해서 아까 gitlab 에서 ssh key 를 추가해주는 곳에 넣으면 된다.

 

그러면 새로운 키가 등록된 걸 확인할 수 있다.

 

이제 key가 등록되었으니 user-002 에서 코드를 클론할 수 있다.

코드를 클론하려면 저장소(gitlab의 git 저장소)의 URL을 알아야 한다.

git clone 을 하기 전에

workspace 라고 디렉토리를 만들어주자.

 

클론이 된 걸 확인했으니,

app.py 를 수정해서 직접 push를 해보자.

수정하고 나서

git add app.py

git commit -m "커밋 메세지"

git push 를 해보자

 

그러면 이렇게 error 가 뜬다.

왜냐면 초대할 때 역할이 developer 였다.

developer 는 코드를 main branch에 바로 commit을 할 수가 없다.

그래서 push를 할 수 없었다. 그러면 push를 하게 하려면? 다음 게시글로.