KR102663188B1 - 빌드 배포 자동화 시스템 - Google Patents

빌드 배포 자동화 시스템 Download PDF

Info

Publication number
KR102663188B1
KR102663188B1 KR1020240015802A KR20240015802A KR102663188B1 KR 102663188 B1 KR102663188 B1 KR 102663188B1 KR 1020240015802 A KR1020240015802 A KR 1020240015802A KR 20240015802 A KR20240015802 A KR 20240015802A KR 102663188 B1 KR102663188 B1 KR 102663188B1
Authority
KR
South Korea
Prior art keywords
commit
module
build
branch
cicd
Prior art date
Application number
KR1020240015802A
Other languages
English (en)
Inventor
변상필
Original Assignee
(주)엘이테크
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by (주)엘이테크 filed Critical (주)엘이테크
Priority to KR1020240015802A priority Critical patent/KR102663188B1/ko
Application granted granted Critical
Publication of KR102663188B1 publication Critical patent/KR102663188B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Electrical Discharge Machining, Electrochemical Machining, And Combined Machining (AREA)
  • Paper (AREA)

Abstract

본 발명은 빌드 배포 자동화 시스템에 관한 것으로, 소프트웨어의 형상으로서 소스 코드, 상기 소스 코드의 관리 체계, 및 소스 코드로부터 목적 파일을 생산하기 위한 정보들을 관리하는 형상 관리 모듈, 상기 형상 관리 모듈로부터 상기 형상을 내려받고, 빌드 및 테스트를 수행하는 빌드 배포 모듈, 라이브러리, 패키지, 및 바이너리를 포함하는 빌드 아티팩트를 저장하고 관리하는 라이브러리 저장소, 데이터베이스 관리 시스템, 및 배포 계획의 엉킴 문제를 자동으로 해결하는 배포 계획 수정 기능을 포함하는 CICD 모듈을 포함하는 바, 독립적인 소스로 분기되어 새로운 기능을 추가하거나 수정하는 작업을 서로 다른 팀이나 개발자가 브랜치 작업을 수행하더라도 빌드 배포 일정의 충돌없이 협업을 가능하게 할 수 있다.

Description

