오래된 프로젝트에 jenkins 적용해보기
TRANSCRIPT
오래된 프로젝트에 Jenkins 적용해보기
• 트위터 : https://twitter.com/yongho1037• 블로그 : http://yongho1037.tistory.com• 메일 : [email protected]
(Windows/Visual Studio)
최용호
설치하기• Windows 에서 Jenkins 를 설치하는 방법은 엄청 간단합니다 .• Jenkins 홈페이지에서 다운 받아서 설치 합니다 .• https://jenkins-ci.org/
설치하기
• 설치가 완료되면 자동으로 서비스가 시작되어
http://localhost:8080 으로 접속됩니다 .
• 만약 8080 포트가 다른 어플리케이션에서 사용 중이라면 404에러가 발생할 것입니다 .
• 이 때는 Jenkins 가 설치된 경로 ( 기본 C:\Program Files (x86)\Jenkins) 에서 Jenkins.xml 파일을 수정하여 port 를
8080 이 아닌 다른 값으로 변경합니다 .
매개변수 지정• 매개변수를 지정하게 되면 다양한 방법으로 빌드를 할 수가 있습니다 .
• 예를 들면 빌드 할 국가를 선택하고 , 플랫폼을 선택 할 수 있도록
구성할 수 있습니다 . ( 단적인 예이고 활용 부분은 무궁무진해요 )
매개변수 타입 선택
• 콤보박스에 출력된 리스트 외에도 플러그인을 설치하면 수많은
매개변수의 타입들을 사용할 수 있습니다 .
• 저는 그 중에 가장 간단한 Choice Parameter 를 사용해봤어요 .
매개변수 타입 선택
• Choices 에 한 Line 에 하나의 매개변수가 입력되고 빌드 시에
선택할 수 있게 됩니다 .
• 아래 매개변수 추가 버튼을 통해서 또 다른 매개변수를 추가 할
수가 있습니다 .
소스 코드 관리
• 소스 코드 관리를 통해서 프로젝트에서 사용하고 있는 코드 관리 툴을 연동할
수가 있는데 이 또한 플러그인 설치로 더 많은 종류를 선택할 수가 있습니다 .
• 저는 Git 을 연동해서 사용했는데 이 부분은 나중에 또 설명하도록 할께요 .
DEVENV 로 프로젝트 빌드하기
• 오래된 프로젝트이다 보니 vs2005 에서 프로젝트가 빌드되고
있었습니다 .
• 처음에는 MSBuild 를 사용해서 빌드를 시도했으나 프로젝트의
빌드 순서 관련 설정이 먹히지 않아 제대로 동작하질 않았어요 . ( 프로젝트 내에서 지정한 순서대로 빌드 되지 않고 프로젝트
순서대로 빌드 됨 )
• 해결방법을 찾지 못해서 devenv 를 사용해서 빌드했습니다 .
BUILD STEP• MSBuild 의 경우에는 Jenkins 에서 제공하는 플러그인이 존재해서
플러그인을 설치한 후 사용하면 됐었는데 , devenv 는
안보이더군요 .
• 그래서 무식하게 “ Execute Windows batch command” 를
사용했습니다 .
COMMAND 입력
• 먼저 devenv 가 있는 경로를 알아야 합니다 . 보통 아래와 같은 C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE 에서 설치되어 있는 버전에 맞는 경로로 찾아 들어가시면 됩니다 .
DEVENV 실행 파일
• Devenv 가 있는 경로에 가보면 devenv.exe 와 devenv.com 이
존재하는데 devenv.exe 는 로그 출력 없이 수행이 되고 devenv.-com 은 로그를 함께 출력해 줍니다 .
• 그래서 저는 devenv.com 을 사용했어요 .
DEVENV 옵션
• 여기서 사용한 옵션 중에 /Build 는 말그대로 빌드를 수행하는데 이 외에
도 /ReBuild, /Clean 이 있고 옵션은 필요한 것들을 찾아보고 적용하시면
됩니다 .
• 여기서 “ Debug|Win32” 와 같은 것을 매개변수로 지정해서 사용하면 빌드
시작 시에 선택해서 빌드 할 수가 있겠죠 ?
• 그 뒤에 /out 은 출력되는 로그를 파일로 저장하기 위한 옵션입니다 .
빌드 실행
• 이제 기본적인 빌드를 실행할 수가 있습니다 .
• 저장을 하고 나오면 아래와 같이 새로운 Item 이 추가가 되었
고 , 오른쪽에 있는 아이콘을 클릭하면 빌드를 시작하게 됩니다 .
빌드 실행 – 매개변수 선택
• 아까 설정한 매개변수가 보입니다 .
• 이 매개변수를 구성에서 사용할때는 %% 안에 매개변수명을 넣어서 사용하면 됩니
다 . ( 예를 들면 %Parameter1%)
• 위에서 사용했던 Windows Batch Command 에서 /Build 다음에 플랫폼을
%Platform% 과 같은 식으로 지정해서 사용하면 좀 더 다양하게 빌드할 수 있을
것입니다 .
C# 을 활용해서 입맛대로 구성해보기
• 사실 내용은 별거 없습니다 .
• Windows Batch Command 를 사용해보니 잘 모르는 ant 를
공부해서 사용하는 것보다 C# 을 이용해서 원하는 기능을
포함시키자 라는 아이디어가 떠올랐습니다 .
• 그래서 Jenkins 에서 활용할 수 있도록 기존의 툴을 변형시켜서
사용했습니다 .
• Command 로 실행 할 수 있도록 . ( 실행파일 .exe 옵션 1 옵션 2 옵션 3)
제가 사용했던 것
• 빌드 전에 필요한 파일들을 복사해야 하는 경우
• 기획자와의 협업 과정 중 변경된 테이블을 빌드 전에 적용해야
하는 경우
• 빌드 후 해외로 배포해야 하는 경우 해당 국가에 맞는 실행
파일들로 패키징하는 경우
• 다른 머신으로 배포 후 서비스 등록까지 한방에
• 등등 그냥 구현하기 나름인 것 같습니다 .
겪었던 이슈 -1• C# 으로 제작한 프로그램을 사용하는 경우 코드 내에 “ Envi-
ronment.CurrentDirectory” 를 이용하거나 “ Directo-ry.GetCurrentDirectory()” 를 사용해서 경로를 가지고 오는
경우 프로젝트의 작업 디렉토리가 아닌 파일을 실행시킨 위치를
가져오므로 잘못된 위치를 가리킬 수 있습니다 .
• 프로젝트의 작업 디렉토리를 가져오기 위해서는 “ AppDo-main.CurrentDomain.BaseDirectory” 를 사용합니다 .
겪었던 이슈 -2• Windows Batch Command 를 이용하여 원격 PC 에 배포를 하는 경우 경로를
찾지 못하는 문제가 발생했습니다 .
• 로컬에서는 정상 동작하는데 원격 PC 로 배포하는 경우에만 자꾸 경로를 찾지
못해서 한참을 헤매던 중 Jenkins 로 실행 될 때 실행하는 사용자 계정을
찍어보니 AUTHORITY\SYSTEM 이었습니다 .
• 이는 Jenkins 서비스의 설정이 로컬 시스템 계정으로 되어있기 때문이었는데
원격 PC 의 공유 폴더에 이 계정에 대한 권한이 없어서 였습니다 .
• 그래서 공유폴더에 권한을 가지고 있는 계정으로 지정해서 서비스를 재시작하니
해결되었습니다 .
• 서비스 -> Jenkins 에서 속성으로 진입 -> 로그온 -> 계정 지정 -> 관리자 지정
마치며
• Jenkins 는 직접적으로 구축해본 것은 이번이 처음이었습니다 .
• 간단해 보였는데 생각보다 시행착오가 많았습니다 .
• 앞으로 더 알게 되는 유용한 정보는 공유할 것입니다 .
• 조언을 해 주실 분이나 궁금하신 부분은 메일로 보내주세요 .