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

CI/CD - 협업 상황에서의 CI/CD 파이프라인 설계와 구축 (ft. Slack) - (3) Pipeline에 예외조건 설정 / Slack 연동과 CI/CD 이벤트 메시지 전송

wy-family 2024. 12. 11. 07:46

개발자가 feature branch를 만들고 feature branch 에 대한 Merge Request를 하고 승인을 하면

파이프라인이 작동해서 새로 배포되는 것까지 확인을 했다.

그런데, feature branch 를 push를 하게 될 경우에 GitLab은 새로운 코드의 변경 사항을 확인하고

feature branch에 대해서도 파이프라인을 작동시켜버렸다.

결과적으로 아직 검증이 끝나지 않은 상태에서 서비스가 업데이트가 되어버린 것이다.

이 경우에는 feature branch의 어떤 변화에 대해서는 CI/CD 파이프라인이 작동하지 말아라라는 예외 조건을 줘야 한다.

예외조건을 설정하는 것을 보자.

--> CI/CD Pipeline를 수정해보면 해결 가능하다.

 

해당 job 이 main 에서만 실행되도록 조건을 걸어주면 된다.

 

build / test / deploy 중에서 build 랑 deploy는 feature branch에서는 작동하지 말고,

test 정는 feature branch 에서도 작동하기를 바란다면, test 에 해당하는 job 들에는

only

- main

이거를 추가해주지 않으면 된다.

 

그리고 나서 commit changes 하고, 잘 적용된 게 맞는지 테스트를 해보자.

 

어떤 작업을 할때는 가장 먼저 git pull 해줘야 한다.

그리고 나서, ls -al 을 해서, .gitlab-ci.yml 파일을 들어가서 잘 적용된건지 확인을 해주자.

 

새롭게 branch 를 만들어서 코드 변경을 하게 되면 test 쪽만 파이프라인이 진행이 될 것이다.

branch 를 만들자. 그리고 switch 해서 이동하자. 그리고 확인하자.

 

이제 app.py 를 수정해주자. / git status 로 확인 한 번 해주고 / git add / git commit 해주자

 

이제 push 를 할 것인데, remote branch 랑 연결이 아직 안 되어있다. upstream branch, 즉 push를 할건데 어디로 할건지 모르기 때문에 구체적으로 push 하는 방법을 알려줄 것이다. 그걸 복사붙여넣기해서 명령해주면 된다.

 

이제 gitlab 에 가서 pipeline 이 test job 만 작동을 했는지 확인을 해보자.

테스트 부분만 파이프라인이 작동한 걸 확인했다.

 

파이프라인은 더욱 더 정교하게 설계할 수도 있다.

예를 들어서 README 파일이 수정되어도 지금은 배포까지 새로 되는 상황이다.

그런데 README 파일은 수정이 되어도 파이프라인이 작동하지 않도록 하는 거를 해볼 수 있다.

그런 정교한 건 실제로 진행해야 할때가 되면 충분히 그 방법을 찾아낼 수가 있을 것이다. 자신감! 할 수 있다는 확신.


이제 CI/CD 이벤트를 Slack을 통해서 알려주는 작업을 해보자.

Merge Request --> Approve --> Merge --> Build/Deploy 라는 과정을 거치게 될 때,

그 상황들을 팀원들과 공유가 되어야 원할한 업무 진행이 가능하다.

Slack 기반의 communication channel 을 만들어보자.

 

채널을 만들었다.

여기서 해당 채널과 gitlab 을 연결할 것인데, 아주 간편하게 연결할 수 있도록 플러그 같은게 제공되고 있다.

More .... 에서 Automations 으로 들어가자

 

apps 로 가서 incoming webhooks 라는 걸 검색하자

add 버튼을 눌러서 진행을 하다보면, 연결할 채널이 나올 건데, 아까 만들었던 채널을 선택해주면 된다.

그리고나면 

Webhook URL 이라는게 나올건데, 그걸 이용해서 gitlab 과 연결을 할 것이다.

GitLab 에서 연동할 프로젝트를 선택해주고 왼쪽 하단에 settings에서 Integrations 을 들어가보자.

말그대로 GitLab과 통합(Integrations) 할 수 있는 여러 툴들이 있다. 거기서 slack notifications 을 검색해서 찾아내자.

 

Active 에 체크를 하고,

어떤 이벤트가 발생하면 어떤 채널로 알려줄거냐는 칸에는

#cicd-event-app 이라고 넣어서, 슬랙의 채널명을 알려주면 된다.

그리고 밑에 설정에 보면 webhook URL 넣는 곳이 있는데 아까 slack에서 복사한 URL을 넣으면 된다.

 

먼저, Test settings 을 먼저 해보자.

 

제대로 연결이 된 걸 확인할 수 있다!

변경 사항을 저장을 하고 실제 코드 작업을 해보자.

 

가장 먼저 현재 branch 확인하고, 작업하기 전에는 git pull 을 해서 최신 코드를 받아오고 시작하자.

그리고나서

git branch feature/slack-noti-test

git switch feature/slack-noti-test

그리고나서 app.py 수정을 해주자

git add app.py

git commit -m "~~"

그리고 나서 git push 를 해서 상세 명령어 얻어내서 명령실행해보자

그리고 나면 slack 에 알림이 올 것이다.

 

하이퍼링크를 클릭해보면, 

 

이렇게 확인까지 해볼 수 있다. 어떤 걸 수정했는지 확인할 수 있다.

그리고 파이프라인도 성공했다. test 부분만 작동하는 것도 확인했다.