Vagrant 공유 폴더 문제(mount.vboxsf 관련) - vagrant-vbguest 플러그인

DevOps|2017. 5. 29. 19:43

Vagrant를 이용해 apache brooklyn을 학습하던 중에 갑자기 brooklyn 서버가 동작을 안하는 문제가 생겼습니다. 최초로 VM을 생성했을 때는 마운트에 문제가 없었는데 재부팅을 하면 문제가 생깁니다.

이런저런 방법으로 추적해 봤더니 결국 Vagrant 혹은 VirtualBox에서 발생한 오류 때문이더군요.

brooklyn 서버의 /vagrant로 마운트되는 VirtualBox 공유 폴더가 마운트 안되는 문제인데, 아래와 같은 오류 메시지가 출력됩니다.

==> brooklyn: Mounting shared folders...
    brooklyn: /vagrant => G:/workspace/apache-brooklyn-0.11.0-vagrant
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

The error output from the command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

구글링을 해보니, VirtualBox Guest Additions 설치에 문제가 있어서 그런 것 같습니다. 여러 가지 시도를 해봤는데 결국 vagrant-vbguest 플러그인을 설치해서 해결했습니다.

vagrant-vbguest 플러그인은 guest machine과 VirtualBox host의 Guest Additions 버전이 다를 경우에 알맞은 버전을 설치해 주는 플러그인입니다.


   vagrant-vbguest 플러그인 설치

아래의 명령으로 설치합니다.

$ vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Installed the plugin 'vagrant-vbguest (0.14.2)'!

이미 생성한 box에 적용하려면 아래의 명령으로 수동으로 설치할 수 있습니다.

$ vagrant vbguest

Guest Additions가 설치된 후 vagrant reload 명령으로 vagrant machine 재시작하니까 공유 폴더가 제대로 마운트되는 것을 실행 로그에서 확인할 수 있었습니다.

지금까지 Vagrant를 사용하면서 Guest Additions 설치에 대해서 고민한 적이 없었는데, 관련 문제를 vagrant-vbguest를 통해 해결하면서 수행 로그를 보니, 꽤 수고스러운 작업을 대신 해 주는 고마운 플러그인이네요. 어쩌면 필수 플러그인이 아닐까 싶습니다.


EOF


댓글()

외부 Jenkins와 내부 네트워크 상의 GUITAR 테스트 환경 연동 2

DevOps|2017. 5. 26. 18:39

테스트 수행 VM을 Jenkins의 Slave Node로 등록

VM2를 Jenkins의 Slave Node로 추가합니다. 방법에 대해서는 아래 글을 참고하세요.

젠키스(Jenkins)에 노드(node) 추가하기

  Jenkins 대시보드에 테스트 리포트 주소 링크

