“자동 빌드”란 무엇입니까?


15

프로젝트에 Continuous Integration을 추가하려고합니다.

Wikipedia 에 따르면 CI의 주요 부분은 자동화 된 빌드입니다. 그러나 CI 및 빌드 자동화 기사가 동의하지 않는 것처럼 정확히 무엇을 의미하는지 혼란 스럽습니다 .

구체적인 혼란 지점 : "자동 빌드"는 다음 과 같은 맥락에서 무엇을 의미합니까?

  • Python 또는 Perl과 같은 해석 언어를 사용하는 프로젝트?
  • 최종 사용자 컴퓨터의 소스에서 빌드합니까?
  • 사용자 머신에 로컬 인 RDBMS의 데이터베이스와 같이 단순히 사전 컴파일 및 분배 할 수없는 종속성이있는 애플리케이션?

2
난 둘 태그했습니다 buildsbuild내가 아는하지 않았기 때문에 어느 하나를 사용할 수 있습니다.

답변:


14

일부 기술의 경우 컴파일 단계가 필요하지 않습니다. 그러나 "빌드 자동화"라는 용어를 해석 할 때 더 넓은 시야를 확보하는 것이 좋습니다. "빌드"는 다음 두 가지 주요 구성 요소를 포함하는 것으로 생각하십시오.

  • 최종 사용자에게 배포 된 변환 소스 아티팩트 (코드, 데이터베이스 스키마, 문서 등)를위한 프로세스입니다.
  • 상기 변형 동안 품질 보증 수단의 적용

자동화는 단순히 모든 작업을 자동으로 수행하는 것, 즉 수동 개입이 필요하지 않음을 의미합니다. 여기에는 기술에 따라 매우 다양한 단계가 포함될 수 있습니다.

변환 단계 :

  • 편집
  • 연결
  • 포장
  • 전개
  • 데이터 이동
  • 지원
  • 공고

품질 보증 단계 :

  • 컴파일러 경고 / 오류
  • 단위 테스트
  • 통합 테스트
  • 시스템 테스트
  • 배포 인증

요즘 좋은 CI 도구를 사용하면 이러한 모든 문제를 해결할 수 있습니다. 처음에는 대부분의 상점이 코드 컴파일 자동화에 관심이 있는데, 이는 기존 소프트웨어 개발에서 가장 눈에 잘 띄는 문제의 원인이기 때문입니다.


21

자동화 된 빌드는 다음 기본 사항을 다루는 프로세스에 대한 설명입니다.

  1. 소스 컨트롤에서 최신 코드를 가져옵니다
  2. 최신 코드를 실행 파일로 컴파일
  3. 컴파일 된 코드에 대한 테스트 (단위 테스트, 시스템 테스트, 통합 테스트) 실행
  4. 완성 된 실행 파일을 배포 할 알려진 위치에 배포합니다.
  5. 빌드 결과를 공개하십시오.
    5.1 성공적인 컴파일, 유닛 테스트 성공

수동 개입없이 실행해야하는 수동 프로세스입니다.


3
명시 적으로 요청되었으므로 적용되지 않는 단계는 선택 사항이라고 언급 할 수 있습니다. 예를 들어 앱이 많은 파이썬 스크립트 인 경우 2 단계는 아무 것도 아니거나 코드를 단일 파일로 압축하는 것만 큼 간단한 것일 수 있습니다. 컴파일 단계를 거치지 않는 것이 좋습니다.
Bryan Oakley

@BryanOakley 공정하다. 스크립트를 컴파일하지 않는 것과 동등한 것은 모든 종속성이있는 경우이 시점에서 올바르게 수집되도록 보장 할 수 있습니다. 예를 들어, Python 스크립트에 필요한 추가 타사 라이브러리가 포함되어 다음 단계에 모두 포함되도록해야합니다. 대상과 빌드 머신에 항상 필요한 모든 라이브러리가있는 것으로 알려진 경우에도 필요하지 않습니다.
쉘던 Warkentin

2

내 생각에 자동 빌드는

  • 일정에 따라 또는 소스 제어에 대한 각 커밋과 함께 자동으로 발생
  • 모든 서버에 간단하게 배포 할 수있는 인공물 세트를 만듭니다.

목표는 프로덕션에 배포 할 때 문제가 발생하지 않을 정도의 확실성을 갖도록 반복하여 읽을 수있는 배포 프로세스를 갖도록하는 것입니다. 빌드 및 배포 프로세스에서 사람과의 상호 작용이 적을수록 릴리스가 더 안전합니다.

컴파일되지 않은 언어가있는 경우 사이트를 빌드하고 압축하여 단일 아티팩트를 작성할 수 있습니다.

좋은 CI 도구를 사용하면 단위 테스트 실행을 포함하여 많은 작업을 빌드 프로세스에 스크립팅 할 수 있습니다. 또한 성공적이고 실패한 빌드, 테스트 범위 등의 기록을 유지합니다. 그러나 그 중 어느 것도 자동 빌드로 정의하지 않습니다. (즉, 좋은 자동화 된 빌드 프로세스에는 이러한 것들이 있지만, 가난한 자동화 된 프로세스에는 "자동화 된 빌드"라고 불리지 않습니다.)

