C # 빌드 머신을 어떻게 그리고 왜 설정합니까? [닫은]


144

C # 프로젝트에서 소규모 (4 인) 개발 팀과 협력하고 있습니다. 나는 이것이 좋은 것임을 이해하기 때문에 프로젝트의 야간 빌드 및 테스트를 수행 할 빌드 머신을 제안했습니다. 문제는 여기에 예산이 많지 않기 때문에 그 비용에 대한 비용을 정당화해야한다는 것입니다. 그래서 알고 싶습니다.

  • 어떤 도구 / 라이센스가 필요합니까? 현재 Visual Studio 및 Smart Assembly를 사용하여 소스 제어를 구축하고 Perforce를 사용합니다. 자동화 스크립트를 실행하기위한 다른 작업이 필요합니까?
  • 빌드가 손상되었다는 표시 외에 정확히 무엇이 나에게 도움이됩니까? 이 스크립트에서 실행될이 솔루션 (sln 파일)에 테스트 프로젝트를 설정해야하므로 특정 기능을 테스트 할 수 있습니까? 현재 두 가지 테스트가 있습니다. 좋은 단위 테스트를 수행 할 시간이 없었기 때문입니다.
  • 어떤 종류의 하드웨어가 필요합니까?
  • 빌드가 완료되고 테스트되면 ftp 사이트에 빌드하거나 내부 액세스를위한 다른 방법을 사용하는 것이 일반적입니까? 아이디어는이 기계가 만드는 것입니다 빌드를, 우리는 모든 IT로 이동하지만, 우리가있는 경우 디버그 빌드 할 수 있습니다.
  • 이런 종류의 빌드를 얼마나 자주해야합니까?
  • 공간은 어떻게 관리됩니까? 우리가 야간 빌드를 할 경우, 모든 오래된 빌드를 유지하거나 약 일주일 정도 후에 도랑을 시작해야합니까?
  • 여기에 보이지 않는 것이 있습니까?

    나는 이것이 매우 큰 주제라는 것을 알고 있으며, 이제 막 시작했습니다. 여기에서이 질문의 사본을 찾을 수 없었으며 거기에 책이 있으면 알려주세요.

    편집 : 마침내 작동하도록했습니다! 허드슨은 완전히 환상적이며 FxCop은 우리가 구현했다고 생각한 일부 기능이 실제로 불완전하다는 것을 보여줍니다. 또한 설치 프로그램 유형을 Old-and-Busted vdproj에서 New Hotness WiX로 변경해야했습니다.

    기본적으로주의를 기울이는 사람들을 위해 명령 줄에서 빌드를 실행할 수 있다면 허드슨에 넣을 수 있습니다. MSBuild를 통해 명령 줄에서 빌드를 실행하는 것은 도구를 최신 상태로 유지하기 때문에 유용한 연습입니다.


  • 5
    당신이 허드슨을 사랑한다고 들으니 기뻐요. :) CI 플랫폼이없는 삶을 상상하기가 어렵지 않습니까?
    Allen Rice

    2
    그거 정말 어렵다. 그 변화는 그만한 가치가있었습니다.
    mmr

    답변:


    147

    업데이트 : Jenkins 는 Hudson의 최신 버전입니다. 모든 사람이 지금 Jenkins를 사용해야합니다. 그에 따라 링크를 업데이트하겠습니다.

    Hudson 은 무료이며 구성이 매우 쉽고 VM에서 쉽게 실행할 수 있습니다.

    내 오래된 게시물에서 부분적으로 :

    우리는 그것을 사용합니다

    • Windows 서비스 배포
    • 웹 서비스 배포
    • MSTests를 실행하고 모든 junit 테스트만큼 많은 정보를 표시
    • 낮고, 높은, 높은 작업을 추적
    • 트렌드 그래프 경고 및 오류

    허드슨이 지원하는 내장 .net 항목 중 일부는 다음과 같습니다.

    또한, 신은 당신이 영상 소스 안전을 사용하는 것을 금지합니다 . 그것은 그것을 지원합니다 . 허드슨을 사용하여 .net 프로젝트를 빌드하는 Redsolo의 기사를 살펴 보는 것이 좋습니다.

    당신의 질문

    • Q : 어떤 도구 / 라이센스가 필요합니까? 현재 Visual Studio 및 Smart Assembly를 사용하여 소스 제어를 구축하고 Perforce를 사용합니다. 자동화 스크립트를 실행하기위한 다른 작업이 필요합니까?

    • ㅏ: 방금 패치 된 Windows 서버 OS 설치를 실행하는 VM의 최신 사본에 Visual Studio를 설치했습니다. 따라서이를 처리하려면 라이센스가 필요합니다. Hudson은 Windows 서비스로 설치되어 포트 8080에서 실행되며 업데이트 된 코드에 대해 코드 저장소를 스캔하는 빈도를 구성하거나 특정 시간에 빌드하도록 지시 할 수 있습니다. 브라우저를 통해 구성 할 수 있습니다.

    • 큐: 빌드가 손상되었다는 표시 외에 정확히 어떤 것이 나에게 도움이됩니까? 이 스크립트에서 실행될이 솔루션 (sln 파일)에 테스트 프로젝트를 설정해야하므로 특정 기능을 테스트 할 수 있습니까? 현재 두 가지 테스트가 있습니다. 좋은 단위 테스트를 할 시간이 없었기 때문입니다.

      A : 빌드가 처음 실패하거나 불안정해질 때 이메일이 발송됩니다. 단위 테스트에 실패하거나 설정 한 여러 기준을 통해 불안정한 것으로 표시 될 수있는 경우 빌드가 불안정합니다. 단위 테스트 또는 빌드가 실패하면 이메일로 전송되며 실패한 위치, 이유 및 방법을 알려줍니다. 내 구성으로 우리는 다음을 얻습니다.

      • 마지막 작업 빌드 이후의 모든 커밋 목록
      • 그 커밋의 메모를 커밋
      • 커밋에서 변경된 파일 목록
      • 빌드 자체의 콘솔 출력, 오류 또는 테스트 실패 표시
    • Q : 어떤 종류의 하드웨어가 필요합니까?

      A : VM으로 충분합니다

    • 큐: 빌드가 완료되고 테스트 된 후에는 ftp 사이트에 빌드를 구축하거나 내부 액세스를위한 다른 방법이 있습니까? 아이디어는이 머신이 빌드를 만들고 우리 모두가 진행하지만 필요하다면 디버그 빌드를 만들 수 있다는 것입니다.

      A : Hudson은 md5 해시를 통한 ID 지정, 업로드, 복사, 보관 등을 포함하여 원하는 모든 작업을 수행 할 수 있습니다. 자동으로 수행되며 빌드 아티팩트의 오랜 실행 기록을 제공합니다.

    • Q : 이런 종류의 빌드를 얼마나 자주해야합니까?

      A : 우리는 매시간 SVN을 조사하여 코드 변경 사항을 찾은 다음 빌드를 실행합니다. 야간은 괜찮지 만 어제 일한 것이 아침에 들어올 때 마음에 새롭지 않기 때문에 다소 가치없는 IMO입니다.

    • Q : 공간은 어떻게 관리됩니까? 우리가 야간 빌드를하는 경우, 우리는 모든 오래된 빌드를 유지하거나 약 일주일 정도 후에 도랑을 시작해야합니까?

      A : 그게 당신에게 달려 있습니다. 오랜 시간 후에 빌드 아티팩트를 장기 저장 장치로 옮기거나 삭제하지만 텍스트 파일 / xml 파일에 저장된 모든 데이터는 변경 로그, 추세 그래프, 공간이 거의 소모되지 않는 서버의 등등. 또한 후행 빌드 수의 아티팩트 만 유지하도록 Hudson을 설정할 수 있습니다.

    • Q : 여기에 보이지 않는 것이 있습니까?

      A : 아니요, 지금 바로 Hudson을 받으십시오. 실망하지 않을 것입니다!


    1
    좋은 답변입니다! 나는 CruiseControl 만 사용했지만 허드슨을 잘 팔았습니다.
    Ben S

    1
    포인터에 감사드립니다. 허드슨은 올바른 도구처럼 보입니다.
    mmr

    1
    첫 번째 단어에 링크를 넣을 수 있습니까?
    Jhonny D. Cano -Leftware-

    허드슨에 대한 링크를 요청하는 곳은 어디입니까? 그렇다면, 나는 그것을 추가했다, 좋은 전화 :)
    Allen Rice

    5
    누군가가 그것을 놓친 경우 Hudson은 원래 개발자에 의해 Jenkins 로 포크 / 이름을 바꿨습니다 . 이 질문 이 당신을 설득시킬 것이므로 Jenkins를 선택하는 것이 가장 좋습니다 .
    Jonik

    26

    우리는 다음 콤보로 큰 행운을 얻었습니다.

    1. Visual Studio (특히 MSBuild.exe 명령 줄 도구를 사용하여 솔루션 파일을 전달합니다. msbuild 스크립트가 필요하지 않습니다)
    2. NAnt (MSBuild보다 XML 구문 / 태스크 라이브러리와 유사 함. P4 src 제어 작업 옵션도 있음)
    3. CruiseControl.net- 빌드 모니터링 / 시작을위한 내장 웹 대시 보드

    CCNet에는 빌드 성공 / 실패시 전자 메일을 보내는 알림 기능이 내장되어 있습니다.

    정당성 : 수동 빌드를 수행하는 개발자의 부담을 덜고 방정식에서 사람의 실수를 제거하기 위해 많은 노력을 기울입니다. 이 효과를 정량화하는 것은 매우 어렵지만 일단 수행하면 다시 돌아 가지 않습니다. 소프트웨어를 빌드하고 릴리스하기위한 반복 가능한 프로세스가 가장 중요합니다. 나는 당신이 그들이 직접 소프트웨어를 빌드하는 곳이었고 당신의 빌드 녀석에게 "새로운 DLL을 포함하는 것을 잊었을 것입니다!"

    하드웨어에서 : 최대한 강력합니다. 더 많은 전원 / 메모리 = 빠른 빌드 시간. 여유가 있다면 그룹이 아무리 작아도 최고 수준의 빌드 머신을 얻는 것을 후회하지 않을 것입니다.

    공간 : 충분한 하드 디스크 공간을 확보합니다. 빌드가 시작될 때마다 중간 파일을 삭제하도록 NAnt 스크립트를 만들 수 있으므로 실제 문제는 로그 기록과 이전 응용 프로그램 설치 관리자를 유지하는 것입니다. 디스크 공간을 모니터링하고 경고를 보내는 소프트웨어가 있습니다. 그런 다음 드라이브를 수동으로 정리합니다. 일반적으로 3-4 개월마다 수행해야합니다.

    빌드 알림 : CCNet에 기본 제공되지만 자동화 된 테스트를 추가 단계로 추가하려는 경우이를 시작부터 프로젝트에 빌드하십시오. 프로젝트가 커지면 테스트를 백 피트하기가 매우 어렵습니다. 테스트 프레임 워크에 대한 수많은 정보 (아마도 SO에 관한 많은 정보)가 있으므로 특정 도구의 이름 지정을 연기 할 것입니다.


    예, 나는 큰 :) 아니라 CC.NET와 경험했다
    cwap을

    하드웨어 요구 사항을 제외하고 훌륭한 답변입니다. 그는 야간 빌드를하고 있으므로 컴파일하고 테스트하는 데 몇 시간이 걸리는지 걱정하지 않습니다. 나는 이미 가지고있는 하드웨어에서 VM의 모든 것을 설정하는 것이 좋습니다.
    Ben S

    팁 주셔서 감사합니다. 나는 그것을 정당화 할 때 사용할 것이다.
    mmr

    1
    우리는 C # 및 C ++ 빌드를 위해 NAnt / Subversion / CC.Net과 함께 빌드 머신을 사용하며 다른 프로젝트를 중단하지 않도록 확실히하는 훌륭한 도구입니다. 라이브러리를 변경할 때 다른 프로젝트를 중단해야한다는 두려움이 사라집니다. 어쨌든 모든 것이
    깨지면

    11

    이전 직장에서는 TeamCity 를 사용했습니다 . 사용하기 매우 쉽고 강력합니다. 일부 제한 사항이 있으면 무료로 사용할 수 있습니다. Dime Casts 에 대한 튜토리얼도 있습니다 . 우리가 CruiseControl.NET을 사용하지 않은 이유는 많은 작은 프로젝트가 있었고 CC.NET에서 각 프로젝트를 설정하는 것이 상당히 고통스럽기 때문입니다. TeamCity를 강력히 추천합니다. 오픈 소스를 지향한다면 CC.NET은 약간 더 높은 학습 곡선을 가진 웅대 한 아빠입니다. 예산이 충분하다면 TeamCity를 이용하거나 무료 버전을 확인하십시오.


    10

    어떻게? Carel Lotz의 블로그를 살펴보십시오 .

    왜? 내가 생각할 수있는 몇 가지 이유가 있습니다.

    • 제대로 빌드되면 작동 하는 빌드는 빌드가 녹색 일 때 모든 개발자 컴퓨터에서 빌드 할 수 있음을 의미합니다.
    • 제대로 구현되면 작동하는 빌드는 언제든지 배포 할 수 있음을 의미합니다.
    • 제대로 구현되면 작동하는 빌드는 릴리스 한 것이 무엇이든 소스 제어 시스템으로 넘어 갔음을 의미합니다.
    • 제대로 구현되면 작동하는 빌드는 조기에 자주 통합하여 통합 위험을 줄입니다.

    연속 통합 에 대한 Martin Fowler의 기사 는 최종 텍스트로 남아 있습니다. 한번보세요!


    5

    가장 유리한 주장은 가능한 빨리 빌드가 깨지거나 테스트에 실패했다는 사실을 경고함으로써 개발 프로세스의 비용을 절감한다는 것입니다.

    여러 개발자의 작업을 통합하는 문제는 팀 성장의 주요 위험입니다. 팀이 커질수록 업무를 조정하고 서로의 변경 사항을 엉망으로 만드는 것이 더 어려워집니다. 유일한 해결책은 완료 될 때 작은 작업 단위 (때때로 "이야기"라고 함)를 체크인하여 "일찍 자주 통합"하도록 지시하는 것입니다.

    하루 종일 체크인 할 때마다 빌드 머신을 다시 빌드해야합니다. 크루즈 컨트롤을 사용하면 작업 표시 줄에 빌드가 깨졌을 때 아이콘이 빨간색으로 바뀌거나 대화를 할 수 있습니다.

    그런 다음 이해 관계자 (제품 관리자, QA 직원)에게 공개하도록 선택할 수있는 소스 버전이 레이블 (유일한 빌드 번호로 표시됨) 인 야간 완전 클린 빌드를 수행해야합니다. 이것은 버그가보고 될 때 알려진 빌드 번호에 대한 것입니다 (매우 중요합니다).

    이상적으로는 빌드를 다운로드 할 수있는 내부 사이트가 있어야하며 이전 야간 빌드를 게시하기 위해 클릭 할 수있는 단추가 있어야합니다.


    1
    downvoter에서 이유를 듣는 데 매우 관심이 있습니다!
    Daniel Earwicker 2014 년

    1
    나도 그래요. 질문에 대한 정답입니다. 나는 특히 출판과 버전 관리에 대한 요점을 좋아한다.
    mmr

    5

    그는 mjmarsh가 말한 것에 약간의 기초를두기 위해 노력했습니다.

    • 비주얼 스튜디오. MSBuild는 잘 작동합니다.
    • 아닙니다 .
    • NantContrib . Perforce 작업과 같은 추가 작업이 제공됩니다.
    • CruiseControl.net . 이것은 기본적으로 "빌드 대시 보드"입니다.

    위의 모든 내용 (VS 용으로 저장)은 오픈 소스이므로 추가 라이센스를 보지 않아도됩니다.

    Earwicker가 언급했듯이 일찍 빌드하고 자주 빌드하십시오. 무언가가 깨 졌다는 것을 알면 결과물을 빨리 잡는 데 유용합니다.

    NAnt에는 nunit / nunit2에 대한 작업도 포함되어 있으므로 실제로 장치 테스트를 자동화 할 수 있습니다. 그런 다음 스타일 시트를 결과에 적용하고 CruiseControl.net에서 제공하는 프레임 워크를 사용하여 모든 빌드에 대해 읽기 쉽고 인쇄 가능한 단위 테스트 결과를 얻을 수 있습니다.

    ndoc 작업 에도 동일하게 적용됩니다 . 모든 빌드에 대해 문서를 작성하여 사용 가능하게하십시오.

    exec 태스크를 사용하여 다른 명령을 실행할 수도 있습니다 ( 예 : InstallShield를 사용하여 Windows Installer 생성).


    아이디어는 인간이 실수를하기 때문에 가능한 한 많이 빌드를 자동화하는 것입니다. 선행 시간은 도로를 절약하는 시간입니다. 사람들은 빌드 프로세스를 통해 빌드를 보모 할 필요가 없습니다. 전체 빌드 프로세스를 완전히 자동화 할 때까지 빌드의 모든 단계를 식별하고 각 태스크에 대해 NAnt 스크립트를 작성하고 NAnt 스크립트를 하나씩 빌드하십시오. 그런 다음 모든 빌드를 한 곳에 저장하므로 비교 목적으로 적합합니다. 빌드 380에서 제대로 작동했던 빌드 426에서 문제가 있습니까? 음, 테스트 할 준비가 된 결과물이 있습니다. 잡아서 테스트하십시오.


    나는 ndoc에 대해 잊었다. 문서는 우리가 다루어야 할 완전히 다른 왁스 덩어리입니다.
    mmr

    4
    • 라이센스가 필요하지 않습니다. CruiseControl.net은 무료로 사용할 수 있으며 빌드하려면 .NET SDK 만 필요합니다.
    • 자동화 된 단위 테스트가 없어도 빌드 서버는 릴리스 빌드를위한 제어 된 환경을 계속 제공합니다. 더 이상 "요한은 일반적으로 자신의 컴퓨터를 기반으로하지만 아파서 있습니다.
    • 지금은 Virtual PC 세션에서 설정했습니다.
    • 예. 액세스 가능한 곳에 빌드를 덤프해야합니다. 개발 빌드에는 디버깅이 설정되어 있어야합니다. 릴리스 빌드가 꺼져 있어야합니다.
    • 얼마나 자주 당신에게 달려 있습니다. 올바르게 설정하면 체크인 할 때마다 오버 헤드가 거의 발생하지 않습니다. 단위 테스트를 실시한 경우 (또는 계획하고있는 경우) 좋은 아이디어입니다.
    • 필요한만큼 이정표 및 릴리스를 유지하십시오. 다른 것은 당신이 얼마나 자주 빌드하는지에 달려 있습니다. 버리십시오. 매일? 일주일의 가치를 유지하십시오. 주간? 두 달의 가치를 유지하십시오.

    프로젝트가 클수록 자동화 된 빌드 머신의 이점을 더 많이 볼 수 있습니다.


    3

    그것은 빌드의 건강에 관한 것입니다. 이것이 당신에게 얻는 것은 빌드에서 일어나고 싶은 모든 유형의 것을 설정할 수 있다는 것입니다. 이 중 테스트, 정적 분석 및 프로파일 러를 실행할 수 있습니다. 최근에 응용 프로그램의 해당 부분에서 작업했을 때 문제가 훨씬 빠르게 처리됩니다. 작은 변화를 저지르면 거의 어디에서 파산했는지 알려줍니다. :)

    물론 이것은 모든 체크인 (연속 통합)으로 빌드하도록 설정했다고 가정합니다.

    또한 QA와 Dev를 더 가깝게 만드는 데 도움이 될 수 있습니다. 프로파일 러 및 개발자 팀에 대한 피드백을 향상시키는 다른 도구와 함께 실행할 기능 테스트를 설정할 수 있습니다. 이것은 기능 테스트가 모든 체크인과 함께 실행되는 것을 의미하지는 않지만 (시간이 걸릴 수 있음) 팀 전체에 공통적 인 도구를 사용하여 빌드 / 테스트를 설정합니다. 나는 연기 테스트를 자동화 해왔 기 때문에 우리는 더 밀접하게 협력합니다.


    1

    왜 : 10 년 전 우리는 소프트웨어 개발자로서 n도까지 무언가를 분석하여 문서 (인간 어로 작성)를 '서명'한 다음 코드 작성을 시작했습니다. 우리는 단위 테스트, 문자열 테스트를 한 다음 시스템 테스트를 수행했습니다. 처음으로 시스템 전체를 함께 실행했을 때, 때로는 문서가 서명 된 후 1 주 또는 몇 달이 지났습니다. 그때 우리는 모든 것을 분석 할 때 가졌던 모든 가정과 오해를 밝혀 낼 수밖에 없었습니다.

    지속적인 통합과 아이디어로 인해 완전한 (처음에는 매우 간단한 시스템이지만) 엔드 투 엔드 시스템을 구축 할 수 있습니다. 시간이 지남에 따라 시스템 기능은 직교 적으로 구축됩니다. 완전한 빌드를 할 때마다 시스템 테스트를 조기에 자주 수행합니다. 즉, 버그와 가정을 가능한 한 빨리 수정하여 해결할 수있는 가장 빠른시기에 버그와 가정을 찾아 수정해야합니다.

    방법 : 방법에 대해서는 얼마 전에 블로그를 작성했습니다. [ 여기를 클릭 ]

    8 개가 넘는 게시물은 Windows 환경에서 .NET 솔루션을 위해 Jenkins 서버를 설정하는 방법에 대해 단계별로 진행됩니다.


    1
    이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
    TLama

    이것은 질문에 대한 답변을 제공하지 않습니다. 작성자의 의견을 비판하거나 설명을 요청하려면 게시물 아래에 댓글을 남겨주세요. 언제든지 자신의 게시물 에 댓글 수 있으며 평판 이 충분 하면 게시물댓글 수 있습니다 .
    Danilo Valente

    의견을 바탕으로 의견을 업데이트했습니다.
    앤드류 그레이
    당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
    Licensed under cc by-sa 3.0 with attribution required.