빌드 배포 자동화 시스템{BUILD DEPLOYMENT AUTOMATION SYSTEM}
본 발명은 빌드 배포 자동화 시스템에 관한 것이다.
소프트웨어의 개발은 개발이 시작되기 전 부터 개발의 완료에 이르는 긴 시간동안 모든 단계에서 다양한 이해 관계자가 자신의 목적과 목표를 소프트웨어에 투영한다. 소프트웨어의 개발 과정은 한 번의 사이클로 끝나지 않고 반복적으로 수행되어 조직이 이 소프트웨어에 요구하는 가치에 점진적으로 다가가도록 소프트웨어를 발전시킨다. 소프트웨어는 이러한 발전을 거듭하는 과정속에서 필연적으로 변경이 일어나게 된다.
소프트웨어 변경 관리란 소프트웨어 변경에 대한 조직의 IT자원 형상의 생성, 개발, 관리에서부터 고객에게 전달하기까지 전 과정을 관리하는 관리 방법론이자 관리 체계를 의미한다. 소프트웨어 변경 관리는 전체 과정내의 개별 단계와 각 단계별로 참여하는 이해 관계자가 수행해야 하는 업무를 정의하고, 조직의 의사 결정 체계를 이용하여 개발 단계를 제어하는 과정들을 포함한다.
소프트웨어 변경 관리의 핵심은 이해 관계자들의 관심 사항들을 조직의 의사결정체계에 따라 소프트웨어의 형상에 반영하는 절차를 관리하는데 있고, 절차적으로는 조직의 의사결정체계를, 기능적으로는 형상관리를 내포한다.
소프트웨어의 형상(이하 “형상”)이란 소프트웨어가 목표로 하는 최종 결과물을 만들기 위해 갖추어야 할 전체 환경(또는 구성)을 의미한다. 이러한 환경에는 소프트웨어 개발을 위한 소스 코드(Source Code) 자체부터 각 소스 코드의 관리 체계(예: 파일 및 디렉토리의 구조 및 명명규칙 등), 소스 코드로 부터 생산되는 최종 결과물을 생산하기 위한 정보들(예: 컴파일러, 컴파일옵션…)을 포함한다. 형상은 소프트웨어의 최종결과물(예: 라이브러리, 실행파일)과 이 최종 결과물을 생산하는 방법을 포함하는 것으로 해석될 수 있다. 소프트웨어 형상 관리는 이러한 형상을 체계적이고, 일관적으로 관리하여 소프트웨어 개발에 참여하는 모든 참여자(예: 개발자, 테스터, 고객 등) 모두에게 동일한 형상을 제공하는데 그 목적이 있다.
최근 소프트웨어의 개발 환경은 기민한 대응(또는 신속한 개발), 짧은 개발주기, 점증적인 기능 개발로 향해 가고 있다. 이러한 새로운 개발 방법론들은 형상관리에서도 짧은 주기로, 빈번하게 적용되고 있으며, 이에 따라 형상 관리에서 지속적인 통합 및 배포(Continuous Integration Continuous Delivery, 이하 “CICD”)는 핵심 요구 사항으로 부각되고 있다.
대한민국등록특허 제10-2235029호
본 발명의 다양한 실시 예는 상기 문제점을 해결하기 위한 것으로, 지속적인 통합 및 배포(CICD)가 가능하게 하는 빌드 배포 자동화 시스템을 제공하는데 목적이 있다.
또한, 본 발명의 다양한 실시 예는 독립적인 소스로 분기되어 새로운 기능을 추가하거나 수정하는 작업을 서로 다른 팀이나 개발자가 브랜치 작업을 수행하더라도 빌드 배포 일정의 충돌없이 협업을 가능하게 하는 빌드 배포 자동화 시스템을 제공하는데 목적이 있다.
본 발명의 다양한 실시예에 따른 빌드 배포 자동화 시스템은 소프트웨어의 형상으로서 소스 코드, 상기 소스 코드의 관리 체계, 및 소스 코드로부터 목적 파일을 생산하기 위한 정보들을 관리하는 형상 관리 모듈, 상기 형상 관리 모듈로부터 상기 형상을 내려받고, 빌드 및 테스트를 수행하는 빌드 배포 모듈, 라이브러리, 패키지, 및 바이너리를 포함하는 빌드 아티팩트를 저장하고 관리하는 라이브러리 저장소, 데이터베이스 관리 시스템, 및 CICD(Continuous Integration Continuous Delivery) 모듈을 포함하고, 상기 CICD 모듈은, 신규 티켓 브랜치에서 신규 커밋에 대한 배포 등록 요청이 수신되면, 상기 형상 관리 모듈에서 관리되는 릴리즈(release) 브랜치에서 사전에 통합되어 출시를 기다리고 있는 선행 커밋들이 존재하는지 판단하고, 상기 선행 커밋들이 존재하는 경우, 상기 형상 관리 모듈을 제어하여 상기 릴리즈 브랜치에서 상기 선행 커밋들을 되돌림(revert)하도록 하고, 상기 선행 커밋들이 되돌림된 이후에, 상기 신규 커밋이 상기 릴리즈 브랜치에 병합되도록 상기 형상 관리 모듈을 제어하도록 설정된다.
기타 실시예의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
본 발명의 다양한 실시 예에 따른 빌드 배포 자동화 시스템으로는, 지속적인 통합 및 배포(CICD)가 가능하게 할 수 있다.
또한, 독립적인 소스로 분기되어 새로운 기능을 추가하거나 수정하는 작업을 서로 다른 팀이나 개발자가 브랜치 작업을 수행하더라도 빌드 배포 일정의 충돌없이 협업을 가능하게 할 수 있다.
실시예들에 따른 효과는 이상에서 예시된 내용에 의해 제한되지 않으며, 더욱 다양한 효과들이 본 명세서 내에 포함되어 있다.
도 1은 본 발명의 일 실시예에 따른 빌드 배포 자동화 시스템의 구성도이다.
도 2는 도 1에 도시된 CICD 모듈을 구체적으로 나타낸 세부 구성도이다.
도 3은 커밋(commit) 및 브랜치(branch)를 설명하기 위한 개념도이다.
도 4는 브랜치 트리(branch-tree)를 설명하기 위한 개념도이다.
도 5는 병합(merge)을 설명하기 위한 개념도이다.
도 6은 배포 계획의 엉킴 문제를 설명하기 위한 예시도이다.
도 7은 본 발명의 CICD 모듈이 배포 계획의 엉킴 문제를 자동으로 해결하는 방법을 설명하기 위한 예시도이다.
도 8은 본 발명의 일 실시예에 따른 빌드 배포 자동화 시스템의 동작을 설명한 흐름도이다.
전술한 목적, 특징 및 장점은 첨부된 도면을 참조하여 상세하게 후술되며, 이에 따라 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명의 기술적 사상을 용이하게 실시할 수 있을 것이다. 본 발명을 설명함에 있어서 본 발명과 관련된 공지 기술에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 상세한 설명을 생략한다. 이하, 첨부된 도면을 참조하여 본 발명에 따른 바람직한 실시예를 상세히 설명하기로 한다.
도 1은 본 발명의 일 실시예에 따른 빌드 배포 자동화 시스템의 구성도이다.
도 1을 참조하면, 일 실시예에 따른 빌드 배포 자동화 시스템(100)은 CICD(Continuous Integration Continuous Delivery) 모듈(110), 형상 관리 모듈(120), IaaS(Infrastructure as a Service)용 빌드 배포 모듈(131), CaaS(container as a Service)용 빌드 배포 모듈(132), 라이브러리 저장소(140), 컨테이너 이미지 저장소(150), 및 데이터베이스 관리 시스템(이하, DBMS(DataBase Management System))(160)를 포함한다.
CICD 모듈(110)은 형상 관리 모듈(120)을 제어하여, 소프트웨어의 형상을 관리한다. 예를 들어, CICD 모듈(110)은 형상 관리 모듈(120)을 제어하여 각 소스 코드의 관리 체계(예: 파일 및 디렉토리의 구조 및 명명규칙 등), 소스 코드로 부터 생산되는 최종 결과물을 생산하기 위한 정보들(예: 컴파일러, 컴파일옵션…)을 관리한다. 또한, CICD 모듈(110)은 형상 관리 모듈(120)을 제어하여 소프트웨어의 최종결과물(예: 라이브러리, 실행파일)을 관리한다.
CICD 모듈(110)은 빌드 배포 모듈, 예컨대 IaaS용 빌드 배포 모듈(131) 및/또는 CaaS용 빌드 배포 모듈(132)을 제어하여 빌드 배포를 실행한다. 예를 들어, IaaS용 빌드 배포 모듈(131)은, CICD 모듈(110)의 제어 하에, 형상 관리 모듈(120)로부터 지정된 버전의 커밋(commit)에 해당하는 소프트웨어의 형상을 내려받고, 빌드 및 테스트를 수행하여 최종적인 소프트웨어를 생성할 수 있다. IaaS용 빌드 배포 모듈(131)은 소프트웨어의 형상에 대한 빌드 및 테스트를 수행한 결과를 CICD 모듈(110)에게 전달하고, 생성한 소프트웨어를 라이브러리 저장소(140)에 저장할 수 있다. 마찬가지로, CaaS용 빌드 배포 모듈(132)은 오류없이 빌드된 소프트웨어를 컨테이너 이미지 저장소(150)에 배포할 수 있다.
CICD 모듈(110)은 소프트웨어의 형상 관리 및 빌드 배포와 관련한 정보를 DBMS(160)에 저장하고, DBMS(160)에 저장된 정보를 조회할 수 있다.
형상 관리 모듈(120)은 소프트웨어의 형상을 관리한다. 형상 관리 모듈(120)은 소프트웨어의 소스 코드나 소스 코드의 변경사항들을 저장 및 관리할 수 있다. 예를 들어, 형상 관리 모듈(120)은 GitLabTM일 수 있으나, 본 발명은 이에 제한되지 않는다.
IaaS용 빌드 배포 모듈(131)은 오픈 소스를 이용하여 개발 프로세스와 운영 프로세스를 구성한다. IaaS용 빌드 배포 모듈(131)은 형상 관리 모듈(120)과 연동하여 소스 코드의 커밋을 감지하면, 자동화 테스트가 포함된 빌드가 작동되도록 하는 기능을 제공할 수 있다. 예를 들어, IaaS용 빌드 배포 모듈(131)은 JenkinsTM일 수 있으나, 본 발명은 이에 제한되지 않는다.
CaaS용 빌드 배포 모듈(132)은 쿠버네티스(Kubernetes)의 구성요소들을 관리하고 배포하기 위하여, GitOps방식으로 관리되는 Manifest 파일의 변경사항을 감시하며, 현재 배포된 환경의 상태와 Git에 정의된 Manifest 상태를 동일하게 유지하는 역할을 수행한다. 예를 들어, CaaS용 빌드 배포 모듈(132)은 ArgoCDTM일 수 있으나, 본 발명은 이에 제한되지 않는다.
라이브러리 저장소(140)는 소프트웨어의 개발 및 빌드 프로세스에서 빌드 아티팩트(예: 라이브러리, 패키지, 바이너리 등)를 저장하고 관리한다. 예를 들어, 라이브러리 저장소(140)는 NexusTM 일 수 있으나, 본 발명은 이에 제한되지 않는다.
컨테이너 이미지 저장소(150)는 오픈 소스에 기반한 컨테이너 이미지의 저장 및 관리 기능을 제공한다. 예를 들어, 컨테이너 이미지 저장소(150)는 HarborTM일 수 있으나, 본 발명은 이에 제한되지 않는다.
DBMS(160)는 데이터베이스를 관리하며 응용 프로그램들이 데이터베이스를 공유하여 사용할 수 있는 환경을 제공하는 소프트웨어를 나타낸다. DBMS(160)는 데이터베이스를 구축하는 틀을 제공하고, 효율적으로 데이터를 검색하고 제공하는 기능을 제공한다. 또한, DBMS(160)는 데이터베이스에 접근할 수 있는 인터페이스를 제공하고, 장애에 대한 복구 기능, 사용자 권한에 따른 보안성 유지 기능 등을 제공할 수 있다. 예를 들어, DBMS(160)는 MariaDBTM일 수 있으나, 본 발명은 이에 제한되지 않는다.
도 2는 도 1에 도시된 CICD 모듈을 구체적으로 나타낸 세부 구성도이다.
도 2를 참조하면, 일 실시예에 따른 CICD 모듈(110)은 프로젝트 관리부(210), 파이프라인 관리부(220), 잡 관리부(230), 템플릿 관리부(240), 티켓 관리부(240), 및 배포 관리부(260)를 포함한다. CICD 모듈(110)은 전술한 구성요소들 이외에도, 본 문서를 참조하여 CICD 모듈(110)이 수행하는 기능들을 수행하기 위한 적어도 하나의 모듈들을 더 포함할 수 있다.
프로젝트 관리부(210)는 형상 관리 모듈(120)에게 프로젝트 생성을 지시하고, 프로젝트의 결과를 DBMS(160)에 저장한다.
파이프라인 관리부(220)는 파이프라인의 생성을 관리한다. 예를 들어, 파이프라인 관리부(220)는 IaaS용 빌드 배포 모듈(131)이 형상 관리 모듈(120)로부터 지정된 버전의 커밋(commit)에 해당하는 소프트웨어의 형상을 내려받도록 하는 파이프라인을 생성 및 관리할 수 있다. 이러한 파이프라인은 저장소와 잡으로 구성될 수 있다. 파이프라인 관리부(220)는 IaaS용 빌드 배포 모듈(131)에게 잡 생성을 지시할 수 있다.
잡 관리부(230)는 IaaS용 빌드 배포 모듈(131)에게 잡 실행을 지시하고, IaaS용 빌드 배포 모듈(131)의 잡 실행 결과를 DBMS(160)에 저장한다. 여기서, 잡은 빌드 잡 및 배포 잡을 포함할 수 있다.
템플릿 관리부(240)는 잡을 생성하는데 필요한 템플릿들을 관리한다. 예를 들어, 템플릿 관리부(240)는 새로운 저장소와 잡을 생성하는데 필요한 템플릿을 DBMS(160)에서 조회할 수 있다.
티켓 관리부(250)는 형상 관리 모듈(120)을 제어하여 사용자 또는 고객의 요청사항에 대응하는 티켓과, 티켓에 관련한 티켓 브랜치를 관리한다. 티켓 관리부(250)는 형상 관리 모듈(120)을 제어하여 티켓 브랜치에 포함된 커밋의 병합(merge) 및 되돌림(revert)을 제어할 수 있다.
배포 관리부(260)는 소프트웨어의 배포 일정을 관리한다. 배포 관리부(260)는 새로운 배포가 등록되면, 티켓 관리부(250)에게 이를 알릴 수 있다.
도 3은 커밋(commit) 및 브랜치(branch)를 설명하기 위한 개념도이다.
도 3은 커밋의 예시로서, 커밋#11(311), 커밋#12(312), 커밋#13(313), 커밋#14(314), 및 커밋#15(315)을 도시하고, 이 커밋들(311~315))이 하나의 브랜치(301)에 배치된 것을 예시하고 있다.
도 3을 참조하면, 커밋들(311~315)은 소프트웨어의 형상의 기록이다. 예를 들어, 소프트웨어의 형상은 소프트웨어가 목표로 하는 최종 결과물을 만들기 위해 갖추어야 할 전체 환경(또는 구성)을 의미하고, 이러한 환경에는 소프트웨어 개발을 위한 소스 코드(Source Code) 자체부터 각 소스 코드의 관리 체계(예: 파일 및 디렉토리의 구조 및 명명규칙 등), 소스 코드로 부터 생산되는 최종 결과물(예: 목적 파일)을 생산하기 위한 정보들(예: 컴파일러, 컴파일 옵션)을 포함한다. 따라서, 커밋(311~315)은 소프트웨어가 개별되는 중간 과정의 소스 코드의 관리 체계(예: 파일 및 디렉토리의 구조 및 명명규칙 등)을 포함할 수 있다.
브랜치(301)는 소프트웨어의 형상이 변경된 순서대로 커밋들(311~315)을 연결한 가상의 선을 의미할 수 있다. 하나의 브랜치(301)에서, 커밋들(311~315) 각각은 과거 특정 시점에 해당된 소프트웨어의 형상을 의미할 수 있다.
한편, 동일한 브랜치(301)에 있는 커밋들(311~315) 중에서 나중에 생성된 커밋은 앞서 생성된 모든 커밋들의 변경사항을 포함하고 있다. 예를 들어, 커밋#15(315)는 커밋#11(311), 커밋#12(312), 커밋#13(313), 및 커밋#14(314)의 내용들을 포함하고 있다.
CICD 모듈(110)은 브랜치(301)에서 커밋들(311~315)을 과거 시점으로 되돌림(revert)할 수 있다. 예를 들어, CICD 모듈(110)은 형상을 커밋#15(315)으로부터 커밋#11(311), 커밋#12(312), 커밋#13(313), 및 커밋#14(314) 중에서 어느 하나로 되돌림(revert)할 수 있다.
도 4는 브랜치 트리(branch-tree)를 설명하기 위한 개념도이다.
도 4는 커밋의 예시로서, 커밋#11(311), 커밋#12(312), 커밋#13(313), 커밋#14(314), 및 커밋#15(315)을 도시하고, 이 커밋들(311~315))이 제1 브랜치(391)에 배치된 것을 예시하고 있다.
도 4를 참조하면, 특정 브랜치에 배치된 커밋들(311~315) 각각은 새로운 브랜치로 분기할 수 있다. 즉, 특정 브랜치에 배치된 커밋들(311~315) 각각은 새로운 브랜치로 분기하여 브랜치 트리(branch-tree)를 구성할 수 있다. 도 4에서는 커밋#12(312)로부터 제2 브랜치(392)가 새롭게 분기하고, 커밋#13(313)로부터 제3 브랜치(393)가 새롭게 분기한 것을 예시하고 있다.
도 5는 병합(merge)을 설명하기 위한 개념도이다.
도 5는 커밋의 예시로서, 프로덕션(production) 브랜치(501)에 배치되는 커밋#11(311), 커밋#12(312), 커밋#13(313), 및 커밋#14(314)와, 릴리즈(release) 브랜치(502)에 배치되는 커밋#21(321), 커밋#22(322), 커밋#23(323), 및 커밋#24(324)를 도시한다.
도 5를 참조하면, CICD 모듈(110)은 일정 규모 이상의 분업화된 개발 조직에서 형상 관리가 용이하도록 형상을 통합(Integration)하는 용도로 프로덕션 브랜치(501)를 구성하고, 프로덕션 브랜치(501)에서 우선적으로 형상을 통합한다. CICD 모듈(110)은 프로덕션 브랜치(501)에서 우선적으로 형상을 통합한 이후에, 소프트웨어의 출시 일정에 맞춰 소프트웨어를 배포(Delivery)하는 용도의 릴리즈 브랜치(502)를 구성한다. 따라서, 도 5에 도시된 예시에 따르면, 릴리즈 브랜치(502)에 통합된 순서인 커밋#21(321), 커밋#22(322), 커밋#23(323), 및 커밋#24(324)의 순서대로 배포될 수 있다.
CICD 모듈(110)은 하나 또는 그 이상의 브랜치에 배치된 형상들, 즉 커밋들을 또 다른 브랜치의 새로운 커밋에 기록하는 병합을 수행할 수 있다. 예를 들어, 도 5에 도시된 예시는, 커밋#11(311)이 커밋#21(321)에 병합되고, 커밋#12(312)가 커밋#22(322)에 병합되고, 커밋#13(313)이 커밋#23(323)에 병합되고, 커밋#14(314)가 커밋#24(324)에 병합되는 것을 예시하고 있다.
도 6은 배포 계획의 엉킴 문제를 설명하기 위한 예시도이다.
도 6은 커밋의 예시로서, 프로덕션 브랜치(501)에 배치되는 커밋#11(311), 커밋#12(312), 커밋#13(313), 및 커밋#14(314)와, 릴리즈 브랜치(502)에 배치되는 커밋#21(321), 커밋#22(322), 커밋#23(323), 및 커밋#24(324)를 도시한다.
도 6을 참조하면, 사용자 또는 고객의 요청에 따라 새롭게 티켓이 발행되고, 발생된 티켓에 따라 작업된 결과물인 신규 커밋이 기존에 이미 릴리즈 브랜치(502)에 통합되어 출시를 기다리고 있는 커밋들보다 먼저 출시되어야 하는 케이스가 발생할 수 있다. 여기서, 티켓은 사용자 또는 고객의 요구에 따라 처리 해야하는 이슈들을 의미한다. 예를 들어, 티켓은 새로운 기능의 추가, 및 기존 기능에 대한 수정에 대한 이슈들을 포함할 수 있다.
도 6의 도시된 예시에 따르면, 커밋#14(314)는 커밋#24(324)로 통합되었고, 그 통합 이전에 커밋#21(321), 커밋#22(322), 및 커밋#23(323)이 릴리즈 브랜치(502)에서 출시를 기다리고 있다. 따라서, 커밋#14(314)을 커밋#24(324)에 병합하여 커밋#24(324)을 배포하는 경우, 커밋#21(321), 커밋#22(322), 및 커밋#23(323)이 함께 배포될 수 있다. 이때, 사용자 또는 고객이 커밋#21(321), 커밋#22(322), 및 커밋#23(323)에 대한 배포를 원하지 않는 문제가 발생할 수 있다. 즉, 사용자 또는 고객의 요청에 따라 새롭게 티켓이 발행되고, 발생된 티켓에 따라 작업된 결과물인 신규 커밋인 커밋#14(314)이 기존에 이미 릴리즈 브랜치(502)에 통합되어 출시를 기다리고 있는 커밋들(321, 322, 323)보다 먼저 출시되어야 하는 경우, 배포 계획의 엉킴 문제가 발생할 수 있다.
배포 계획의 엉킴 문제는 소프트웨어의 개발 과정에서 신규 티켓 및 이슈의 해결 과정에서 빈번하게 발생될 수 있으며, CICD 모듈(110)은 이러한 배포 계획의 엉킴 문제를 자동으로 해결하는 배포 계획 수정 기능을 포함할 수 있다.
도 7은 본 발명의 CICD 모듈이 배포 계획의 엉킴 문제를 자동으로 해결하는 방법을 설명하기 위한 예시도이다.
도 7은 커밋의 예시로서, 프로덕션 브랜치(501)에 배치되는 커밋#11(311), 커밋#12(312), 커밋#13(313), 및 커밋#14(314)와, 릴리즈 브랜치(502)에 배치되는 커밋#21(321), 커밋#22(322), 커밋#23(323), 및 커밋#24(324)를 도시한다.
도 7은 제1 티켓 브랜치(591)에 생성된 커밋#2(302), 제2 티켓 브랜치(592)에 생성된 커밋#3(303), 및 제3 티켓 브랜치(593)에 생성된 커밋#4(304)를 예시적으로 더 도시하고 있다.
도 7을 참조하면, CICD 모듈(110)은 배포 계획 엉킴 문제를 발견하기 위해서, 모든 이슈와 티켓의 배포 스케줄을 빌드 배포 모듈(예: 도 1의 IaaS용 빌드 배포 모듈(131))과 별도로 관리할 수 있다. 또한, CICD 모듈(110)은 모든 브랜치(591, 592, 593, 501) 각각에 대한 병합(merge) 및 되돌림(revert)을 제어하고, 릴리즈 브랜치(502)의 배포 일정을 관리할 수 있다.
특히, 도 7은 제3 티켓 브랜치(593)에 생성된 커밋#4(304)가 사용자 또는 고객의 요청에 따라 기존에 이미 릴리즈 브랜치(502)에 통합되어 출시를 기다리고 있는 커밋들(321, 322, 323, 324)보다 먼저 출시되어야 하는 케이스를 가정하고 있다. CICD 모듈(110)은 상기 가정된 케이스에 따른 배포 계획 엉킴 문제를 해결하기 위하여 다음과 같이 동작할 수 있다.
먼저, CICD 모듈(110)은 사용자 또는 고객의 요청에 따라 신규 이슈로 생성된 커밋#4(304)가 릴리즈 브랜치(502)에 병합되기 이전에 배포 계획 엉킴 문제가 발생하는지 판단한다. 도 7의 예시의 경우, 커밋#4(304)의 생성 이전에, 커밋#21(321), 커밋#22(322), 커밋#23(323), 및 커밋#24(324)가 릴리즈 브랜치(502)에서 배포를 기다리고 있으므로, CICD 모듈(110)은 배포 계획 엉킴 문제가 발생하는 것으로 판단할 수 있다.
CICD 모듈(110)은 배포 계획 엉킴 문제가 발생하는 것으로 판단한 경우, 기 생성된 커밋들을 되돌림(revert)한다. 예를 들어, CICD 모듈(110)은 릴리즈 브랜치(502)에서 커밋#21(321), 커밋#22(322), 커밋#23(323), 및 커밋#24(324) 되돌림하고, 프로덕션 브랜치(501)에서 커밋#12(312), 커밋#13(313), 및 커밋#14(314)를 되돌림한다.
CICD 모듈(110)은 기 생성된 커밋들을 되돌림한 이후에, 사용자 또는 고객의 요청에 따라 신규 이슈로 생성된 커밋#4(304)에 대한 병합을 수행한다. CICD 모듈(110)은 커밋#4(304)을 커밋#11(311)에 병합하고, 커밋#11(311)을 커밋#21(321)에 병합할 수 있다. 이어서, CICD 모듈(110)은 되돌림하였던 커밋들을 다시 순서대로 병합할 수 있다. 예를 들어, CICD 모듈(110)은 커밋#11(311)을 커밋#21(321)에 병합한 이후에, 커밋#12(312), 커밋#13(313), 및 커밋#14(314)를 생성하고, 커밋#22(322), 커밋#23(323), 및 커밋#24(324)를 생성한다. 따라서, 커밋#22(322), 커밋#23(323), 및 커밋#24(324)은 CICD 모듈(110)의 배포 계획 수정 기능에 의해, 커밋#21(321) 이후에 배포될 수 있다.
도 8은 본 발명의 일 실시예에 따른 빌드 배포 자동화 시스템의 동작을 설명한 흐름도이다.
도 8은 CICD 모듈(110)의 동작으로서, 동작 701 내지 동작 715를 개시하고 있다. 도 8은 형상 관리 모듈(120)의 동작으로서, 동작 721 내지 동작 723을 개시하고 있다. 도 8은 라이브러리 저장소(140)의 동작으로서, 동작 731 내지 동작 732를 개시하고 있다. 도 8은 IaaS용 빌드 배포 모듈(130)의 동작으로서, 동작 741 내지 동작 742를 개시하고 있다. 동작 741 내지 동작 742은 CaaS용 빌드 배포 모듈(132)의 동작일 수 있다. 즉, 이하에서는 도 8을 참조하여 빌드 배포 모듈의 한 예시로서 IaaS용 빌드 배포 모듈(130)의 동작을 설명하지만, 해당 동작들은 CaaS용 빌드 배포 모듈(132)의 동작일 수 있다.
이하, 도 8을 참조하여, 본 발명의 일 실시예에 따른 빌드 배포 자동화 시스템(100)의 CICD 모듈(110)이 배포 계획의 엉킴 문제를 해결하는 동작(즉, 배포 계획 수정 기능)을 설명하기로 한다.
동작 701에서, CICD 모듈(110)은, 티켓을 등록할 수 있다. 사용자 또는 고객의 요구에 따라 처리 해야하는 이슈들을 수신하고, 수신된 이슈에 대응되는 티켓을 등록할 수 있다.
동작 702 및 동작 703에서, CICD 모듈(110)은, 등록된 티켓을 발행하고, 티켓에 대응하는 이슈들을 해결하기 위한 개발팀 또는 개발자에게 업무를 전달하는 티켓 브랜치 생성 콜 기능을 수행할 수 있다.
동작 721에서, 형상 관리 모듈(120)은, CICD 모듈(110)의 티켓 브랜치 생성 콜에 응답하여 티켓 브랜치를 생성할 수 있다.
동작 704에서, CICD 모듈(110)은, 배포 등록 요청을 수신할 수 있다. 예를 들어, 티켓 브랜치가 생성되면, 개발팀 또는 개발자들은 티켓에 대응하는 이슈들을 해결하기 위한 작업들을 수행하고, 그 결과물로서 티켓 브랜치에 신규 커밋을 생성할 수 있다. 개발팀 또는 개발자에 의해 생성된 신규 커밋은 CICD 모듈(110)에게 배포 등록 요청으로서 접수될 수 있다.
동작 705에서, CICD 모듈(110)은, 신규 커밋에 대한 배포 등록 요청이 수신되면, 선등록 및 후실행 스케줄의 존재 여부를 판단할 수 있다. 예를 들어, CICD 모듈(110)은, 신규 커밋에 대한 배포 등록 요청이 수신되면, 기존에 이미 릴리즈 브랜치(502)에 통합되어 출시를 기다리고 있는 커밋들(예: 도 7의 321, 322, 323, 324)이 존재하는지 판단한다. CICD 모듈(110)은 기존에 이미 릴리즈 브랜치(502)에 통합되어 출시를 기다리고 있는 커밋들(예: 도 7의 321, 322, 323, 324)이 존재하는 경우 동작 706을 수행하고, 그렇지 않은 경우에는 동작 713을 수행할 수 있다.
동작 706에서, CICD 모듈(110)은, 배포 엉킴 발생 여부를 판단한다. CICD 모듈(110)은 기존에 이미 릴리즈 브랜치(502)에 통합되어 출시를 기다리고 있는 커밋들(예: 도 7의 321, 322, 323, 324)이 존재하는 경우 배포 엉킴 발생한다고 판단할 수 있다. 본 문서에서는, 기존에 이미 릴리즈 브랜치(502)에 통합되어 출시를 기다리고 있는 커밋들(예: 도 7의 321, 322, 323, 324)을 “선행 커밋들”이라고 정의하기로 한다.
CICD 모듈(110)은 배포 엉킴 발생한다고 판단한 경우 동작 707을 수행하고, 그렇지 않은 경우에는 동작 713을 수행할 수 있다.
동작 707에서, CICD 모듈(110)은, 형상 관리 모듈(120)을 제어하여 릴리즈 브랜치(502)에 통합되어 출시를 기다리고 있는 커밋들(예: 도 7의 321, 322, 323, 324), 즉 선행 커밋들을 조회한다.
동작 708에서, CICD 모듈(110)은, 형상 관리 모듈(120)을 제어하여 릴리즈 브랜치(502)에 통합되어 출시를 기다리고 있는 커밋들(예: 도 7의 321, 322, 323, 324), 즉 선행 커밋들을 되돌림(revert)한다. 예를 들어, 도 7을 참조하여 전술한 바와 같이, CICD 모듈(110)은 릴리즈 브랜치(502)에서 커밋#21(321), 커밋#22(322), 커밋#23(323), 및 커밋#24(324) 되돌림하고, 프로덕션 브랜치(501)에서 커밋#12(312), 커밋#13(313), 및 커밋#14(314)를 되돌림한다.
동작 709 및 동작 710에서, CICD 모듈(110)은, 되돌림한 선행 커밋들의 형상들을 식별하기 위한 빌드 ID(identification)를 조회하고, 빌드 ID에 대응하는 빌드 아티팩트를 조회하는 명령을 라이브러리 저장소(140)에 전달한다.
동작 731에서, 라이브러리 저장소(140)는, CICD 모듈(110)로부터 빌드 아티팩트를 조회하는 명령을 수신한 것에 응답하여, 되돌림한 선행 커밋들 각각에 대응하여 저장된 빌드 아티팩트를 조회하고, 조회된 빌드 아티팩트에 관한 정보를 CICD 모듈(110)로 전달한다.
동작 711에서, CICD 모듈(110)은, 조회된 빌드 아티팩트들을 삭제하는 명령을 라이브러리 저장소(140)에 전달한다.
동작 732에서, 라이브러리 저장소(140)는, CICD 모듈(110)로부터 조회된 빌드 아티팩트들을 삭제하는 명령을 수신한 것에 응답하여 조회된 빌드 아티팩트들을 삭제한다.
동작 712에서, CICD 모듈(110)은, 빌드 스케줄을 취소하는 명령을 IaaS용 빌드 배포 모듈(131)에 전달한다.
동작 741에서, IaaS용 빌드 배포 모듈(131)은, CICD 모듈(110)로부터 빌드 스케줄을 취소하는 명령을 수신한 것에 응답하여 빌드 스케줄을 취소한다.
동작 713 및 동작 714에서, CICD 모듈(110)은, 형상 관리 모듈(120)을 제어하여 배포 등록 요청이 수신된 신규 커밋에 대한 병합을 실행할 수 있다.
예를 들어, CICD 모듈(110)은 형상 관리 모듈(120)이 신규 커밋을 개발(Development) 브랜치(미도시)에 병합하여 제1 커밋을 생성하고, 개발 브랜치의 제1 커밋을 프로덕션 브랜치(예: 도 5의 501)에 병합하여 제2 커밋을 생성(722)하도록 제어한다. 또한, CICD 모듈(110)은 형상 관리 모듈(120)이 프로덕션 브랜치(예: 도 5의 501)의 제2 커밋을 릴리즈 브랜치(예: 도 5의 502)에 병합하여 제3 커밋을 생성(723)하도록 한다.
이에 따라, CICD 모듈(110)은 제3 커밋이 기존에 이미 릴리즈 브랜치(502)에 통합되어 출시를 기다리고 있던 커밋들(예: 도 7의 321, 322, 323, 324)보다 먼저 출시되도록 빌드 스케줄이 조정될 수 있다.
동작 715에서, CICD 모듈(110)은, 아티팩트 빌드 명령을 IaaS용 빌드 배포 모듈(131)에 전달한다.
동작 742에서, IaaS용 빌드 배포 모듈(131)은, CICD 모듈(110)로부터 아티팩트 빌드 명령을 수신한 것에 응답하여 아티팩트 빌드를 실행하고, 빌드 배포를 수행할 수 있다.
한편, CICD 모듈(110)은 릴리즈 브랜치(예: 도 5의 502)에서 신규 커밋인 제3 커밋이 배포된 이후에 되돌림하였던 선행 커밋들이 배포되도록 형상 관리 모듈(120)을 제어할 수 있다.
상술한 바와 같이, 본 발명의 다양한 실시 예에 따른 빌드 배포 자동화 시스템으로는, 지속적인 통합 및 배포(CICD)가 가능하게 할 수 있다.
또한, 독립적인 소스로 분기되어 새로운 기능을 추가하거나 수정하는 작업을 서로 다른 팀이나 개발자가 브랜치 작업을 수행하더라도 빌드 배포 일정의 충돌없이 협업을 가능하게 할 수 있다.
본 개시의 다양한 실시예들에서 사용된 용어 "모듈"은 하드웨어, 소프트웨어 또는 펌웨어로 구현된 유닛을 포함할 수 있으며, 예를 들면, 로직, 논리 블록, 부품, 또는 회로와 같은 용어와 상호 호환적으로 사용될 수 있다. 모듈은, 일체로 구성된 부품 또는 하나 또는 그 이상의 기능을 수행하는, 상기 부품의 최소 단위 또는 그 일부가 될 수 있다.
상기에서는 본 발명을 특정의 바람직한 일 실시예에 관련하여 도시하고 설명하였지만, 이하의 특허청구범위에 의해 마련되는 본 발명의 기술적 특징이나 분야를 이탈하지 않는 한도 내에서 본 발명이 다양하게 개조 및 변화될 수 있다는 것은 당업계에서 통상의 지식을 가진 자에게 명백한 것이다.
100: 빌드 배포 자동화 시스템
110: CICD 모듈
120: 형상 관리 모듈
131: IaaS용 빌드 배포 모듈
132: CaaS용 빌드 배포 모듈
140: 라이브러리 저장소
150: 컨테이너 이미지 저장소