통합 / 회귀 테스트는 빌드 프로세스가 아닌 배포 프로세스의 일부로 실행하는 것이 좋습니다 (편리한 환경이있는 경우 모든 빌드마다 배포 할 수 있음).


예약 된 빌드를 보유하고 개발자가 한 번의 작업으로 자동화 된 빌드를 시작할 수 있도록하는 것이 유용 할 수도 있습니다 (두 작업 인 경우 실제로 자동화되지 않습니까?). 일부 시스템의 빌드도 각 커밋을 시작하기를 원하므로 일정과 요청에 따라 진행됩니다.
David Thornley

@DavidThornley : 그렇습니다. 유용합니다. 대부분의 CI 도구를 사용하면 설정된 일정 이외의 빌드를 시작할 수 있습니다. 그러나이 옵션이 없기 때문에 자동화 빌드가 중단되지 않습니다. 개발자가 항상 트리거 해야하는 경우 자동화 빌드가 중단됩니다.
pdr

1
a project using an interpreted language, such as Python or Perl?

통역 된 언어의 경우 상황이 발생하거나 누락 될 수 있습니다. 상호 침투 된 일부 언어에는 컴파일러가 있지만 더 자주 사용하지 않는 것보다 많을 수 있습니다. 이 경우 일반적으로 컴파일 대신 구문 및 구문 분석 오류가 있는지 코드를 스캔하거나 코드에서 테스트를 실행하는 것으로 건너 뜁니다.

최종 사용자 컴퓨터의 소스에서 빌드합니까?

나에게 이것은 최종 사용자가 최신 버전의 프로그램을 가져 와서 컴파일하고 필요에 따라 구성 및 배포 할 수있는 단일 명령을 제공 할 수 있음을 의미합니다.

사용자 머신에 로컬 인 RDBMS의 데이터베이스와 같이 단순히 사전 컴파일 및 분배 할 수없는 종속성이있는 애플리케이션?

스크립트가 올 바르고 프로그램이 올바르게 테스트하는지 확인하기 위해 데이터베이스를 자동으로 제거하고 재구성 할 수 있으므로 이러한 기능은 지속적인 통합의 테스트 부분에 해당합니다.


1

귀하의 질문에서 논의하고있는 것은 실제로 3 가지 다른 개념입니다.

핵심의 지속적인 통합 은 작은 변화를 겪고 있으며 이러한 변화를 "전세계 진실"과 자주 동기화하는 것입니다. 개발자는 체크 아웃을하고 일주일 동안 유지하는 대신 하루 안에 완료 할 수있는 작업을 수행하여 코드가 주 저장소와 너무 멀어지지 않도록해야합니다.

팀의 고통을 유발하지 않고이를 달성하기 위해 (즉, 기존 기능을 구축하거나 손상시키지 않는 소스를 체크인). 개발자는 자신의 코드가 "빌드를 깨뜨리지"않았는지 확인해야합니다. 수동으로 수행하면 개발 프로세스에 추가 오버 헤드가 발생합니다 (한 줄의 코드를 변경하면 응용 프로그램에 예기치 않은 방식으로 영향을 줄 수있는 빌드에 시간이 오래 걸리거나 많은 상호 종속성이있는 프로젝트를 생각하십시오).

이 상황을 완화하기 위해 다른 기술을 사용하여이 오버 헤드를 제거합니다.

자동화 된 빌드 를 사용 하여 소스를 체크 아웃하고 선택적으로 자동화 된 테스트 를 실행하여 애플리케이션이 정상적으로 작동하는지 확인합니다 (이 단계는 테스트 스위트만큼 유용합니다).

추가 단계 연속 전달 은 데이터베이스 및 기타 문제와 관련된 문제를 해결합니다. 여기서는 데이터베이스 및 환경의 다른 요소에 대해 일정 수준의 버전 관리를 제공하여 가능한 한 프로덕션 환경 에 가까운 환경에서 응용 프로그램이 작동하는지 가능한 한 빨리 확인할 수 있도록 합니다 .


1
좋은 점 ... 대부분의 사람들이 스레드의 맨 아래를 읽고 투표하지 않는 것이 너무 나쁩니다.
hotshot309

0

"자동 빌드"는 하나의 (스케줄 가능) 조치 (일반적으로 쉘 스크립트 또는 배치 파일)를 사용하여 소스 제어에서 선적 가능한 패키지로 이동할 수 있음을 의미합니다.

이 맥락에서 빌드를 정확히 구성하는 것은 정확히 배송 대상, 제공 방법 및 개발 스택의 다양한 부분에 필요한 단계에 달려 있지만, 어떤 경우 든 소스 제어에 포함되어 있으면 배송 가능한 제품 (또는 오류 메시지 및 화난 프로젝트 관리자)이 생깁니다.

간단한 Python 프로젝트의 경우 자동화 된 빌드는 소스를 확인하고 관련 파일을 올바른 디렉토리에 복사하는 두 단계만으로 구성 될 수 있습니다. 보다 복잡한 프로젝트의 경우 다음과 같은 것들이 포함될 수 있습니다.

  • 컴파일, 링크
  • 자동 테스트 실행
  • 설치 프로그램 패키지 작성
  • 설치
  • 데이터베이스 수정
  • 백업 생성 (롤백이 필요한 경우)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.