(이 질문의 어리 석음에 대해 미리 사과드립니다. 저는 일반적으로 시스템 관리자가 아닌 프로그래머이지만 일부 작업을 자동화하고 자동화되었지만 가장 예쁜 방식이 아닌 다른 작업을 정리하는 일을 맡았습니다. . :-)
저는 cfengine, Puppet 및 Chef와 같은 여러 서버에 대한 소프트웨어 배포를 자동화하기 위한 다양한 도구를 둘러보았습니다. 지금까지는 Puppet이 가장 매력적으로 보였지만 아직까지는 어떤 것도 약속하지 않았습니다.
이러한 도구는 모두 여러 서버를 최신 상태로 유지하는 데 훌륭한 역할을 할 수 있는 것처럼 보입니다.미리 포장된소프트웨어.
내가 이해하지 못하는 것은: Puppet과 같은 도구를 사용하여 자체 내부 소프트웨어 배포를 관리하는 방법은 무엇입니까? 나는 Apache를 유지하는 방법을 보여주는 수천 개의 튜토리얼을 보았기 때문에 당황한 것 같습니다 ensure => latest
.~이다꽤 멋지네요), 하지만 오늘날 내 사용 사례와 완전히 일치하는 것은 없습니다. 이는 다음과 같습니다.
- 인간이 버튼을 누르면,
- 버전 제어 저장소 B에서 분기 A를 가져옵니다.
- C 명령을 실행하여 컴파일하십시오.
- 바이너리 D를 서버 E1부터 E10까지 복사합니다.
- 각 서버에서 F 명령을 실행하여 모든 변경 사항을 적용합니다.
Puppet은 훌륭하게 들리며 일부 쉘 스크립트에 비해 선언적, 멱등성 구성의 이점을 완전히 알고 있지만 "쉘 스크립트를 Puppet(또는 Chef 또는 cfengine)으로 업데이트하고 싶으므로 다음과 같은 방법을 따르십시오"에 대한 튜토리얼을 본 적이 없습니다. 해야 할 것". 그런 게 있나요? Puppet 문서에 제공된 내용을 사용하여 내가 원하는 동작을 복제하는 방법이 다른 사람들에게 분명합니까? 나만 이해가 안되는 걸까?
지금까지 나에게 들리는 것은 인간(#1)이 Puppet 외부의 소프트웨어(#2 및 #3)를 수동으로 패키징하고 Puppet 구성을 수동으로 업데이트하여 Puppet이 서버를 업데이트하도록 트리거한다는 것입니다. .. 아마도? (당신이 알 수 있듯이 나는 여기서 약간 혼란스러워합니다.)
감사해요!
답변1
우리는 꼭두각시를 사용하지만 애플리케이션 배포에는 사용하지 않습니다. 말씀하신 대로 소프트웨어를 debs 또는 rpm으로 패키징하고, 개인 저장소를 모든 곳에 구성하고, 꼭두각시를 사용하여 버전을 제어할 수 있지만 여전히 모든 서버에서 다음 30분 새로 고침을 기다려야 합니다.
내가 할 일(그리고 이것은 우리가 하는 일과 비슷하지만 우리는 레일을 사용하므로 컴파일 단계가 없습니다):
- Puppet을 사용하여 애플리케이션 자체를 제외한 서버의 모든 것을 구성하십시오. 종속성, 웹 서버, 사용자, 경로 등
- 자동화된 빌드 서버(bamboo, hudson, Cruise Control 등)가 컴파일된 아티팩트를 Nexus와 같은 저장소 관리자에 넣도록 하세요.
- capistrano를 사용하여 서버에 빌드를 푸시하세요.
Chef에는 더 많은 실시간 푸시 기능이 있을 수 있습니다. 나는 그것에 대해별로 익숙하지 않습니다.
답변2
1~3단계는 일반적으로 빌드 프로세스에서 자동화됩니다. 일반적으로 이 프로세스의 출력은 테스트 주기를 거칩니다. 통합 테스트 환경에 배포할 수 있도록 출력을 패키징합니다. 통합 테스트를 통과한 경우에만 4단계와 5단계가 발생합니다.
5단계에서는 배포 중단을 의미합니다. Apache와 같은 경우 로그 회전 중에 종료하고 다시 시작하여 이를 처리할 수 있습니다. crontab 스크립트가 이를 처리할 수 있습니다. 한 시간 동안 롤링 변경 사항을 처리할 수 있거나 배포 단계 4에 다시 시작을 포함하는 경우 Puppet 또는 cfengine이 4단계에 적합한 도구입니다. 이는 통합 테스트가 통과되면 저장소를 업데이트하여 트리거될 수 있습니다.
답변3
꼭두각시 레시피를 검색하면 제작 준비가 완료된 수많은 스크립트를 찾을 수 있습니다. 예, 소프트웨어를 수동으로 패키지해야 합니다. 자신의 개인 저장소를 유지 관리하는 경우 verify=>latest 플래그를 사용할 수 있습니다. 그런 다음 Puppet에게 소프트웨어를 설치하도록 지시하는 레시피를 작성하세요. 레시피는 슬레이브에 전파될 마스터 서버에 배치되어야 합니다.