Claims (5)

  1. 빌드 배포 자동화 시스템에 있어서,
    소프트웨어의 형상으로서 소스 코드, 상기 소스 코드의 관리 체계, 및 소스 코드로부터 목적 파일을 생산하기 위한 정보들을 관리하는 형상 관리 모듈;
    상기 형상 관리 모듈로부터 상기 형상을 내려받고, 빌드 및 테스트를 수행하는 빌드 배포 모듈;
    라이브러리, 패키지, 및 바이너리를 포함하는 빌드 아티팩트를 저장하고 관리하는 라이브러리 저장소;
    데이터베이스 관리 시스템; 및
    CICD(Continuous Integration Continuous Delivery) 모듈을 포함하고,
    상기 CICD 모듈은,
    신규 티켓 브랜치에서 신규 커밋에 대한 배포 등록 요청이 수신되면, 상기 형상 관리 모듈에서 관리되는 릴리즈(release) 브랜치에서 사전에 통합되어 출시를 기다리고 있는 선행 커밋들이 존재하는지 판단하고,
    상기 선행 커밋들이 존재하는 경우, 상기 형상 관리 모듈을 제어하여 상기 릴리즈 브랜치에서 상기 선행 커밋들을 되돌림(revert)하도록 하고, 및
    상기 선행 커밋들이 되돌림된 이후에, 상기 신규 커밋이 상기 릴리즈 브랜치에 병합되게 상기 형상 관리 모듈을 제어하도록 설정되고,
    상기 CICD 모듈은, 상기 신규 커밋이 상기 릴리즈 브랜치에 병합되도록 상기 형상 관리 모듈을 제어하는 동작으로서,
    상기 신규 커밋을 개발(Development) 브랜치에 병합하여 제1 커밋을 생성하도록 상기 형상 관리 모듈을 제어하고,
    상기 개발 브랜치의 상기 제1 커밋을 프로덕션(production) 브랜치에 병합하여 제2 커밋을 생성하도록 상기 형상 관리 모듈을 제어하고, 및
    상기 프로덕션 브랜치의 상기 제2 커밋을 상기 릴리즈 브랜치에 병합하여 제3 커밋을 생성하도록 형상 관리 모듈을 제어하고,
    상기 CICD 모듈은, 상기 릴리즈 브랜치의 병합 스케줄에 따라 상기 제3 커밋이 배포된 이후에, 되돌림 되었던 상기 선행 커밋들이 배포되도록 상기 선행 커밋들을 상기 릴리즈 브랜치에 다시 병합하는,
    빌드 배포 자동화 시스템.
  2. 삭제
  3. 제1 항에 있어서,
    상기 CICD 모듈은,
    상기 선행 커밋들에 대응되는 빌드 ID에 기반하여 상기 라이브러리 저장소에서 상기 선행 커밋들에 대응되는 빌드 아티팩트를 조회하고,
    상기 라이브러리 저장소가 상기 선행 커밋들에 대응되는 빌드 아티팩트를 삭제하도록 제어하는,
    빌드 배포 자동화 시스템.
  4. 삭제
  5. 제1 항에 있어서,
    상기 빌드 배포 모듈은 IaaS(Infrastructure as a Service)용 빌드 배포 모듈, 또는 CaaS(container as a Service)용 빌드 배포 모듈인,
    빌드 배포 자동화 시스템.
