지속적인 통합 서비스를위한 "클린 슬레이트 시스템"을 보장하는 효과적인 방법


10

프로젝트를위한 CI (Continuous Integration) 서비스를 설정하려고합니다. 해당 CI 서비스는 배포를 포함하여 프로젝트 수명의 모든 측면을 제어해야합니다.

즉, 각 반복마다 CI 에이전트가 깨끗한 시스템 (특히 Ubuntu Server)을 가져 와서 프로젝트를 배치하고 테스트를 실행하기를 원합니다.

생태계가 다소 특이하기 때문에 CI 서비스를 처음부터 직접 작성할 것입니다. 문제는 각 CI 반복에 대해 클린 슬레이트 시스템을 효과적으로 제공하는 방법입니다.

프로젝트 배포는 데비안 패키지 몇 개를 설치하고 여러 nginx 사이트를 구성하며 시스템 전체의 구현 언어 별 패키지 관리자 (LuaRocks)에 일부 패키지를 설치합니다. 그보다 더 방해가되는 것은 없습니다 (믿습니다). 따라서 절대적인 격리와 청결을 보장하는 것보다 깨끗한 슬레이트를 빠른 속도로 (최신 하드웨어에서 1 분 이내에, 더 빠르면 더 좋게) 설정할 수있는 것이 더 중요합니다.

필요한 작업을 수행하는 방법에는 두 가지가 있습니다.

  • 어떤 종류의 감옥을 만들 수도 있습니다 (예 : lxc).
  • 또는 스냅 샷을 생성하고 사용할 수있는 가상 머신을 설치하십시오.

그러나이 시점에서 나는 결정할 정보가 충분하지 않습니다.

무엇을 조언 하시겠습니까? 다른 옵션이 있습니까? 특정 공구 이름이 있습니까?

참고 : CI 서비스는 Citrix XenServer 게스트 내에서 실행됩니다. 가격이 합리적이라면 유료 솔루션도 괜찮습니다. (일반적으로이 분야에서는 합리적이지 않습니다.) 원격 CI 솔루션이 양호하지 않습니다.

답변:


5

Chef / Vagrant를 살펴보십시오 . 그것이 충분히 빠를 지 확실하지 않지만 조사해야 할 것이 있습니다.

Chef에 익숙하지 않은 경우를 위해 서버의 간단한 코드 기반 프로비저닝을 허용하도록 설계된 서버입니다. 웹 캐스트 중 하나를 살펴 보는 것이 좋습니다. 장고 쉐프 웹 캐스트

유랑, 비제, 요리사 솔로 및 나이프 솔로 물건 나는 이것이 당신이하고 싶은 대부분의 것을 덮고 있다고 생각합니다.

Vagrant Blog post Vagrant를 사용한 서버의 빠른 설정을 보여주는 블로그 게시물입니다.


감사합니다. 답변에 더 자세한 정보를 제공 하시겠습니까?
Alexander Gladysh

나는 이것을 직접 사용하지 않았으므로 내가 할 수있는 일은 내가 도울 것으로 생각되는 몇 가지 링크를 게시하는 것입니다.
Philip Tinney 2012 년

13

한 번 봐 가지고 젠킨스 . VMWare 또는 VirtualBox 또는 Amazon / a Eucalyptus 클라우드의 가상 머신에서 빌드를 실행할 수있는 플러그인이 있습니다 . 클라우드에서 실행되는 가상 머신의 경우 패키지 설치와 같은 단계를 수행 할 수있는 init 스크립트를 지정할 수 있습니다.


고맙지 만 Jenkins는 CI 서버이며 직접 빌드하는 방법에 대해 알고 싶습니다.
Alexander Gladysh

2
@AlexanderGladysh 왜 바퀴를 재발 명하고 싶습니까? Jenkins 빌드는 make 파일에서 일반 쉘 스크립트까지 모든 것을 실행할 수 있으며 강력한 인터페이스, 훌륭한 지원 및 많은 플러그인을 갖추고 있습니다. 빌드가 매우 복잡하더라도 젠킨스가 실행할 수있는 쉘 스크립트 여야합니다.
TheLQ

Jenkins를 사용하고 싶지 않더라도 클라우드 기반의 무언가가 당신을위한 길이라고 생각합니다. 머신 이미지를 사용자 지정하여 원하는 소프트웨어를 제공하고 인스턴스 시작시 테스트 할 구성 및 코드 만 추가하여 시작 시간을 단축 할 수 있습니다.
Lars Kotthoff

어쨌든 Jenkins 또는 Jenkins 없음, 클린 슬레이트 OS 스냅 샷을 신속하게 얻기 위해 무엇을 사용해야합니까? (타사 구름을 언급 중지하십시오 - 이것은 우리 자신의 서버에서 실행해야합니다.)
알렉산더 Gladysh에게

