매번 새로 결제할 때 내 프로젝트를 컴파일할 수 있는 몇 가지 팁은 무엇입니까?
-
22-07-2019 - |
문제
인정하고 싶은 것보다 프로젝트를 처음 접하는 사람들이 체크아웃을 해보니 다양한 리소스, DLL, 설정이 누락된 경우가 많았습니다.나는 새로운 체크아웃에서처럼 내 프로젝트 편집을 원활하게 하는 적절한 습관을 갖고 싶습니다.
버전 관리에서 새로 체크아웃할 때 컴파일 문제가 발생하지 않도록 프로젝트를 구성하는 방법에 대한 팁이나 제안 사항은 무엇입니까?
소스 제어에 필요한 모든 dll 참조가 포함된 "리소스" 폴더를 프로젝트에 유지하기 시작했습니다.다른 사람이 몇 가지 제안을 할 수 있습니까?
해결책
당신이 시각적 스튜디오 환경에 있다고 가정하면, 당신이 유용한 것을 찾을 수있는 몇 가지가 있습니다. 물론 우리는 전복을 사용하지만 모든 VCS 도구를 사용해야한다는 점에 유의하십시오.
- 버전 제어에 모두 (또는 가능한 많은) 종속성을 배치하고 프로젝트에서이를 참조하십시오. 우리는이를 관리하기 위해 전복 외부를 사용합니다.
- 버전 제어 표준 출력 디렉토리 (빈, OBJ), 즉 사용 SVN : 무시
- 마찬가지로 버전 제어 사용자 항목을 무시하십시오 ( *.user, *.suo)
- 또한 구성 파일 (app | web.config)을 제어하지 말고 대신 app.default.config를 작성하고 이전 프로젝트 에서이 파일을 app.config에 복사하십시오. 이를 통해 REGEX 및 토큰을 사용하여 개발자 또는 빌드 서버마다 컴파일을 설정하여 공상을 얻을 수 있으며 CI 빌드의 기존 App.Config 파일을 삭제하여 매번 깨끗한 빌드를 보장 할 수 있습니다. 이를 통해 개발자는 준비가 될 때까지 다른 모든 사람들을 방해하지 않고 구성으로 구성 할 수 있습니다. app.default.config.
- 버전은 다른 모든 것을 제어합니다 :)
- 컴파일의 결과로 버전 제어 바이너리 (MSI, DLL 출력 등)가 필요한 경우 애프터 빌드 대상 프로젝트 (WIXPROJ 등)에서 출력을 버전 제어하에있는 다른 디렉토리에 복사하십시오. Subversion을 사용하는 한 가지 팁은 SVN : Externals Directory를 추가/커밋 할 수 있다는 것입니다.이 디렉토리는 라이브러리 등을 푸시하여 참조하는 프로젝트를 제공 할 수 있습니다.
최종 팁 - 깨끗한 체크 아웃을하고 성공적인 편집을 한 후에는 작업 사본에 수정이 있는지 확인하십시오 (예 : TortoisesVN-> 수정 사항을 확인하십시오. 변경 사항이 감지되면 이러한 파일을 무시해야 할 것입니다.
다른 팁
사용되지 않는 이전 컴퓨터를 찾고 자동 "롤링 빌드"를 위해 설정하십시오.
- 누군가가 변경 사항을 확인할 때까지 기다리십시오
- 모든 파일의 최신 버전으로 업데이트됩니다.
- 모든 비 소스 제어 파일 정리 (
make clean
충분하지 않습니다 - 잔해를 스캔하고 제거하십시오) - 짓다.
- 단위 테스트를 실행하십시오.
- 하루에 한 번, 성공적인 달리기에서 바이너리를 구하십시오. 그것을 오늘의 "공식 빌드"라고 부릅니다.
빌드 또는 테스트가 실패하면 오류가있는 이메일을 보내십시오. #2에서 선택된 변경 사항 목록을 포함하십시오.
실제로 기계를 찾을 수 없다면 가상 머신에서 수행하십시오.
도구와 같은 도구 nmaven 의존성 문제를 도울 수 있습니다 ( Java Maven 정보를위한 문서 ....)
연속 통합 도구와 같은 크루즈 컨트롤 각 체크인 후 반복적으로 체크 아웃하고 신청서를 작성하여 빌드를 깨뜨리는 체크인을 경고 할 수 있습니다. 또한 단위 테스트를 실행할 수 있으므로 체크인으로 인한 회귀에도 경고합니다. .
다른 사람이 제안을 할 수 있습니까?
- 빌드해야 할 파일을 한 곳 (하나의 디렉토리 및 하위 디렉토리)으로 유지하십시오 ... 대부분의 버전 제어 시스템은 이것을 "작업 디렉토리"라고 부릅니다.
- 버전 제어 소프트웨어에는 작업 디렉토리의 내용과 버전 컨트롤의 차이점을 나열하는 명령이 있습니다.
- 버전 제어 소프트웨어를 조정하여 (2 단계로 표시된 목록에서) 저장하지 않으려는 유형의 파일 ... 예를 들어 소스 코드 만 저장하고 제외 할 수 있습니다.
*.obj
그리고 ...이 파일 유형을 제외하면 2 단계를 실행할 때 차이 목록은 저장하려고하지 않는 파일로 혼잡하지 않음을 의미합니다. - 자동으로 체크 아웃 및 구축을하는 빌드 머신을 고려하십시오 (그리고 '빌드가 깨 졌을 때 이메일을 보내주십시오).
데비안 리눅스에는 정말 멋진 도구가 있습니다 pbuilder
, 새로 설치된 시스템의 이미지를 생성 한 다음 코드를 작성하려고 시도합니다. 그것은 데비안 패키지 시스템에서만 작동하지만 아이디어를 훔칠 수 있습니다.
자동화 Chrooted 환경 또는 새로운 설치처럼 보이는 가상 머신에서 구축됩니다. 빌드 스크립트가 DLL 등을 설치합니다. 또는 구성 스크립트는 누락 된 종속성을 열거합니다 (모두 첫 번째 의존성이 아니라 모두).
오전 1시이고 나는 일관되지 않은 소리를 내고 있지만 두 가지 아이디어는 중심입니다.
빈 시스템을 모방 할 수있는 가상 머신 또는 chroot 디렉토리가 있어야합니다. 요즘 가상 머신이 가장 쉽습니다.
가상 머신을 자동으로 확인하고 빌드 할 때까지 빌드 시스템을 조정하거나 누락 된 내용에 대해 불평합니다.
그 시점에서 당신은 프로세스를 자동화 된 야간 빌드의 일부로 만들 수 있으며, 당신은 행복한 야영자가 될 것입니다 :-)
모든 리소스/DLL/설정은 소스 코드와 함께 버전 제어에 체크인되어야 합니다.
소스 코드와 동일하게 레이블이 지정되고 처리되어야 합니다. 이를 통해 이러한 리소스를 소스와 연관시키고 소스 코드/리소스/설정을 단일 엔터티로 처리할 수 있습니다.
우리 회사에서는 Rational ClearCase를 사용합니다. 모든 것 생성된 소스 코드 파일(예:MIDL 컴파일러에서 생성된 .cpp 및 .h 파일).이로 인해 대부분의 빌드가 상당히 원활하게 진행됩니다.
또한 종속성이 제대로 설정되었는지 확인해야 합니다. 그러면 소스 파일이 변경되면 모든 종속 라이브러리가 다시 빌드됩니다.
모든 체크인 전에 상담하는 포괄적 인 체크리스트를 구축 할 수 있지만, 이는 시간이 소요되고 오류가 발생하기 쉬운 일입니다 (특히 여러 개발자에서 모든 사람이 매번 점검 목록을 따라야 할 성격 특성이있는 것은 아닙니다).
대신 간단한 연속 통합 서버를 설정하십시오. cruisecontrol.net 오픈 소스입니다. TeamCity JetBrains는 무료입니다 - 체크인이 완료 될 때마다 빌드가 작동하는 경우.
이런 식으로, 당신은 확인 목록을 따랐기 때문에 일이 효과가있는 것보다는 확실히 알고 있습니다.
SCONS는 크로스 플랫폼을 작동시키고 종속성을 관리하는 데 도움이되는 또 다른 도구입니다. GNU Make와 유사하게 "Scons 파일/스크립트"가 있으며 Python을 사용한다는 사실은 많은 유연성을 제공합니다.
(나는 스콘과 할 일이 없다. 우리는 그것을 사용한다)