Continuous integration: the architecture of open source application

Preview:

Citation preview

Continuous Integration

The Architecture of Open Source

Application

가장 인기 있는 CI 시스템

2

CI는 다음과 같은 일을 합니다

• 우리 조직의 소스를 자동으로 빌드해줘요 : Build Software (1)

• 여러 테스트 도구를 엮어서 함께 자동 테스트 해줘요 : Run tests (2)

• 모든 팀원이 우리 개발 현황을 가시적으로 알 수 있어요 : Report the

results (3)

• (1), (2), (3) script 실행 / 예약되어 작동

• 결과가 파일에 저장(logging) email 전송

3

CI는 다음과 같은 일을 합니다

• Check out & update

– 많은 양 소스 코드를 복사해오고,

– 업데이트합니다

• Abstract build recipes

– OS(Mac OS x, Windows, Unix)에 따라 Configuration/Build/Test 실행 명령어가 다르죠!

– 적절히 추상화(Abstraction)된 build recipe가 필요합니다

• Storing checkout/build/test status

– 업데이트된 파일, 버전, warning, error, code coverage 등 추후 분석을 위해저장합니다

• External resource coordination

– 통합테스트를 하려면 non-local 자원도 빌드를 해야하고 그거기 위해 여러 머신 간 빌드를 조정해야합니다

4

CI는 외부 시스템과 이런 일을 합니다

• Build notification

– Pull (Web, RSS, RPC, etc), push notification(e-mail, Twitter, etc)

• Build information

– 빌드 상세 정보, 빌드 제품을 제공하여 심도있는 분석으로 활용(code

coverage 등)

• Build requests

– 외부에서 빌드 요청 처리

• Remote Control of the CI system

5

CI 기본 기능을 다이어그램으로 표현하면..

6

토론: CI 시스템의 아키텍처 고려사항은 무엇일

까요?

7

Buildbot

8

Buildbot - implemention architecture

9

1. 관리, 제어 용이

2. 중앙 build master가 configuration 하기 때문에 build slave가 master에configuration 되어야만 사용가능.

3. Build slave에 대한 configuration 정보도 build master가 갖고 있기 때문에malicious/accidental misconfiguration에 취약

4. Buildbot의 경우 build product를 중앙 master에게 전달하기 쉽지 않다. 중앙master 서버가 slave에게 데이터를 전송할 수 있는 API를 제공하지 않기 때문.

5. Slave의 상태, system utilization 을 master가 알기 쉽지 않다

6. 4,5은 master/slave model의 문제가 아닌 buildbot의 문제.

10

CDash

11

12

CDash - implemention architecture

13

• CDash: reporting server model

• 중앙 서버가 빌드 정보(build, test failure, code coverage analysis,

memory usage)를 보관

• 모든 build는 remote client가 스스로 자신의 일정에 따라 진행. Build 결과

를 XML 형태로 server에 전달

• 여러 client와 integration이 용이: CMake(Build Configuration system),

CTest(test runner), CPack(packaging system)

• Client-driven process: build client가 빌드를 결정. 결과를 중앙 서버에 전

• 전체적인 리소스 조절이 불가능, 신뢰할 수 없는 client가 존재하는 분산

환경에서 실행되기 어렵다.

• Progress report 없음. 실현하려면 점진적으로 client가 서버에 빌드 상태

를 업데이트하도록 허용해야 함.

14

Jenkins

• Execution on a local system & a coordinator of remote builds

• Hybrid mode: 기본(master-server build), 다양한 remote build 허용

• 전체골격은 central server control

• Robust plugin architecture

• 모든 job은 서버가 통제, “locks” plugin으로 다른 job을 정지

15

Recommended