CI : Continuous Integration
지속적 통합
소프트웨어를 개발하면서 새로운 코드를 작성하거나 코드를 변경하고 빌드 및 테스트하여 공유 리포지토리에 통합되는 것을 말합니다.
CI개발을 하려면 개발자들은 코드를 추가, 변경하면 주기적인 일정마다 공유 리포지토리에 병합시켜줘야 합니다.
만약 주기적으로 리포지토리에 공유하지 않고 오랜 시간이 지난 후 병합을 하면 아주 큰 컨플릭트(충돌)가 일어나겠죠?
작은 컨플릭트라면 그나마 다행이지만, 오랫동안 개인만의 개발을 한다면 나중에 병합을 할 때 큰 컨플릭트가 날 확률이 높습니다. 그래서 요즘 IT 기업들은 개인주의 성향의 개발자보다 커뮤니케이션을 중요시하는 개발자를 선호한답니다.
CI는 빌드, 테스트, 병합이 모두 자동화되어야 합니다.
프로그래머가 리포지토리에 코드를 공유를 한다면 빌드 후 테스트가 이루어지고 테스트가 통과까지 자동으로 이루어져야 합니다.
테스트 후 그 결과를 출력함으로써 프로그래머가 자신이 병합하고 공유한 코드에 문제를 파악하고, 빠르게 수정이 가능합니다. 그러면 높은 완성도의 소프트웨어 개발이 가능하겠죠?
프로그래머가 버그를 스스로 찾고 문제를 해결하는 것은 꽤나 번거롭고 시간이 드는 일입니다. 이러한 사소한 일을 자동으로 해결함으로써 개발자는 퀄리티 높은 소프트웨어를 개발하는 것에 집중할 수 있습니다.
CD : Continuous Deployment 또는 Continuous Delivery
지속적 배포 / 지속적 제공
CI를 통해 테스트까지 모두 끝나고 배포까지의 단계를 말합니다.
Deployment와 Delivery는 차이점이 있습니다.
- Deployment : 배포 단계를 자동화
CI를 마치고 릴리즈가 가능하다면 배포까지 자동으로 이루어질 때 Continuous Deployment라는 용어를 사용합니다. - Delivery : 배포 단계를 수동화
CI를 마치고 릴리즈가 가능하다면 배포 단계에서 사람의 검증을 통해 수동적으로 배포가 이루어지면 Continuous Delivery라는 용어를 사용합니다.
Deployment와 Delivery는 뭐가 좋고 나쁘다는 기준이 없습니다. 어떤 프로젝트를 개발하는지, 회사 또는 팀에서 어떤 방식을 선호하고 채택하는지에 따라 방식을 선택할 수 있습니다.
만약 테스트용 서버에 배포를 한다면 Continuous Deployment를 사용할 수 있습니다. 유닛 테스트 이외 시나리오 테스트, 통합 테스트에서 특정 오류나 수정사항이 생긴다면 프로그래머가 빠르게 수정하고 테스트 서버로 배포를 할 때 이러한 자동화된 방법을 사용하여 업무 속도를 증가시킬 수 있습니다.
하지만 중요한 서비스, 시스템을 고객들에게 배포를 한다면 철저한 검증을 통해서 배포되어야 할 것입니다. 이럴 땐 Continuous Delivery가 적합할 수 있습니다.
<CI/CD를 위한 툴>
젠킨스 (Jenkins)
자바 기반 오픈소스 CI/CD 툴입니다.
위키백과에서 정보를 조금 가져오자면, 젠킨스는 허드슨 프로젝트로 개발되어 2004년 여름 썬 마이크로시스템즈에서 시작된 CI 툴(Tool)이라고 합니다.
젠킨스는 설정도 자동으로 해주어 편리하고 다양한 플러그인을 설치할 수 있어 확장에 용이합니다.
CircleCI
사용해보지 않았지만 굉장히 완성도가 높은 엄청난 CI/CD 도구 중 하나입니다.
Cloud와 Server 버전으로 제공하고 있고, Window와 Linux 그리고 macOS에서도 구축할 수 있습니다.
TeamCity
JetBrains에서 개발한 CI/CD툴입니다. 자바 기반으로 개발되어 있어 자바가 설치되어 있어야 합니다.
클라우드와 직접 호스팅을 위한 서버로 사용이 가능한데 서버는 예상 밖으로 무료입니다.
물론 무제한 빌드와 더 많은 기능을 사용하려면 유료로 사용해야 하지만, 상업용으로도 무료이기 때문에 일반 기업에서도 사용할 수 있을 정도의 규모입니다.
https://wooncloud.tistory.com/79
CI/CD 기본 개념 정리와 툴
CI/CD 란? CI : Continuous Integration 지속적 통합 소프트웨어를 개발하면서 새로운 코드를 작성하거나 코드를 변경하고 빌드 및 테스트하여 공유 리포지토리에 통합되는 것을 말합니다. CI개발을 하려
wooncloud.tistory.com
1.jenkins
- 장점 : 사용자가 많음
다양한 플러그인 제공
- 단점 : 설치형으로 AWS EC2을 사용한다면 젠킨스만을 위한 인스턴스 필요
플러그인이 다양한 만큼 세팅이 복잡
2.Travis CI + AWS CodeDeploy
- 장점 : Github와의 연동성, 설치 필요 없는 오픈소스 웹 서비스
YML 통한 쉬운 설정
- 단점 : Private Repository일 경우 유료(1달 $69)
3.AWS CodePipeline
-장점 : AWS 하나로 관리 가능
-단점 : 요금 발생(파이프라인당 $1 + 추가요금)
4.Github Action
-장점 : 툴 설치 없이 바로 Repository에서 관리
설정 쉬움
-단점 : private repo는 요금 발생
출처 블로그 가면 간략한 사용방법과 링크도 있다.
많이 보인 툴들을 다루고 툴에 대한 간략한 설명이랑 목록이 있어 좋은듯..?
https://datamoney.tistory.com/288
[DevOps] CI / CD 파이프라인 (CI/CD 입문 / CI/CD툴 비교분석)
CI Continous Integration : 지속적 통합 > 빌드, 테스트 자동화 > 개발에서 발생하는 불일치 최소화 > 품질 관리 CD Continuous Deployment : 지속적 배포 > 배포 자동화 CI / CD 사용 목적 : 개발하며 git에 계속해
datamoney.tistory.com
지속적 배포는 빌드, 테스트 및 배포 단계를 자동화하는 DevOps 방식을 논리적 극한까지 끌어 올립니다. 코드 변경이 파이프라인의 이전 단계를 모두 성공적으로 통과하면 수동 개입 없이 해당 변경 사항이 프로덕션에 자동으로 배포됩니다. 지속적 배포를 채택하면 품질 저하 없이 최대한 빨리 사용자에게 새로운 기능을 제공할 수 있습니다.
위랑 다른 블로그임! 출처 : https://seosh817.tistory.com/104
[CI/CD] CI/CD란? - 지속적 통합(Continuous Integration)/지속적 배포(Continuous Deployment) 기본개념
매번 개발자가 코드를 수정하고 빌드와 테스트를 하고 배포까지 한다면 상당히 많은 시간이 소요됩니다. 하지만 git에 코드를 올리는 것만으로도 누군가가 빌드와 테스트, 배포까지 해준다면,
seosh817.tistory.com
버디
젠킨스
빌드 봇
ThoughtWorks
Urbancode 배포
퍼 포스 헬릭스
대나무
허드슨
TeamCity
서클 CI
코드 십
크루즈 컨트롤
Go / GoCD
트래비스
Integrity
Strider 또는 Strider CD
AppVeyor
솔라노
세마포어
AutoRabit
팀 파운데이션 서버
최종 빌더
베르 커
빌드 키트
드론
https://ko.myservername.com/15-best-continuous-integration-tools-2021
2021 년 최고의 지속적 통합 도구 15 개 이상 (비교) - 다른
이 튜토리얼에서 상위 15 개의 최고의 연속 통합 (CI) 도구를 나열하고 비교했습니다. 이 목록에는 유료 및 무료 오픈 소스 유용한 도구가 포함되어 있습니다.
ko.myservername.com
여러 블로그를 읽어보고 느낀 건
private 쓸 거면 역시 젠킨스
(아래 강의가 괜찮다길래 가져옴. 이거 추천해주신 분은 대체 강의를 얼마나 들으시는 거야...?)
Jenkins를 이용한 CI/CD Pipeline 구축 - 인프런 | 강의
본 강의는 클라우드 네이티브 애플리케이션을 구성하는 4가지 핵심 요소(MSA, CI/CD, DevOps, Container) 중 하나인 CI(Continuous Integration, 지속적인 통합)과 CD(Continuous Deployment, 지속적인 배포) 파이프라...
www.inflearn.com
혼자 뽀작뽀작 할 거면 git action을 써보고 싶다.
그 외에 CI/CD라는 용어를 찾다보니 DevOps ('development개발'와 'operations운영'이 합쳐진 단어)와 TDD(Test-Driven-Development, 테스트 주도 개발)까지 모든 게 얽혀있고 관통되는 시스템, 파이프 라인인 듯 하다.
갈 길이 멀구만..!!
[기술면접] TDD(Test-Driven-Development) 방법론에 대해서
TDD(Test-Driven-Development) 방법론에 대해서 파헤쳐보자! ❓ TDD가 무엇입니까? - TDD란 Test Driven Development의 약자로 '테스트 주도 개발'이라고 한다. 반복 테스트를 이용한 소프트웨어 방법론으로, 작은
wooaoe.tistory.com
'사소한 Tip과 개념들' 카테고리의 다른 글
.config 파일이란 (0) | 2022.11.03 |
---|---|
spring.jpa.hibernate.ddl-auto 설정 (0) | 2022.11.03 |
스레드 기초 유도원님 강의, 책 추천목록 (0) | 2022.11.01 |
chmod 리눅스 명령어 (0) | 2022.11.01 |
AWS 3주차 (0) | 2022.11.01 |