자신의 서버에서 유칼립투스 / OpenStack / ... 클라우드를 실행하십니까?
Lars Kotthoff

2

VM 인프라를 사용하고 기본 템플릿을 만들거나 @LarsKotthoff가 제안한대로 클라우드를 사용합니다. 빠르게 회전시킬 수 있으며 시작 위치를 확실하게 확인할 수 있습니다.

그러나 궁극적으로 진행중인 작업을 조정하려면 머신 외부에 무언가가 필요합니다 (머신을 설정하고 머신에서 원하는 프로세스를 시작하십시오). 나중에 검사를 위해 스크립트 출력을 캡처하는 기능에 대해 Jenkins를 살펴 보겠습니다.

Jenkins는 CI 서버로 시작했지만 지금까지 함께 작업 한 많은 조직에서이 서버를 그 이상으로 사용하고 있지만 실제로는 수동으로 또는 일정에 따라 결과를 포착하고 결과를 캡처하고 예상 한 결과를 검증하는 도구입니다. 매우 유연합니다.


감사합니다.하지만 외부가 아닌 Xen VM 인스턴스 내부에 설정하고 싶습니다. 특정 상황에서 훨씬 쉽게 구성 할 수 있습니다. Jenkins를 살펴볼 것이지만 여전히 더 좁은 솔루션을 찾고 있습니다.
Alexander Gladysh

또한 "VM 인프라 사용 및 기본 템플릿 작성"에 대해 자세히 설명하십시오.
Alexander Gladysh

2

프로젝트를위한 CI (Continuous Integration) 서비스를 설정하려고합니다. 해당 CI 서비스는 배포를 포함하여 프로젝트 수명의 모든 측면을 제어해야합니다.

Jenkins는 꽤 많이 언급되었습니다. 스크립트를 처음부터 다룰 수 있지만 Jenkins는 오버 헤드를 줄이면서 동일한 유연성을 모두 제공합니다.

즉, 각 반복마다 CI 에이전트가 깨끗한 시스템 (특히 Ubuntu Server)을 가져 와서 프로젝트를 배치하고 테스트를 실행하기를 원합니다.

프로젝트 배포는 데비안 패키지 몇 개를 설치하고 여러 nginx 사이트를 구성하며 시스템 전체의 구현 언어 별 패키지 관리자 (LuaRocks)에 일부 패키지를 설치합니다. 그보다 더 방해가되는 것은 없습니다 (믿습니다). 따라서 절대적인 격리와 청결을 보장하는 것보다 깨끗한 슬레이트를 빠른 속도로 (최신 하드웨어에서 1 분 이내에, 더 빠르면 더 좋게) 설정할 수있는 것이 더 중요합니다.

가상 머신 이미지가 유용한 곳입니다. 깨끗한 이미지를 설정하고 모든 머신에서 포크를 시작하도록 할 수 있습니다. 원본 이미지는 수정되지 않지만 테스트에서 차이를 알 수 없습니다. 1 분 안에 부트 스트랩 이미지를 얻을 수 있어야합니다.

가격이 합리적이라면 유료 솔루션도 괜찮습니다. (일반적으로이 분야에서는 합리적이지 않습니다.) 원격 CI 솔루션이 양호하지 않습니다.

한 번에 여러 대의 컴퓨터를 실행하려면 Nimbula를 확인하십시오 (나는 뻔뻔 스럽습니다. 나는 그들을 위해 일합니다). 소규모 배포의 경우 무료이며 테스트를 위해 또는 기타 다른 용도로 개인 클라우드를 통합 할 수 있습니다. Jenkins와 오케스트레이션 파일간에 호스트 서버, 테스트 클라이언트 및 기타 모든 항목을 스핀 업하여 상호 작용없이 전체 테스트 코드 영역을 자동으로 실행할 수 있습니다.


어. 어쩌면 나는 오늘 느리지 만 Nimbula 사이트를 파헤 치려고했지만 마케팅의 이유가 무엇인지 알 수 없습니다. 필요한 작업을 수행하는 방법을 설명하는 제정신 텍스트를 가리켜 주시겠습니까? (즉, 게스트 컴퓨터 템플릿을 설정하고, 스크립트, 인스턴스화에서 각 CI 세션을 죽인다.)
알렉산더 Gladysh

@AlexanderGladysh 많은 머신을 사용하여 많은 CI 작업으로 빌드하는 것이 편리합니다. 최소한 3 대의 시스템으로 구성된 클러스터를 보증하기에 충분한 워크로드가없는 경우에는 쓸모가 없습니다.
Jeff Ferland
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.