CI/CD가 뭔가요?

라디오에 설명한 서비스들의 스크린샷 및 설명입니다.




🔗 젠킨스

대표적인 설치형 CI/CD 자동화 툴 젠킨스의 화면들입니다.


jenkins

컴퓨터에 설치한 젠킨스를 실행했을 때 이와 같이 브라우저에서 콘솔 화면을 볼 수 있습니다.
새로 자동화 작업을 작성하는 화면입니다.


jenkins

Gradle을 사용해서 빌드 명령어를 내릴 것을 지정하는 화면입니다.
이후 하단의 Post-build Actions에서 빌드 이후 실행될 작업,
이를테면 Slack 메시지 보내기 등을 설정할 수 있습니다.


jenkins

CI/CD가 진행되는 모습 또는 진행된 내역을 이와 같이 볼 수 있습니다.
(위 화면은 Blue Ocean 플러그인 적용 모드입니다.)

아래의 다른 서비스들도 크게 다르지 않습니다.






🔗 Travis CI

클라우드형 서비스들 중 하나인 Travis CI의 화면입니다.


travis

Travis CI에서 자동 테스트가 이뤄진 내역들을 보여주는 화면입니다.
테스트에서 오류가 발생했음을 나타내는 메시지들과 함께
아래에는 상세 내역들을 볼 수 있는 로그가 있습니다.


.travis.yml 예시

# 사용할 언어와 버전 language: node_js node_js: - "14.15" # 작업 전 수행할 것 before_install: - npm update # travis 브랜치에서만 수행 branches: only: - travis # 테스트(또는 추가 작업) 후 결과 전송 notifications: email: recipients: - yalco@kakao.com

Travis에서 지정한 형식으로, 자동화 작업들을 세팅한 문서입니다.
이 파일을 프로젝트 최상위 폴더에 넣어, push 등의 이벤트가 발생할 때마다
위의 작업들이 실행되도록 합니다.

대다수 클라우드형/Git 저장소형 서비스들이 비슷한 방식으로 CI/CD 작업들을 설계합니다.






🔗 Github Actions

github-actions

Github의 Actions 탭에서 자동화할 작업들을 작성하는 화면입니다.
왼쪽에든 yml 파일로 작업들을 직접 작성하는 에디터가 있고
오른쪽에는 이미 작성된 탬플릿을 가져올 수 있는 마켓플레이스가 있습니다.


gitlab

GitLab CI/CD의 진입 화면입니다. 프로젝트에 따라 템플릿을 선택할 수 있습니다.






📜 라디오 대본

