1. MS 컴파일을 위한 플러그인 설치
(MSBuild 를 사용하면 컴파일이 잘 안됨. devenv.exe 를 이용하는 방법 사용. 단, MSTest plugin 은 테스트 수행 결과 전시를 위해 설치해야 함)
Jenkins 웹페이지에 Admin 계정으로 로그인<Jenkins 관리> → <플러그인 관리> 로 이동<설치 가능> 탭으로 이동하여 아래의 플러그인을 모두 설치MSBuild Plugin- MSTest plugin
MSTestRunner pluginNAnt PluginNCover plugin
상황에 따라 Jenkins Web Server 재시작<Jenkins 관리> → <플러그인 관리> → <설치된 플러그인 목록> 에 그림과 같이 설정이 되어 있어야 함
1.1. MS Build 플러그인 설정
Jenkins 웹페이지에 Admin 계정으로 로그인<Jenkins 관리> → <Global Tool Configuration> 으로 이동<MSBuild> 에서 <Add MSBuild> 버튼 클릭아래의 그림과 같이 설정하고 페이지 제일 하단의 <Save> 버튼 클릭
2. Visual Studio 가 설치된 Windows 컴파일 서버 등록
사전 조건
- Windows 컴파일 서버에는 JAVA JVM 이 설치되어 있어야 함
- .Net Framework 컴파일러가 설치되어 있어야 함
- Git 이 설치되어 있어야 함
2.1. Jenkins 서버 작업
- Jenkins 웹페이지에 Admin 계정으로 로그인
- <Jenkins 관리> → <노드 관리> 로 이동
- 페이지 좌측 메뉴 중 <신규 노드> 클릭
- 아래 그림과 같이 설정하고 <OK> 버튼 클릭
- 아래 그림과 같이 설정하고 <Save> 버튼 클릭
- 설정해야 하는 값은 아래와 같음
- Remote root directory
- 원격 서버에서 사용할 Root Directory 의 절대 경로를 입력
- 원격 서버를 기준으로 입력하는 것임
- 원격 서버에서 사용할 Root Directory 의 절대 경로를 입력
- Node Properties
- Git,
MSBuild의 실행 파일의 위치를 지정
- Git,
- Remote root directory
- 설정해야 하는 값은 아래와 같음
- 아래의 그림과 같이 새로 추가한 Server 가 (오프라인) 상태로 출력됨을 확인
2.2. Windows 컴파일 서버 작업
- Jenkins 웹페이지에 Admin 계정 or 사용자 계정으로 로그인
- 좌측에 출력된 <빌드 실행 상태> 중, 새로 생성한 Server (오프라인) 을 선택
- 새로 표시된 페이지에서 <Launch> 버튼 클릭
- 다운 받은 jnlp 파일 실행
- 아래와 같이 Agent 가 실행됨을 확인
3. 프로젝트 생성
- Jenkins 웹페이지에 Admin 계정 or 사용자 계정으로 로그인
- 사용자 계정의 경우, 신규 Item 생성 권한이 설정되어 있어야 함
- 좌측 메뉴 중, <새로운 Item> 선택
- 과제 이름을 입력하고 Freestyle project 선택 후 <OK> 버튼 선택
- 각 Part 의 설정을 마무리 한 뒤, 페이지 하단의 <저장> 버튼 클릭
3.1. General Part 설정
- General part 에서 <Restrict where this project can be run> 체크박스 선택하고 Label Expression 에 신규 서버 이름 설정
- 본 과제의 소스를 다운로드하고 컴파일 할 서버를 설정해 주는 작업
3.2. 소스 코드 관리 Part 설정
- Source 관리 part 에서 <Git> 을 선택하고 Repository 정보 입력
- 자격 증명까지 함께 입력해야 함
- 자격 증명의 경우, 존재하는 값이 없다면 Credentials 의 우측에 위치한 <Add> 버튼을 클릭해서 신규로 추가 가능함
- 자격 증명의 경우, 존재하는 값이 없다면 Credentials 의 우측에 위치한 <Add> 버튼을 클릭해서 신규로 추가 가능함
- 자격 증명까지 함께 입력해야 함
3.3. 빌드 유발 Part 설정
- 빌드 유발 part 에서 <Build periodically> 를 선택하고 Schedule 에 "H H 1,15 1-12 *" 입력
3.4. Build Part 설정
- <Nuget 설치 → Release 컴파일 → 테스트 결과 파일 삭제 → 테스트 수행> 의 순서로 작업이 진행되도록 Batch Command 설정
3.4.1. Nuget 설치
- nuget.exe 를 원격 빌드 서버의 특정 위치에 복사 (여기서는 D:\ 드라이브에 놓았다고 전제)<Add build step> 에서 <Execute Windows batch command> 를 선택하여 아래와 같이 설정
- $(nuget 파일 절대 경로) restore $(솔루션 파일 절대 경로)
"D:\nuget.exe" restore "D:\Jenkins_Slave\workspace\OGST\OGS.sln"
3.4.2. Release 컴파일
- <Add build step> 에서 <Execute Windows batch command> 를 선택하여 아래와 같이 설정
- $(devenv.exe 파일 절대 경로) $(솔루션 파일 절대 경로) /build $(컴파일 조건)
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe" "D:\Jenkins_Slave\workspace\OGST\OGS.sln" /build "Release|Any CPU"
3.4.3. 테스트 결과 파일 삭제
- 테스트 수행 후 결과 파일이 덮어써지지 않기 때문에 본 command 를 수행하는 것임. 덮어쓰기가 가능하다면 본 단계 제거 가능
- <Add build step> 에서 <Execute Windows batch command> 를 선택하여 아래와 같이 설정
- del $(테스트 결과 파일 절대 경로)
del D:\Jenkins_Slave\workspace\TestResult\ogstTestResults.rtx
3.4.4. 테스트 수행
- <Add build step> 에서 <Execute Windows batch command> 를 선택하여 아래와 같이 설정
- $(mstest.exe 파일 절대 경로) /resultsfile:$(테스트 결과 파일 절대 경로) /testcontainer:$(테스트 함수를 포함하는 프로젝트 dll 파일의 절대 경로)
- /testcontainer:$(테스트 함수를 포함하는 프로젝트 dll 파일의 절대 경로) 는 다수개를 쓸 수 있음. 단, 멀티라인은 불가
- 아래 예제가 멀티라인처럼 보이지만 줄바꿈 때문에 그렇게 보이는 것이지 실제로는 한줄임
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\mstest.exe" /resultsfile:D:\Jenkins_Slave\workspace\TestResult\ogstTestResults.rtx /testcontainer:"D:\Jenkins_Slave\workspace\OGST\99.TestProjects\DISTestProject4Core\Bin\Release\DISTestProject4Core.dll" /testcontainer:"D:\Jenkins_Slave\workspace\OGST\99.TestProjects\RCMSTestProject4Core\Bin\Release\RCMSTestProject4Core.dll"
- $(mstest.exe 파일 절대 경로) /resultsfile:$(테스트 결과 파일 절대 경로) /testcontainer:$(테스트 함수를 포함하는 프로젝트 dll 파일의 절대 경로)
3.5. 빌드 후 조치 Part 설정
- <MSTest 결과 리포트 게제> 의 순서로 작업 설정
3.5.1. MSTest 결과 리포트 게제
- <빌드 후 조치 추가> 에서 <Publicsh MSTest test result report> 를 선택하여 아래와 같이 설정
- <Test report TRX file> 에는 <Build>-<테스트 수행> 에서 생성한 파일의 절대 경로를 설정
D:\Jenkins_Slave\workspace\TestResult\ogstTestResults.rtx
4. 컴파일
Project 페이지에서 좌측 메뉴 중 <Build Now> 클릭
4.1. 코드 다운로드 에러 발생 시
4.1.1. 에러 메시지
> C:\Program Files\Git\bin\git.exe fetch --tags --progress http://jjhan@sigma:9092/scm/ccm/ccm.git +refs/heads/*:refs/remotes/origin/* ERROR: Error fetching remote repo 'origin' hudson.plugins.git.GitException: Failed to fetch from http://jjhan@sigma:9092/scm/ccm/ccm.git at hudson.plugins.git.GitSCM.fetchFrom(GitSCM.java:797)
4.1.2. 원인
Bitbucket 에 접근할 수 있는 권한이 없기 때문임
4.1.3. 해결책
Bitbucket 의 설정값을 아래와 같이 수정
이렇게 변경하는 것이 보안 상 제대로 된 것인지는 모르겠음
4.2. Nuget Package 경로 찾지 못한 컴파일 에러 발생 시
4.2.1. 에러 메시지
1>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3245: 이 참조를 확인할 수 없습니다. "EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" 어셈블리를 찾을 수 없습니다. 어셈블리가 디스크에 있는지 확인하십시오. 해당 코드에 이 참조가 필요한 경우 컴파일 오류가 발생할 수 있습니다. 1>C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1820,5): warning MSB3245: 이 참조를 확인할 수 없습니다. "EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" 어셈블리를 찾을 수 없습니다. 어셈블리가 디스크에 있는지 확인하십시오. 해당 코드에 이 참조가 필요한 경우 컴파일 오류가 발생할 수 있습니다. 1>D:\Jenkins_Slave\workspace\FTS\FTS.Server\FTS.Server.Database\FTSDB.Context.cs(13,23,13,29): error CS0234: 'System.Data' 네임스페이스에 'Entity' 형식 또는 네임스페이스 이름이 없습니다. 어셈블리 참조가 있는지 확인하세요. 1>D:\Jenkins_Slave\workspace\FTS\FTS.Server\FTS.Server.Database\FTSDB.Context.cs(14,23,14,29): error CS0234: 'System.Data' 네임스페이스에 'Entity' 형식 또는 네임스페이스 이름이 없습니다. 어셈블리 참조가 있는지 확인하세요. 1>D:\Jenkins_Slave\workspace\FTS\FTS.Server\FTS.Server.Database\FTSDB.Context.cs(16,40,16,49): error CS0246: 'DbContext' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요. 1>D:\Jenkins_Slave\workspace\FTS\FTS.Server\FTS.Server.Database\FTSDB.Context.cs(23,49,23,63): error CS0246: 'DbModelBuilder' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요. 1>D:\Jenkins_Slave\workspace\FTS\FTS.Server\FTS.Server.Database\FTSDB.Context.cs(28,24,28,47): error CS0246: 'DbSet<>' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요. 1>D:\Jenkins_Slave\workspace\FTS\FTS.Server\FTS.Server.Database\FTSDB.Context.cs(23,33,23,48): error CS0115: 'FTSEntities.OnModelCreating(DbModelBuilder)': 재정의할 적절한 메서드를 찾을 수 없습니다.
4.2.2. 원인
Nuget 에서 다운 받아 사용하는 Package 에 대한 DLL 참조가 프로젝트의 Bin 폴더에 존재하는 DLL 로 설정되어 있기 때문임
4.2.3. 해결책
- 개발 서버에 접속하여 해당 DLL 참조가 Package 폴더로 설정되어 있는지 확인
- 그렇지 않다면 참조 항목에서 DLL 삭제 후, 관련 Package 다시 설치
- Package 에 대한 DLL 참조가 Package 폴더로 설정되어 있는지 확인
- 변경된 내용을 Bitbucket 에 commit
5. 참고페이지
MSBuild 관련
Remote Server 설정 관련
















