이번 포스팅에서는 Serverspec이라는 도구를 앤서블에 적용하는 방법에 대해서 알아보도록 한다.
Serverspec은 인프라(서버) 테스트 수행을 간단하고 쉽게 하기 위한 도구이다.
Serverspec은 로컬, SSH, WinRM, Docker API 등을 통해 명령을 실행하여 서버의 실제 상태를 테스트한다.
1. Serverspec을 사용하는 이유
일반적인 소프트웨어 테스트는 절차서 및 파라미터 시트를 기반으로 별도의 테스트 케이스와 테스트 절차서를 마련해야하고, 이에 기반하여 하나하나 테스트를 하고 있는 경우가 대부분이었다. 이러한 테스트 절차에 대한 작업도 코드화를 할 수 있다.
코드화를 하게되면 다음과 같은 장점이 있다.
- 테스트 코드가 그대로 테스트 케이스가 됨
- 테스트 코드를 반복적으로 활용 가능함
- 코드를 통하여 리뷰(Review) 할 수 있음
특히 인프라 테스트의 경우 더욱 진행하기 힘들다. 디렉터리 퍼미션(Directory Permission)이나 모든 설치 대상 패키지 조사 및 서비스 구동 상태 등을 하나하나 점검해야 하기 때문에 방대한 절차와 시간이 소요된다.
Serverspec은 위의 테스트 절차를 코드화 했을 경우 얻을 수 있는 장점 외에도 다음과 같은 특징이 있다.
- 테스트 항목에 대한 목록을 정해진 포맷으르 기반으로 작성 가능함
- 테스트 결과를 리포트 형식으로 출력할 수 있음
2. Serverspec 사용법 기초
2.1. Playbook 파일에서 -serverspec의 주석을 제거
앤서블을 이용하여 Serverspec을 셋업한다.
$ vi /home/vagrant/ansible-playbook-sample/site.yml
---
- hosts: webservers
become: yes
connection: local
roles:
- common
- nginx
- serverspec
# - serverspec_sample
# - jenkins
2.2. ansible-playbook 실행
$ ansible-playbook -i development site.yml
ansible-playbook을 이용하면 다음과 같은 에러가 발생한다.
"ERROR: Error installing rake:\n\trake requires Ruby version >= 2.2."
이는 ansible-playbook을 이용하여 설치한 ruby의 버전 문제 때문에 발생하는 문제이다.
(에러에 대한 트러블 슈팅 시간이 많이 걸렸는데, 결과적으로 2.3단계의 해결책을 이용하여 해결하였다.)
이를 해결하기 위해서 ruby 2.7 버전을 설치한다.
2.3. Ruby 2.7 버전 설치
Ruby 2.7 버전 설치 후 ansible-playbook 명령어를 재실행한다.
# GPG 설치
$ command curl -sSL https://rvm.io/mpapis.asc | sudo gpg2 --import -
$ command curl -sSL https://rvm.io/pkuczynski.asc | sudo gpg2 --import -
# RVM 설치
$ curl -L get.rvm.io | sudo bash -s stable
$ sudo usermod -aG rvm $USER
$ id $USER
$ source /etc/profile.d/rvm.sh
$ rvm reload
$ sudo su
$ rvm requirements run
# Ruby 설치
$ rvm install 2.7
$ rvm use 2.7 --default
$ sudo mv /bin/ruby /bin/ruby_2.0.0
$ sudo ln -s /usr/local/rvm/rubies/ruby-2.7.0/bin/ruby /bin/ruby
2.4. ansible-playbook 재실행
$ ansible-playbook -i development site.yml
2.5. serverspec 설정
serverspec-init 명령어를 이용하여 serverspce 설정을 진행한다.
먼저 셋업용 디렉터리를 생성한다.
$ mkdir ~/serverspec && cd ~/serverspec
다음으로 serverspec-init 명령어를 실행한 후 1, 2 옵션을 차례로 선택한다.
$ serverspec-init
실행하고 나면 실행파일이 자동으로 생성된다.
2.6. 생성된 샘플 파일 확인
spec/localhost/sample_spec.rb에 생성된 생성된 샘플 파일을 열어보면 다음과 같다.
테스트 코드를 살펴보면 아래의 순서대로 서버의 환경을 체크한다.
- httpd의 설치 여부 확인
- httpd 서비스의 활성화 상태인지 확인
- httpd 서비스가 실행 중인지 확인
- 80 포트가 listening상태인지 확인
테스트 코드가 이해하기 쉽게 직관적으로 되어있다.
2.7. Serverspec을 통한 테스트 실행
이제 spec 폴더가 존재하는 디렉터리로 돌아와서 rake 명령어를 이용하여 테스트 코드를 실행한다.
# spec 디렉토리로 이동
$ cd /home/vagrant/serverspec/spec
# rake 실행
$ rake spec
실행결과를 보면 2.6에서 언급한 테스트들 중 1가지만 통과한 것을 확인할 수 있다.
- httpd의 설치 여부 확인 (실패)
- httpd 서비스의 활성화 상태인지 확인 (실패)
- httpd 서비스가 실행 중인지 확인 (실패)
- 80 포트가 listening상태인지 확인 (성공)
참고자료
[1] IT 운용 체제 변화를 위한 데브옵스 | 2019 | 키와무라 세이고 ... | 링크
'클라우드 컴퓨팅 & NoSQL > Ansible' 카테고리의 다른 글
[앤서블(Ansible)] ansible-playbook dry-run 모드 (0) | 2021.04.15 |
---|---|
[앤서블(Ansible)] ansible-playbook 사용법 (0) | 2021.04.13 |
[앤서블(Ansible)] Ansible의 기본적인 사용법 (nginx) (0) | 2021.04.13 |