얄코: 차에서 듣는 얄코 오디오! 얄코: 두 번째 방송, CI/CD 시작합니다. 얄코: 저는 얄팍한 개발자 얄코 미토: 미친토끼 미토에요. 목소리가 또 살짝 바뀐 것 같네? 얄코: 제가 지난 화 댓글들 읽고 그쪽 목소리 안정시켜보려고 얄코: 이것 저것 다 깔고 갖은 시도를 다 해 본 결과거든요. 얄코: 그리고 미토씨 텐션 너무 센 것도 호불호가 많이 갈려서 얄코: 이번 화부터는 좀 가라앉히시고 진행할 수 있도록... 미토: 그럼 아까 토끼한테 좋은거라고 준거 그거 미토: 동물용 신경안정제 맥인 거에요? 얄코: 그게... 저도 미토씨랑 계속 일을 하고싶으니까... 미토: 이 사안은 이따 방송 끝나고 따로 얘기를 나눠봅시다. 미토: 와 약빨 때문인가 화도 안 나네 얄코: 죄송해요. 여튼 얄코 라디오는 청취자분들의 피드백도 얄코: 꾸준히 반영해서, 많은 분들이 즐길 수 있고 얄코: 유익한 지식과 정보들을 얻어가실 수 있도록 하겠습니다. 얄코: 자, 오늘의 주제! CI와 CD인데요 얄코: 미토씨, 이 CI/CD가 뭐의 약자죠? 미토: CI CD요 미토: C 쓰레기 같은 미토: I 인간색기야 미토: C 씨밤바 미토: D 디질래 얄코: 자 일단 CI는 Continuous Integration 얄코: 즉 '지속적 통합'의 약자구요 얄코: CD는 Continuous Deploymet 또는 Delivery 얄코: '지속적 배포'를 줄인 말입니다. 얄코: 둘이 서로 다른 개념이지만 보통 함께 구축되기 때문에 얄코: 일반적으로 CI/CD 이렇게 묶여서 불리곤 해요 얄코: 프로그래머들이 소프트웨어를 코딩하고 나서 얄코: 이를 최종 배포까지 하는 과정에서 진행되는 일들이에요. 얄코: 보통은 그 과정들을 '자동화'한다는 의미로들 사용돼죠. 얄코: 그러면 먼저 CI, 지속적 통합을 먼저 알아볼게요. 미토: 지속석 통합. 통합이라는 게 뭐를 통합한다는거에요? 얄코: 소프트웨어들은 여러 프로그래머로 구성된 얄코: 팀에 의해서 개발되는 경우가 많죠 얄코: 보통 Git과 같은 버전 컨트롤 시스템을 사용해서 얄코: 각자가 작업한 코드들을 출시할 결과물로 통합을 해요. 미토: 코딩한거 커밋하고 메인 브랜치에 머지해다가 푸시하는거 아녜요 미토: Github같은데 한군데로 코드들 업로드 하는거 미토: Git으로 다 되는건데 거기에 또 뭐가 필요한거에요? 얄코: 이 과정에서 각 구성원의 코드를 받아와 합치기 전에 얄코: 코드에 문제가 없는지 확인하는 과정이 없으면 얄코: 실제 서비스로 배포되고 나서 문제가 발생할 수가 있어요. 얄코: 작성한 코드 자체에 결함이 있어서 오류가 날 수도 있고 얄코: 다른 인원이 새로 작업한 코드와 엇갈리는 부분때문에 얄코: 코드를 다 합쳐봐야 발견할 수 있는 에러가 있을 수도 있죠. 미토: 그래가지고 우리가요 테스트를 하는거 아녜요 테스트 미토: 코드를 짜면요 싹 머지해다가 빌드하고 실행해서요 미토: 어디 에라가 나는데가 없는지 매의 눈으로 확인을 해야돼요 미토: 페이지들 다 들어가보고 버튼들도 전부 눌러보면서 얄코: 그게 FM이고 이상적이라고 할 수 있겠지만 얄코: 현실적으로 그렇게 하긴 어렵고 또 귀찮잖아요 미토: 개발자가 그거를 귀찮아하면 안 돼요 미토: 모름지기 프로그래머는요 얄코: 자자, 소규모 소프트웨어에서는 그럴 수도 있지만 얄코: 규모가 커질수록 사람이 수작업으로다가 얄코: 테스트를 진행하는데에는 무리가 있어요. 얄코: 그리고 여러 사람이 작업함으로 인한 문제들을 방지하려면 얄코: 이런 통합 작업을 수시로, 지속적 - continuous 하게 해야 하는데 얄코: 그때그때 이런 테스트 과정을 매번 거치기는 너무 번거로울거에요. 얄코: 그렇기 때문에 이걸 자동화할 필요가 있어 왔고 얄코: 이 CI의 자동화를 구현해주는 다양한 도구와 얄코: 서비스들이 있는거거든요. 얄코: 그것들을 다루기 전에, 이와 함께 다뤄지는 얄코: CD도 짚고 넘어갈게요. 지속적 '배포'죠 미토: 배포라는 거는요. 사람의 도량과 담력을 말하는거에요. 미토: 아무개가 배포가 크다고 하면요. 밥을 먹더라도... 얄코: 네, 여기에서 말하는 배포는요. 소프트웨어를 코딩한 결과를 얄코: 최종 사용자에게 넘겨주는, 실행 가능하도록 하는 단계를 말해요. 얄코: 모바일 앱으로 치면 앱스토어에 올리는거고 얄코: 백엔드 서비스라면 코드를 배포용 파일로 빌드를 하고 얄코: 그 빌드된 결과물을 서버에 전송한 다음에 얄코: 커맨드로 실행까지 해주는 것 등을 말하는거죠. 얄코: 이 앞에 C, continuous가 붙는다는 건 얄코: 이것 역시 코딩을 마칠 때마다 지속적으로 해준다는거겠죠 얄코: 그래서 CI가 성공적으로 이뤄지고 나면 얄코: 이 CD가 진행되는거라고 생각할 수 있을거에요. 얄코: 그래서 이 전반적 과정을 CI/CD라고 하는거구요. 미토: 그러면은 CI/CD 자동화 툴이라 함은 그런 과정들을 미토: 싸그리 자동으로다가 돌려주는 그런걸 말하겠네요? 얄코: 그렇죠. 이 CI/CD 툴들은 굉장히 다양하기 때문에 얄코: 이번 화에서는 종류마다 대표적인 것들을 알아볼게요. 얄코: 먼저 설치형입니다. 대표적으로 젠킨스가 있죠. 미토: 와 로고가 아주 그냥, 젠틀맨이네 젠틀맨 미토: 머리 벗겨진 알프레드같은데요? 일 잘 하게 생겼네 이 양반 얄코: 네, 아무래도 서버란 저택에서 여러 업무를 척척 해내는 얄코: 믿음직한 집사 이미지로 컨셉을 잡은 것 같죠 얄코: 이 젠킨스가 대략 어떤 식으로 사용되는지를 살펴볼게요. 미토: 그런데 이런 건 뭐 스샷이라도 보여주면서 해야되는거 아니에요? 얄코: 이 영상에 고정댓글로 달린 링크를 클릭해서 얄코: 주요 스크린샷과 설명 등을 보실 수 있는 페이지를 방문하실 수 있어요. 미토: 와, 이젠 아예 댓글 링크로 그래픽 작업을 퉁치려고 하네? 얄코: 귀만 열고 편하게 들으신 다음에, 눈으로 더 자세히 알고 싶으신 분들만 얄코: 들어와서 보실 수 있도록 얄코 사이트에 정리해놨어요. 미토: 어디서 이런 얄팍한 수를 배워가지고 세상에 얄코: 자, 말했듯 이 젠킨스는 '설치형', 즉 내 컴퓨터나 얄코: 서비스가 돌아갈 서버에 직접 다운받고 깔아서 쓰는거에요. 얄코: 윈도우, 맥, 리눅스에 모두 설치 가능하죠. 미토: 서버가 보통 리눅스에서 도니까 리눅스에서 많이들 쓰이겠네요 얄코: 네. 젠킨스를 깔아서 실행하면, 해당 컴퓨터나 서버의 주소로 얄코: 크롬 등의 브라우저로 접속할 수 있는 웹사이트가 하나 열려요. 얄코: 서버의 아이피주소에, 젠킨스 기본 포트 8080으로 접속하고 얄코: 지정해 둔 아이디랑 비밀번호를 입력하면 얄코: 다양한 CI/CD 작업들을 세팅할 수 있는 페이지가 나오거든요. 얄코: 이 웹사이트가 이 CI/CD를 설정하기 위한 작업 콘솔인거에요. 얄코: 매크로를 만드는 화면이 열린다고 생각하시면 돼요. 미토: 말하자면 그 컴퓨터에서 할 일들을 세팅하는 패널을 미토: 웹사이트 형태로 만든거네요. 외부에서도 접속할 수 있게. 미토: 그럼 그걸로 어떤 것들을 할 수 있는거에요? 얄코: 가장 흔하고 단순한 예시를 들어볼게요. 얄코: 스프링 부트로 코딩한 프로젝트를 서버에 배포할거에요. 얄코: 먼저 젠킨스에 새 자동화 작업, 매크로를 하나 생성한 다음 얄코: 이를 Github이나 BitBucket, GitLab 등 얄코: 프로젝트를 저장하는 서비스 계정에 연동을 시켜요. 얄코: 그러면 이 작업의 첫 단계로, 이 Git 저장소의 특정 브랜치에 얄코: 소스가 푸시될 때마다 젠킨스에서 이 서버로 코드들을 얄코: 자동으로 젠킨스 전용 폴더로 다운로드하게 돼요. 미토: 아니 그럼 이제 내 컴퓨터에서 코딩한 걸 원격에 푸시만 하면 미토: 그게 젠킨스가 깔린 서버로까지 전송이 된다는거에요? 얄코: 그렇죠. 그 다음에 이뤄질 것들을 이제 매크로로 정하면 돼요. 얄코: 먼저 Github에서 당겨온 코드에 문제가 없는지 얄코: 테스트 코드에 지정된 테스트를 돌려서 확인을 하도록 할 건데요. 얄코: Gradle을 사용하는 프로젝트라, 받아온 코드에 Gradle 명령어로 얄코: 테스트를 수행하도록 할 수 있어요. 얄코: 이 Gradle 등의 기능은 젠킨스 페이지에서 마치 앱스토어처럼 얄코: 검색해서 다운받을 수 있는 1800개가 넘는 플러그인들로 제공돼요. 얄코: 마켓에 온갖 매크로들이 올라와있는거죠. 얄코: 이 테스트가 실패할 경우, 지정된 메일주소로 이메일을 보내거나 얄코: 슬랙 등으로 메시지를 날려서 개발자에게 바로 알려줄 수 있어요. 얄코: 물론 이들 역시 플러그인들로 제공되는 기능들이구요. 미토: Git똥차네 Git똥차, 여기까지가 CI에 해당하는 작업들이네요? 미토: 그럼 CD는요 CD. 여기서 배포까지 자동으로다가 막 해주고 그래요? 얄코: 네, 이전 단계들에서 문제가 없다면 실행되도록 설정한 다음 작업들에서 얄코: 프로젝트를 배포용 파일로 빌드한 다음 원하는 폴더로 옮겨서 얄코: 돌고 있던 서비스를 중지하고 이 파일로 새 서비스를 실행하는 얄코: 명령어를 스크립트로 실행하도록 하는거에요. 얄코: 이제 개발자는 코딩을 마친 후 이를 Git에서 푸시하기만 하면 얄코: 이걸 서버로 옮겨서 테스트하고 문제 없을시 빌드해서 배포하고 얄코: 테스트 실패시 보고를 해주는것까지 얄코: 이 젠킨스가 알아서 다 해주는거죠. 얄코: 이 진행과정도 터미널 보듯 젠킨스 페이지에서 확인할 수 있구요 미토: 이거는 와 이건 개발자 월급을 반으로 줄여야 돼 미토: 라떼는 말이에요 내가 하나하나 다 테스트해가지구요 미토: Filezilla로 서버에 올려가지구요 PuTTy로 접속해다가요 와 얄코: 이런게 생긴다고 개발자의 일이 줄어드는건 아니에요 얄코: 생산성이 늘어나는거지 얄코: 이것 말고도 젠킨스의 플러그인들을 잘 알고 활용하면 얄코: AWS에 연동해서 도커 컨테이너로 올려주거나 얄코: 다수의 작업들을 파이프라인으로 체계화하거나 얄코: 심지어 젠킨스 화면을 편리하고 예쁘게 바꿔주는 것 등 얄코: 여러 편리한 기능들을 이용하실 수 있구요 얄코: 심지어 젠킨스는 오픈소스이기 때문에 무료로 쓸 수 있어요 미토: 그러니까 우리네 어르신들 하시는 말씀이 틀린 게 없어요 미토: 공짜를 좋아하면 대머리가 된다고, 젠킨스 이 양반도 머리숱이 아주그냥 얄코: 젠킨스는 자기가 공짜로 일해주는 거잖아요. 그거랑은 다른 것 같구요 미토: 사례도 받지 않고 이런 귀한 일들을 해주시느라고 미토: 신수가 아니라 정수리가 훤해지셨구만. 저 정도면 이식도 안 될텐데 미토: 그건 그렇구요, 이 젠킨스 말고 또 다른 종류들이 있다는거잖아요? 얄코: 네, 젠킨스가 이처럼 서버나 내 컴퓨터에 직접 설치하는 '설치형'이라면 얄코: Travis CI나 Circle CI, Team City같은 클라우드형 서비스도 있어요. 얄코: Team City같은것들은 젠킨스처럼 설치형으로도 쓸 수 있지만 얄코: 이것들은 기본적으로 클라우드로 컴퓨팅 공간을 제공하는데 얄코: 여기서 자동화 작업들을 설정할 수 있는거죠. 얄코: 사용방법들은 다들 비슷비슷해요 얄코: Github 등의 Git 저장소 계정과 연동을 하고 나서 얄코: 레포지토리 중에 CI/CD를 진행할 프로젝트를 선택하고 얄코: 거기서 자동화로 처리할 작업들을 세팅하는거에요. 얄코: Travis로 예를 들자면, Github에 Node.js로 만든 프로젝트를 올려두면 얄코: 이 저장소를 Travis랑 연동시킬 수 있어요. 얄코: 그 프로젝트 최상위 폴더에 .travis.yml이란 파일을 만들고 얄코: 거기에 Travis에서 지정한 형식대로 얄코: 어떤 자동화 작업들을 진행할지 작성해둬요. 얄코: 다른 CI/CD 서비스들도 비슷합니다. 얄코: 고정댓글 링크에서 코드를 보실 수 있도록 올려놨는데 얄코: 지정한 브랜치에 푸시가 들어오면 얄코: 코드를 Github으로부터 Travis의 서버로 당겨와서 얄코: Node.js의 지정된 버전으로 테스트를 돌린 다음 얄코: 성공이나 실패 여부를 이메일로 보내도록 하는거에요. 얄코: 이제 이 프로젝트를 그 브랜치에 푸시하면 얄코: 테스트 결과를 메일로 받아볼 수 있는거죠. 미토: 거기까지는 CI 작업이네요. 미토: 근데 CD, 배포도 할 수 있어요? 미토: Travis의 서버에서 그 작업들이 돌아가는거잖아요, 미토: 그 프로젝트가 배포될 서버에서가 아니라. 미토: CD는 못하니까 Travis CI, Circle CI인가? 얄코: 클라우드 서버에서 테스트를 마치고 빌드를 한 다음 얄코: 배포할 서버로 전송하는 기능으로 CD도 가능해요. 얄코: 온프레미스 서버일 경우 파일들을 그리로 보낸 다음 얄코: 원격으로 명령어들을 실행할 수도 있고 얄코: AWS의 기능들과 연동하거나, Heroku에 바로 올릴 수도 있죠. 미토: 후루꾸라구요? 얄코: Heroku요. 서버 설정할 필요 없이 코드만 커밋하면 얄코: 알아서 웹사이트든 API든 실행해주는 서비스 있어요. 얄코: PaaS라고 하죠. 이건 나중에 따로 다뤄볼게요. 얄코: 이 클라우드 서비스들은 유료이거나 제한적으로 무료에요. 얄코: 개인적으로 가볍게는 무료로 이용할 수 있지만 얄코: 상업용 규모로 넘어가면 이용료를 내야 하죠. 미토: 유료라서 그런지 화면 디자인들은 아주그냥 깔쌈하네요 미토: 아까 그 젠킨스는 뭔가 쌈마이한게 윈도우 XP 삘이었는데 얄코: XP는... 7까지는 쳐줘도 될 것 같아요 미토: 그럼 이 설치식이랑 클라우드식이랑 미토: 또 뭐 다른 형태의 그 뭐시기도 있는거에요? 얄코: 이것들보다 새로운 형태의 CI/CD 서비스인데 얄코: 이젠 Github이나 Bitbucket, Gitlab 등에서 얄코: 아예 자체적으로 제공을 해요 얄코: 많이 쓰이는 걸로 Github Actions가 있죠 미토: 아니 깃트허브는 Git 원격 저장소 아녜요 미토: 코드 커밋해서 푸시하면 업로드 되는 미토: 이제 거기서 CI/CD도 해줄려고 그런단 말이에요? 미토: 이것저것 다 해먹으려고 애초에 로고를 문어발로 했구만 얄코: GitLab에도 CI/CD, Bitbucket에도 Pipelines라고 얄코: 다 제공하는 서비스들이에요. 미토: 근데 이 소스저장소가 어떻게 CI/CD를 또 다 해준대요? 얄코: Github에서 자기 프로젝트가 있는 레포지토리에 들어가보면 얄코: 상단에 재생버튼이랑 같이 Actions란 탭이 있어요. 얄코: 여기서 각 언어별로, 또는 AWS나 Azure 등의 배포처별로 얄코: 소스코드를 빌드하고 테스트하고 배포 등을 할 수 있는 얄코: '워크플로우'들의 다양한 템플릿들이 있어요. 얄코: 여기서 필요한 것들을 골라서 원하는 매크로를 조립해도 되고 얄코: 내가 직접 yml 파일로 작성해도 되고 얄코: 다른 사람들이 작성해서 마켓플레이스에 올려놓은 얄코: 워크플로우들을 다운받아서 쓸 수도 있죠. 얄코: 물론 내가 기여할 수도 있구요. 얄코: 소스가 푸시되는 등 지정된 이벤트가 발생하면 얄코: 깃헙에서 제공하는 클라우드 컨테이너 공간에서 얄코: 역시 이 빌드나 테스트, 슬랙 메시지 등의 작업들 얄코: 그리고 배포 등이 진행되는거에요. 미토: 소스코드 관리랑 CI/CD 자동화가 아주그냥 미토: 한군데서 다 되니까 쓰는 사람으로서는 맘 편하겠네요. 미토: 얘네 그럼 돈 받죠 이거 공짜로는 안 될거 아녜요 얄코: 숫자는 다르지만 서비스마다 보통 얄코: 한 달에 작업들이 돌아가는 총 시간을 기준으로 얄코: 얼마까지는 공짜, 그 이상으로는 유료 얄코: 이런 식으로 책정을 해요. 얄코: 비즈니스 단위로 가면 돈을 내야죠. 얄코: 이처럼 Git저장소 서비스들 외에도 얄코: AWS에서 자체적으로 제공하는 CodePipeline같은 것들도 있고 얄코: 정적 사이트를 Github 등에 올리면 바로 자기네 서버에 배포해주는 얄코: Netlify나 Vercel처럼 그 자체가 배포 자동화인 서비스들도 있어요. 얄코: 각각이 장단점이 있고 적합한 사용처가 있어요. 얄코: 편의성만 본다면 클라우드나 Github Actions 등이 좋을 수 있지만 얄코: 좀 더 자기 서버에 맞게 커스터마이징하려면 젠킨스가 좋을 수도 있죠. 미토: 세상이 참 이런 사람들의 노고 덕분에 발전을 하는거에요 미토: 어찌 이리 아주 응 장하고 기발한 것들을 미토: 거시기하게 또 만들어들 내는지 참 얄코: 사람의 게으름 때문에 기술이 발달한다고들 하잖아요 얄코: 자 오늘 이처럼 CI/CD의 개념에 대해 얄코: 그리고 그것들의 '자동화'를 도와주는 얄코: 다양한 서비스들을 종류별로 훑어봤습니다. 얄코: 특히 오늘은 미토씨의 한결 차분해하고 젠틀해진 진행이 얄코: 아주 매력적으로 다가왔던 방송이라고 보구요 얄코: 앞으로도 계속해서 더 좋은 컨텐츠들로 얄코: 여러분들을 찾아뵙도록 하겠습니다. 얄코: 얄코라디오에서 다뤄주었으면 하는 주제들 있으면 얄코: 댓글로 달아주시기 부탁드리구요. 얄코: 이상 얄코와 미토였습니다. 얄코: 즐코하세요! 미토: 이양반이 또 이런식으로 얼렁뚱땅 넘기려고 하네 미토: 뭐 토끼의 지속시간을 늘려줘? 썅노무시키가




관련 태그의 다른 영상들

CI/CD가 뭔가요?
CI/CD 자동화로 서비스 개발과 운영을 안전하고 편리하게!
# ci
# cd
# Jenkins
# Github Actions
...