KR1020240015802A 2024-02-01 2024-02-01 빌드 배포 자동화 시스템 KR102663188B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020240015802A KR102663188B1 (ko) 2024-02-01 2024-02-01 빌드 배포 자동화 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020240015802A KR102663188B1 (ko) 2024-02-01 2024-02-01 빌드 배포 자동화 시스템

Publications (1)

Publication Number Publication Date
KR102663188B1 true KR102663188B1 (ko) 2024-05-03

Family

ID=91077098

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020240015802A KR102663188B1 (ko) 2024-02-01 2024-02-01 빌드 배포 자동화 시스템

Country Status (1)

Country Link
KR (1) KR102663188B1 (ko)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160000761A (ko) * 2014-06-25 2016-01-05 주식회사 포워드벤처스 소스 관리 장치, 시스템 및 방법, 컴퓨터 판독 가능한 기록 매체
US20200264871A1 (en) * 2017-04-27 2020-08-20 Microsoft Technology Licensing, Llc Intelligent automatic merging of source control queue items
KR102235029B1 (ko) 2020-10-05 2021-04-02 주식회사 인재아이엔씨 지속적인 통합 및 배포를 위한 보안 검증 시스템 및 방법
KR102602781B1 (ko) * 2022-11-30 2023-11-16 (주)한국플랫폼서비스기술 딥러닝 프레임워크 응용 서비스 모델의 지속적인 통합 및 배포 시스템 및 그 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160000761A (ko) * 2014-06-25 2016-01-05 주식회사 포워드벤처스 소스 관리 장치, 시스템 및 방법, 컴퓨터 판독 가능한 기록 매체
US20200264871A1 (en) * 2017-04-27 2020-08-20 Microsoft Technology Licensing, Llc Intelligent automatic merging of source control queue items
KR102235029B1 (ko) 2020-10-05 2021-04-02 주식회사 인재아이엔씨 지속적인 통합 및 배포를 위한 보안 검증 시스템 및 방법
KR102602781B1 (ko) * 2022-11-30 2023-11-16 (주)한국플랫폼서비스기술 딥러닝 프레임워크 응용 서비스 모델의 지속적인 통합 및 배포 시스템 및 그 방법

