문제

가정 내가 설정 자동 nightly build.무엇이 유물의 빌드해야 하는가?

예를 들어:

  • 입력 소스 코드
  • 출력 바이너리

또한,얼마나 저장,그리고 어디?

당신의 답변을 변경 할 경우 지속적인 통합?

도움이 되었습니까?

해결책

다음은 각 빌드에서 보관하는 데 사용한 유물/정보입니다.

  • 제작중인 스냅 샷의 태그 이름 (태그 및 깨끗한 체크 아웃 수행 ~ 전에 당신은 빌드)
  • 빌드는 그들 자신 또는 해당 버전 번호를 스크립팅합니다 (자체 버전 제어가있는 별도의 프로젝트로 취급하는 경우)
  • 빌드 스크립트의 출력 : 로그 및 최종 제품
  • 환경의 스냅 샷 :
    • 컴파일러 버전
    • 도구 버전을 빌드하십시오
    • 라이브러리 및 DLL/LIBS 버전
    • 데이터베이스 버전 (클라이언트 및 서버)
    • IDE 버전
    • 스크립트 통역사 버전
    • OS 버전
    • 소스 제어 버전 (클라이언트 및 서버)
    • 프로세스에 사용 된 기타 도구 및 기타 모든 도구의 버전 ~할 것 같다 빌드 제품의 내용에 영향을 미칩니다. 나는 일반적 으로이 모든 정보를 쿼리하고 다른 빌드 아티팩트에 저장 해야하는 텍스트 파일에 로그인하는 스크립트 로이 작업을 수행합니다.

"내 빌드/개발 환경을 완전히 파괴한다면 새 빌드 #6547을 다시 만들고 처음으로 얻은 똑같은 결과를 얻을 수 있도록 어떤 정보가 새로운 정보를 만들려면 어떤 정보가 필요합니까?"

귀하의 대답은 각 빌드에서 유지해야 할 것이며 이미 언급 한 것들의 서브 세트 또는 슈퍼 세트가 될 것입니다.

SCM에 모든 것을 저장할 수 있지만 (별도의 저장소를 권장합니다),이 경우 아이템이 감각을 느슨하게 유지 해야하는 시간에 대한 질문에 대한 질문. 또는 빌드 결과 및 아티팩트가있는 폴더를 향한 폴더에 저장하거나 CD/DVD를 태워야합니다. 선택 하든지 백업 사본이 있습니다.

필요한만큼 보관해야합니다. 개발 팀 페이스와 릴리스주기에 의존하는 기간.

그리고 아니, 당신이 지속적인 통합을한다면 그것이 바뀌지 않는다고 생각합니다.

다른 팁

당신은 그것을 저장하기 위해 아무것도 저장해서는 안됩니다. 필요하기 때문에 저장해야합니다 (예 : QA는 야간 빌드를 사용하여 테스트합니다). 어느 시점에서, "얼마나 오래 저장 하는가"는 QA가 원한다.

태그/라벨만큼 소스 코드를 "저장"하지 않을 것입니다. 어떤 소스 컨트롤을 사용하고 있는지 모르겠지만 태깅은 모든 품질 소스 제어 시스템에 대해 사소한 (성능 및 디스크 공간)입니다. 이 바이너리가 필요하지 않으면 빌드에 태그가 지정되면 소스에서 필요할 때 단순히 재 컴파일 할 수 있기 때문에 주변을 갖는 데 도움이되지 않습니다.

대부분의 CI 도구를 사용하면 각각의 성공적인 빌드에 태그를 붙일 수 있습니다. 하루에 100 개 이상의 태그를 쉽게 가질 수 있으므로 일부 시스템의 경우 문제가 될 수 있습니다. 그러한 경우에도 여전히 야간 빌드를 실행하는 것이 좋습니다.

이것은 직접적인 질문에 대한 답변을 잊지 마세요 버전으로 제어나는 밤에 설치 자체입니다.프로젝트 구조의 변화를 변경해야 할 수 있습 빌드 프로세스를 분류하는 이전의 빌드에서는 점이다.

다른 사람들이 언급했듯이 바이너리 외에도 나는 기호 서버 그리고 a 소스 서버 그리고 당신이 올바른 정보를 얻을 수 있도록하십시오. 그것은 엄청나게 디버깅하는 데 도움이 될 것입니다.

우리는 바이너리를 저장하고, 벗겨지고 벗겨 져 있습니다 (따라서 우리는 디버그 기호없이 한 번, 한 번은 정확히 동일한 바이너리를 가지고 있습니다). 또한 디버그 출력을 활성화 한 상태에서 한 번, 한 번은 스트리핑 및 무리가 없으므로 모든 빌드가 4 개의 바이너리를 초래합니다). 빌드는 SVN 개정 번호에 따라 디렉토리에 저장됩니다. 이렇게하면이 개정판을 간단히 확인하여 SVN 저장소에서 소스를 항상 유지할 수 있습니다 (소스가 보관 된 방식).

내가 최근에 배운 놀라운 것 : 감사 할 수있는 환경에 있다면 빌드의 모든 출력, 스크립트 출력, 컴파일러 출력 등을 저장하고 싶을 것입니다.

이것이 바로 컴파일러 설정을 확인하고 단계적으로 계산할 수있는 유일한 방법입니다.

또한, 그들을 저장하는 데 얼마나 걸리고 어디서 저장해야합니까?

컴파일 된 비트가있는 한 빌드가 생산에 가지 않을 것이라는 것을 알 때까지 저장하십시오.