Jenkins 메인 화면의 상세 내용 입력을 클릭한 후 이전 글에서 확인한 VM2의 GUITAR 리포트 주소 (http://<랩탑의 내부 아이피>:8080/report.htm)의 링크를 입력합니다.
이 링크를 통해서 Jenkins 사용자들이 테스트 리포트를 볼 수 있습니다.

만약 HTML 코드가 그대로 노출된다면 아래 글을 참고해서 진행하세요.

젠킨스(Jenkins)의 상세 내용 입력 방식을 HTML로 변경

  Jenkins에 GUITAR 테스트 프로젝트 추가

Jenkins의 새로운 Item 메뉴를 클릭하여 새로운 프로젝트를 생성합니다.

Item name에는 GUITAR_TEST를 입력하고 Freestyle project를 클릭하여 선택하고 저장합니다.


General → Restrict where this project can be run 항목을 체크하고 Label Expression에 위에서 생성한 Slave Node 이름을 입력합니다. 저의 Slave Node 이름은 GUITAR_TEST_NODE입니다.

Build → Add build step → Execute Windows batch command를 선택하고, Command 항목에는 아래의 명령을 입력합니다. 샘플 테스트 스크립트인 네이버 검색을 수행하는 명령입니다. <작업 폴더>/TESTCASE 폴더는 본인의 환경에 맞게 수정하세요.

cmd /c C:\GUITAR\BIN\guitar.exe E:\TESTCASE\SAMPLE\01_네이버검색\01_네이버검색.txt /TESTID:%BUILD_ID% /XMLPATH:%WORKSPACE% /REMOTE

빌드 후 조치 → 빌드 후 조치 추가 → Publish JUnit test result report를 선택하고, Test report XMLs 항목은 비워 두거나 report.xml을 입력합니다.

저장 버튼을 클릭하여 설정을 저장합니다.

  Jenkins에서 테스트 수행

GUITAR_TEST 프로젝트 화면에서 Build Now 버튼을 클릭하여 테스트를 수행합니다. VM2에서 Slave Node가 실행 중이고 이 Node에서 배치 명령이 실행되도록 프로젝트가 구성되었기 때문에, VM2에서 GUITAR 테스트가 수행됩니다.

수행결과는 테스트 서버와 공유한 VM2 리포트 폴더에 저장됩니다.

테스트 서버는 이 리포트 폴더를 웹으로 서비스하기 때문에 Jenkins 대시보드에 추가한 링크를 이용하면 테스트 결과 리포트를 볼 수 있습니다.


EOF


댓글()

외부 Jenkins와 내부 네트워크 상의 GUITAR 테스트 환경 연동 1

DevOps|2017. 5. 25. 18:30

이 글에서는 퍼블릭 IP를 가지고 외부에 설치된 Jenkins와 내부 네트워크의 Windows 랩탑에서 실행되는 GUITAR 테스트의 연동 방법에 대해서 다룹니다.
GUITAR 2.0.0.12 버전의 사용자 가이드에서 제시하는 내용을 실무에 적용한 경험을 정리했다고 보시면 됩니다. 따라서 부족한 부분은 GUITAR 사용자 가이드로 보충하면 되겠습니다.

  랩탑 설정

랩탑에는 톰캣과 VitualBox를 설치합니다.
톰캣은 Jenkins와 연동하여 각 테스트 환경(VM)의 테스트 리포트를 보여주기 위한 용도이며, VirtualBox는 실제 테스트를 수행하거나 테스트 스크립트를 작성할 VM을 운용하기 위해서 필요합니다.

  VirtualBox 설치 및 설정

VirtualBox를 다운로드 한 후 설치합니다. VirtualBox Extension Pack도 꼭 같이 설치해 주세요.
https://www.virtualbox.org/wiki/Downloads

GUITAR 테스트를 작성 및 수행할 OS를 기반으로 가상 머신(VM)을 2개 만듭니다. Windows 7을 추천합니다.

랩탑의 적당한 위치에 아래의 폴더를 만듭니다.

  • GUITAR_DATA - 모든 VM이 공유하는 GUITAR 작업 폴더
  • GUITAR_REPORT1 - VM1의 리포트 공유 폴더
  • GUITAR_REPORT2 - VM2의 리포트 공유 폴더

VM1은 테스트 작성용, 다른 하나(VM2)는 테스트 수행용이지만 테스트 서버에서 리포트를 보기 편하도록 각 VM의 REPORT 폴더를 테스트 서버(랩탑)와 공유하도록 설정하려고 합니다.

VirtualBox 관리자에서 VM2를 선택하고 설정(S) 메뉴를 클릭합니다.

공유 폴더를 클릭한 후 + 기호가 있는 공유 추가 버튼을 클릭하여 위에서 생성한 GUITAR_REPORT2의 경로를 폴더 경로에 입력하고 자동 마운트(A) 옵션을 체크하고 저장합니다.

마찬가지 요령으로 공유 작업 폴더를 추가하고, VM1에도 동일하게 공유 폴더를 추가합니다.

VM2에서 파일 탐색기를 띄워서 확인해 보면, 위에서 추가한 공유 폴더가 각각 E:\F:\ 드라이브로 매핑된 것을 볼 수 있습니다.


이제 각 VM에 GUITAR를 설치합니다.

VM2에는 Jenkins 연동을 위해서 추가로 Java SDK를 설치합니다.
랩탑에서 다운로드 한 후 공유 폴더를 이용해서 각 VM에서 설치토록 하면 편합니다.

각 VM에서 C:\GUITAR\BIN\guitar.ini을 편집기로 열고 리포트 폴더의 위치를 리포트 공유 폴더 위치로 변경합니다. Path = ..\Report 문자열을 검색한 후 공유 폴더 위치로 값(..\Report)을 변경하면 됩니다. 저는 F:\로 변경했습니다.

[REPORT]
AreaCaptureView = 세로
FullSizeImage = False
TestServerName =
OpenReport = True
OpenDashboardReport = False
LimitCount=100
;Path = ..\Report
Path = F:\
DashboardHost = http://localhost:8080
XMLReport = False

마찬가지로 작업 폴더의 위치도 랩탑과 공유한 작업 폴더 위치로 변경합니다. WorkPath = 문자열을 검색한 후 값을 변경하면 됩니다. 저는 E:\로 변경했습니다.

[SCRIPT]
;WorkPath = C:\GUITAR\DATA
WorkPath = E:\
;SVNPath = https://dev.naver.com/svn/guitar/xxxxx/branches/yyyyyy
PreLoadScript = 공용변수.txt
TemplateScript = 기본템플릿.txt
;PreRun ="%BINPATH%\gitpull.bat" %WorkPath%

마지막으로 VM1의 C:\GUITAR\DATA 폴더의 내용물을 공유 작업 폴더로 모두 옮겨 주고, 각 VM의 C:\GUITAR\Report 폴더의 내용물을 각각의 공유 폴더로 모두 옮겨줍니다.
작업 폴더는 모든 VM이 공유하기 때문에 VM1에서만 옮기면 모두가 공유합니다. 리포트 폴더에는 우리가 연동을 위해 사용할 스크립트와 실행 파일 등이 있기 때문에 옮겨줄 필요가 있습니다.

  Tomcat 설치

랩탑에 톰캣을 다운로드 한 후 적당한 곳에 설치합니다.
http://tomcat.apache.org/download-60.cgi

%TOMCAT_HOME%/conf/Catalina/localhost 폴더를 생성하고, 다시 ROOT.xml 파일을 아래 내용으로 생성합니다. docBase 속성의 값은 위에서 생성한 GUITAR_REPORT2 폴더의 경로입니다. 저는 F:/GUITAR_REPORT2로 넣었습니다.

<Context path="/" docBase="F:/GUITAR_REPORT2" reloadable="true"/>

URIEncoding 오류를 방지하기 위해서 아래와 같이 %TOMCAT_HOME%/conf/server.xml 파일의 8080 포트 커넥터 설정을 변경합니다.

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           edirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />

톰캣을 실행한 후 VM2의 GUITAR 리포트 주소 (http://<랩탑의 내부 아이피>:8080/report.htm)로 접속하여 연동이 잘 됐는지 확인합니다.

너무 길어져서 다음 글에서 이어 가겠습니다.


EOF

댓글()

애플 무선 키보드를 윈도(Windows)에서 편리하게 사용하는 방법

기타|2017. 5. 20. 10:27

애플 무선 키보드를 윈도에서 조금이라도 편하게 사용하려면 uxsoft의 Apple Wireless Keyboard를 설치해 보세요.
몇 가지 좋은점이 있습니다.

  • 볼륨 조절, 음악 재생기 제어 등의 기능키를 사용할 수 있습니다
  • DELETE 키를 사용할 수 있습니다(fn + delete)
  • Page Up, Page Down, Home, End 키를 사용할 수 있습니다(추가 설정이 필요합니다)

Apple Wireless Keyboard 는 다음 링크에서 다운로드할 수 있습니다. 아래쪽에 있는 Download 버튼을 클릭하세요.
http://uxsoft.cz/Projects/AppleWirelessKeyboard

참고로 제 설정의 스크린샷을 남깁니다.

 

EOF

댓글()

젠킨스(Jenkins)의 상세 내용 입력 방식을 HTML로 변경

DevOps|2017. 5. 18. 19:30

젠킨스의 메인이나 작업(프로젝트) 페이지에는 상세 내용을 입력하는 기능이 있습니다.


기본 설정으로는 Plain text만 입력이 가능한데요. 링크 등을 제공하기 위해서 HTML을 사용하고 싶을 때가 있습니다.
이런 경우 설정 변경을 통해 HTML 입력이 가능합니다.


설정은 간단합니다. 의외의 장소에 있어서 찾기가 어렵긴 하지만요.
Jenkins 관리 → Configure Global Security 메뉴로 이동한 후 Markup Formatter 항목의 값을 Raw HTML로 변경하면 됩니다.




EOF

댓글()

젠키스(Jenkins)에 노드(node) 추가하기

DevOps|2017. 5. 16. 19:00

젠키스(Jenkins)에 노드(node) 추가하기

CI 서버(Jenkins)는 EC2 등의 퍼블릭 IP로 접근 가능한 외부에 있고 특정 작업(job)을 사내에서 수행하는 경우 보안 문제 때문에 사내망을 CI에서 접근하도록 허용하는 건 어렵습니다. 이런 경우에 대한 해결책으로 자바 웹스타트를 통해 사내에 젠킨스 노드를 추가 할 수 있습니다. 제 경우는 사내의 Windows 랩탑에서 GUITAR 테스트를 수행하기 위해서 이 방법을 택했습니다.

Jenkins 관리 → 노드 관리 → 신규 노드 메뉴를 이용해서 노드를 추가합니다.

노드명을 입력하고 Permanent Agent를 선택한 후 OK 버튼을 클릭합니다.

이어지는 화면에서 Remote root directory에는 c:\jenkins를 입력하고 Launch method는 Launch agent via Java Web Start를 선택합니다. 나머지 설정은 기본 값을 유지하고 저장합니다.

아직 새 노드와 연결이 안됐기 때문에 노드 목록에는 오프라인으로 나옵니다. 이제 연결을 해야 합니다.

사내망 안의 Windows 랩탑에서 위에서 생성한 노드 화면에 접속합니다. Launch 버튼을 클릭하면 jnlp 파일(slave-agent.jnlp)을 다운로드 혹은 바로 실행할 수 있습니다. 혹 보안 경고가 뜨더라도 무시하고 jnlp 파일을 실행하세요. Jenkins slave agent가 실행되고 젠킨스 서버에 접속 중이라는 내용이 나오다가 곧 Connected로 내용이 변경됩니다. 만약 접속이 안되면 접속 중인 젠킨스 서버의 포트를 확인하세요. 접속 중 화면에 나온 포트(42031)가 접속 가능한지 확인하면 됩니다.

JNLP 에이전트의 포트는 무작위로 할당됩니다. 포트 고정이 필요하면 Jenkins 관리 → Configure Global Security 메뉴에서 TCP port for JNLP agents를 Fixed로 변경하고 원하는 포트 번호를 넣으면 됩니다.

이제 노드 화면을 새로고침하면 JNLP로 연결된 것으로 내용이 변경된 것을 확인할 수 있습니다.

노드 관리 화면의 목록에도 새 노드의 정보가 나옵니다.

랩탑을 재부팅 했을 때에도 연결을 유지하려면 Jenkins slave agent의 File → Install as a service 메뉴를 이용해서 윈도 서비스로 등록하면 됩니다.


EOF

댓글()

Chrome DevTools - 네트워크 정보를 저장하고 나중에 보기

Developer Tools|2017. 5. 11. 22:52

웹 개발을 하다 보면 서버와의 통신을 기록하고 이를 나중에 참고해야 할 때가 있는데요. 이럴 때 유용한 기능이 Chrome DevTools에 있습니다.

Network 패널을 열고 통신을 기록한 행을 우클릭하면 "Save as HAR with content" 메뉴가 있습니다. 이를 클릭하면 HAR(HTTP Archive) 형식으로 패널 안의 전체 통신 내역을 저장할 수가 있습니다.


이렇게 저장한 HAR 파일은 크롬 확장인 HTTP Archive Viewer를 이용해서 나중에 다시 볼 수 있습니다. HTTP Acrhive Viewer의 Load 탭에서 HAR 파일을 열면 됩니다.

네트워크 패널의 활용법은 아래 링크를 참고하세요.

리소스 로드 시간 측정


EOF

댓글()