코드로서의 인프라는 빌드를 자동화하는 도구를 사용하도록합니다. 큰. ansible , chef , puppet , salt stack 등과 같은 도구를 사용하면 인프라의 모양을 작성하는 동시에 차이점을 해결할 수 있습니다.
솔트 스택에서 이러한 비트를 상태 라고 합니다 . 상태가 현실과 일치하지 않으면 도구가이를 해결합니다. 즉, 우리는 인프라에 대한 테스트를 작성하고 있으며 테스트에 실패하면 도구가 자체적으로 수정합니다. 적어도 그것이 아이디어입니다.
XP는 우리에게 TDD를 사용하도록 지시하고 그것이 인프라에 적용 가능한지에 대한 질문입니까? 툴링은 그것이 제안합니다.
매우 유용 할 수있는 몇 가지 유형의 테스트를 상상할 수 있습니다.
배포 된 서비스와 함께 제공되는 연기 테스트를 작성하여 배포 된 서비스가 예상대로 작동하고 실행되도록합니다. 이것은 방금 배포 한 것이 작동하는지 확인하기위한 API 호출 또는 systemctl 검사입니다. ansible과 같은 도구에는 서비스가 실행되고 있는지 확인하는 상태가 있으므로이 기능 중 많은 부분을 동일한 상태로 처리 할 수 있습니다.
Docker 또는 다른 임시 가상화 엔진에 대해 개별 역할을 수행 할 수있는 프로젝트 Molecule 이 있습니다 (상태를 호출 할 수 있음). 이로 인해 역할이 분리되고 작업하면서 플레이 북과 분리하여 역할을 실행할 수 있습니다. 테스트는 대부분 역할이 작동해야하는 변수를 조롱 할 수있게합니다. 다른 예제는 ansible 엔진의 중복처럼 보입니다 (파일이 사용자에게 속한다고 가정하십시오 ...).
ThoughtWorks 기술 레이더는 현재 inspec , serverspec 또는 goss 와 같은 도구 를 사용하여 서버가 사양을 충족하는지 확인합니다. 그러나 우리는 사양을 작성하고 있습니까?
우리가 인프라를 상태 / 역할로 설명한다면 인프라 스트럭처의 추가 테스트에 요점이 있습니까? 한 팀이 사양을 제공하고 다른 팀이 다음과 같은 대규모 조직에서 이것이 더 필요하다고 생각할 수도 있습니다. 동일한 질문에 대한 역할 / 상태가있을 수있는 경우 왜 시험을 작성해야하는지 확인하기 위해 고심하고 있습니다.
goss
. 예를 들어, RPM이 설치 (사용 가능) 된 다음 예상되는 기본 파일이 배치되었거나 서비스가 실행 중이고 특정 포트를 수신 중인지 테스트됩니다. 이러한 문제를 자동으로 수정하고 싶지 않지만 알림을 받고 진행 상황을 중지합니다. 물론 Ansible은 시스템을 테스트 할 수 있습니다. 시스템에 대해 명시 적으로 설명해야하지만goss
컨테이너의 서비스 동작을 테스트하는 데 사용 합니다