그것들을 저장하는 논리적 인 장소 중 하나는 SCM 시스템입니다. 또 다른 옵션은 Anthillpro 및 ILK와 같이 자동으로 저장하는 도구를 사용하는 것입니다.

우리는 여기서 "내장 된"개발에 가까운 일을하고 있으며, 우리가 저장하는 것을 말할 수 있습니다.

  • SVN 개정 번호 및 타임 스탬프, 그리고 그것이 구축 된 기계와 그에 의해 (빌드 바이너리로 불타는)
  • 전체 빌드 로그, 전체/증분 빌드인지 여부, 흥미로운 (STDERR) 출력이 생성 된 데이터 베이킹 도구, 컴파일 된 파일 목록 및 컴파일러 경고 (텍스트가 매우 잘 압축됨)를 보여줍니다.
  • 실제 바이너리 (1-8 빌드 구성)
  • 링크의 부작용으로 생성 된 파일 : 링커 명령 파일, 주소 맵 및 최종 바이너리 (각각의 CRC 및 크기)와 디버깅 데이터베이스 (.PDB에 대한 CRC 및 크기)에 소개 된 내용을 나타내는 일종의 "매니페스트"파일 동등한)

또한 관심있는 사용자에게 "부작용"파일을 통해 일부 도구를 실행 한 결과를 우편으로 보내드립니다. 우리는 나중에 그것을 재현 할 수 있기 때문에 실제로 이것들을 보관하지 않지만,이 보고서는 다음과 같습니다.

  • 파일 유형 및/또는 디렉토리별로 분류 된 파일 시스템 크기의 총 및 델타
  • 코드 섹션 크기의 총 및 델타 (.Text, .Data, .rodata, .BSS, .Sinit 등)

단위 테스트 또는 기능 테스트 (예 : 연기 테스트)가 실행되면 그 결과는 빌드 로그에 나타납니다.

우리는 아직 아무 것도 버리지 않았습니다. 주어진 대상 빌드는 일반적으로 구성당 ~ 16 또는 32 MIB로 끝나며 상당히 압축 가능합니다.

우리는 접근이 용이하게 쉽게 접근 할 수 있도록 1 주일 동안 바이너리의 압축되지 않은 사본을 보관합니다. 그 후 우리는 가볍게 압축 된 버전 만 유지합니다. 약 한 달에 한 번 우리는 빌드 프로세스가 생성하는 각 .zip을 추출하는 스크립트를 가지고 있으며 한 달 내내 빌드 출력을 함께 7 zip (빌드 당 작은 차이 만 활용).

평균 하루에는 프로젝트 당 12 개 또는 두 개의 빌드가있을 수 있습니다. BuildServer는 약 5 분마다 깨어나 관련 차이와 빌드를 확인합니다. 한 달 동안 대규모 활성 프로젝트에 대한 전체 .7z는 7-10gib 일 수 있지만 확실히 저렴합니다.

대부분의 경우, 우리는 이런 식으로 모든 것을 진단 할 수있었습니다. 때때로 빌드 시스템에 딸꾹질이 있고 파일은 실제로 빌드가 발생할 때 예상되는 개정이 아니지만 일반적으로 로그에 충분한 증거가 있습니다. 때로는 디버깅 데이터베이스 형식을 이해하는 도구를 파고 충돌을 진단하기 위해 몇 가지 주소를 공급해야합니다 (제품에 자동 스택dump가 내장되어 있음). 그러나 일반적으로 필요한 모든 정보가 있습니다.

우리는 아직 .7z 아카이브를 깨뜨릴 필요가 없었습니다. 그러나 우리는 거기에 정보를 가지고 있으며, 유용한 데이터의 일부를 채굴하는 방법에 대한 흥미로운 아이디어가 있습니다.

쉽게 재현 할 수없는 것을 저장하십시오. 나는 FPGA 팀만 도구를 가지고있는 FPGA에서 일하고 디자인의 일부 코어 (라이브러리)는 하나의 기계에서만 컴파일 할 수있는 라이센스가 있습니다. 그래서 우리는 출력 비트 스트림을 저장합니다. 그러나 날짜/시간/버전 스탬프가 아닌 서로를 확인하십시오.

소스 코드 제어 또는 디스크에 체크인으로 저장 하시겠습니까? 소스 코드 제어에 아무것도 저장하지 않습니다. 파일 시스템에서 파생 된 모든 파일을 볼 수 있어야하며 개발자가 사용할 수 있어야합니다. 바이너리, XML 파일에서 생성 된 코드, 메시지 소화 등을 확인하지 마십시오. 별도의 포장 단계는 이러한 최종 제품을 사용할 수있게합니다. 변경 번호가 있으므로 필요한 경우 빌드를 재현 할 수 있습니다. 물론 빌드를 수행하는 데 필요한 모든 것이 트리에 완전히 있으며 동기화를 통해 모든 빌드에 사용할 수 있습니다.

제작에 들어가거나 다른 팀 (QA 그룹과 같은 다른 팀)이 사용할 수있는 한 바이너리를 구축 할 것입니다. 일단 무언가가 생산을 떠나면, 당신이하는 일은 크게 다를 수 있습니다. 많은 팀의 경우, 그들은 가장 최근의 이전 빌드를 (롤백을 위해) 유지하고 그렇지 않으면 빌드를 버릴 것입니다.

다른 사람들은 7 년 동안 생산에 들어간 모든 것을 유지하기위한 규제 요구 사항이 있습니다 (은행). 귀하가 제품 회사 인 경우 기술 지원 담당자가 동일한 버전을 설치하려는 경우 고객이 설치 한 바이너리를 유지합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top