Similar Documents

Publication Publication Date Title
US10296305B2 (en) Method and device for the automated production and provision of at least one software application
US10740093B2 (en) Advanced packaging techniques for improving work flows
KR100702424B1 (ko) 소프트웨어 배포를 위한 통합 관리 시스템 및 방법
US8037453B1 (en) System and method for continuous software configuration, test and build management
US8561023B2 (en) Software change management extension for uniformly handling artifacts with relaxed contraints
CA2723933C (en) Methods and systems for developing, debugging, and executing data integration applications
US10635410B2 (en) System to coordinate source code module changes
US10929124B2 (en) Application release using integration into unified code system
CN112711411A (zh) 一种基于Kubernetes及docker的CI/CD流水线系统
CN111737139A (zh) 一种小程序的预览二维码生成方法及装置
Railić et al. Architecting continuous integration and continuous deployment for microservice architecture
KR102663188B1 (ko) 빌드 배포 자동화 시스템
US11809861B2 (en) Development environment organizer with enhanced state switching and sharing
Nguyen Continuous Integration for Embedded environment
Niccolucci et al. D13. 1–Software Release Procedures and Tools JRA2
KR20240084941A (ko) 컨테이너의 워크플로우를 관리하는 방법 및 시스템
Davis et al. Developing on Salesforce
Jyoti et al. Salesforce Development and Deployment Lifecycle
Harris Package Development
CN117270945A (zh) 代码分支处理方法、装置和计算机设备
Skersys et al. Model-driven development of partial model-to-model transformations in a CASE tool
Machiraju et al. The Modernization of Software Organizations
Pinto DevOps Implementation Roadmap for a Retail IT Company
Karalar Selecting a Deployment Automation Tool for CRM Software in Elisa Oy
Hüttermann Automatic Releasing

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant