문제

내 개발 서버에 CruiseControl.NET 버전 1.4가 설정되어 있습니다.개발자가 코드를 체크인할 때마다 컴파일이 이루어집니다.

이제 우리는 테스터에게 애플리케이션을 제공할 수 있는 단계에 이르렀습니다.테스터가 응용 프로그램을 테스트할 때 최신 빌드가 있다는 생각으로 ClickOnce를 사용하여 응용 프로그램을 배포하려고 합니다.

CruiseControl.NET에서는 그런 일이 발생하도록 하는 방법을 찾을 수 없습니다.우리는 MSBUILD를 사용하여 빌드를 수행하고 있습니다.

도움이 되었습니까?

해결책 2

모든 도움에 감사드립니다.우리가 구현한 최종 솔루션은 모든 답변에서 조금씩 가져왔습니다.

간단한 배치 파일을 사용하면 여러 환경에서 작업하는 것이 더 쉬워졌습니다.이것이 최선의 방법이라고 제안하는 것은 아니지만 주어진 시나리오와 요구 사항에 따르면 이 방법은 잘 작동했습니다."Project"에 프로젝트 이름을 추가하고 "Environment"에 환경 이름(개발, 테스트, 스테이지, 프로덕션 등)을 추가합니다.

다음은 "ccnet.config" 파일의 작업 영역입니다.

<!-- override settings  -->
<exec>
    <executable>F:\Source\Project\Environment\CruiseControl\CopySettings.bat</executable>
</exec>

<!-- compile -->
<msbuild>
    <executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
    <workingDirectory>F:\Source\Project\Environment\</workingDirectory>
    <projectFile>Project.sln</projectFile>
    <buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs>
    <targets>Rebuild</targets>
    <timeout>0</timeout>
    <logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>

<!-- clickonce publish  -->
<exec>
    <executable>F:\Source\Project\Environment\CruiseControl\Publish.bat</executable>
</exec>

가장 먼저 눈에 띄는 것은 CopySettings.bat가 실행된다는 것입니다.이는 데이터베이스 연결과 같은 환경에 대한 특정 설정을 복사합니다.

다음으로 표준 MSBUILD 작업이 실행됩니다.모든 컴파일 오류는 여기에서 포착되어 정상적으로 처리됩니다.

마지막으로 실행할 것은 Publish.bat입니다.이는 실제로 명령줄에서 MSBUILD "재구축"을 다시 수행하고 CruiseControl의 매개변수가 자동으로 전달되어 빌드됩니다.다음으로 "게시" 대상에 대해 MSBUILD가 호출됩니다.다시 빌드가 실행될 때 정확히 동일한 매개변수가 게시에 제공됩니다.이렇게 하면 빌드 번호가 동기화된 상태로 유지됩니다.또한 실행 파일의 이름이 다르게 지정되었습니다(예:- ProjectDev 및 ProjectTest).우리는 결국 다른 버전 번호와 이름을 갖게 되며 이를 통해 ClickOnce가 해당 작업을 수행할 수 있습니다.

Publish.bat의 마지막 부분은 실제 파일을 새 홈에 복사합니다.모든 사용자가 네트워크에 있기 때문에 게시.htm을 사용하지 않고 데스크톱에 있는 매니페스트 파일에 대한 바로가기를 제공하기만 하면 사용자가 클릭하여 항상 다음과 같은 버전 번호로 올바른 실행 파일을 실행할 수 있습니다. 크루즈 컨트롤.

여기 CopySettings.bat가 있습니다.

XCOPY "F:\Source\Project\Environment\CruiseControl\Project\app.config" "F:\Source\Project\Environment\Project" /Y /I /R
XCOPY "F:\Source\Project\Environment\CruiseControl\Project\My Project\Settings.Designer.vb" "F:\Source\Project\Environment\Project\My Project" /Y /I /R
XCOPY "F:\Source\Project\Environment\CruiseControl\Project\My Project\Settings.settings" "F:\Source\Project\Environment\Project\My Project" /Y /I /R

마지막으로 Publish.bat가 있습니다.

C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:rebuild "F:\Source\Project\Environment\Project\Project.vbproj" /property:ApplicationRevision=%CCNetLabel% /property:AssemblyName="ProjectEnvironment" /property:PublishUrl="\\Server\bin\Project\Environment\\"
C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:publish "F:\Source\Project\Environment\Project\Project.vbproj" /property:ApplicationVersion="1.0.0.%CCNetLabel%" /property:AssemblyVersion="1.0.0.%CCNetLabel%" /property:AssemblyName="ProjectEnvironment" 

XCOPY "F:\Source\Project\Environment\Project\bin\Debug\app.publish" "F:\Binary\Project\Environment" /Y /I
XCOPY "F:\Source\Project\Environment\Project\bin\Debug\app.publish\Application Files" "F:\Binary\Project\Environment\Application Files" /Y /I /S

내가 말했듯이 CruiseControl 및 MSBUILD 개발자가 의도한 대로 작동하지는 않았지만 작동합니다.어제 이 작업을 수행해야 한다면 이것이 바로 여러분이 찾고 있는 솔루션일 수 있습니다.행운을 빌어요!

다른 팁

우리는 이 작업을 완료했으며 시작하기 위한 몇 가지 지침을 제공할 수 있습니다.

당신이 알아야 할 2가지 사항:

  • MSBuild는 필요한 배포 파일을 생성할 수 있습니다.
  • MSBuild는 파일을 FTP 또는 UNC 공유에 배포하지 않습니다.이를 위해서는 별도의 단계가 필요합니다.

MSBuild를 사용하여 ClickOnce 매니페스트를 생성하려면 다음 명령을 실행해야 합니다.

msbuild /target:publish /p:Configuration=Release /p:Platform=AnyCPU; "c:\yourProject.csproj"

그러면 MSBuild가 프로젝트를 빌드하고 내부에 ClickOnce 배포 파일을 생성하도록 지시합니다. bin elease\YourProject.publish 예배 규칙서.

남은 것은 해당 파일을 FTP/UNC 공유/어디에나 복사하는 것뿐입니다. 그러면 모든 설정이 완료됩니다.

CruiseControl.NET에 해당 MSBuild 매개변수를 사용하여 빌드하도록 지시할 수 있습니다.

그런 다음 생성된 배포 파일을 가져와 FTP 또는 UNC 공유에 복사하려면 CruiseControl.NET 빌드 작업이 필요합니다.이를 위해 사용자 정의된 작은 C# 콘솔 프로그램을 사용하지만 Powershell 스크립트를 쉽게 사용할 수도 있습니다.

작년에 제가 작업 중이던 ClickOnce 프로젝트를 위해 이 작업을 수행했던 기억이 납니다.알아내는 데 영원히 걸렸던 것을 기억하지만 여기에 있습니다.제가 스크립트에서 수행하기를 원했던 것은 우리의 개발 환경을 가리키는 다른 설치 프로그램과 prod를 위한 다른 설치 프로그램을 생성하는 것이었습니다.뿐만 아니라 기존 클라이언트가 clickOnce의 핵심인 새 버전이 있다는 것을 '인식'할 수 있도록 올바른 버전 관리 정보를 삽입하는 데 필요했습니다.이 스크립트에서는 자신의 서버 이름 등으로 바꿔야 합니다.비결은 게시.htm 및 project.publish 파일을 저장하고 CC.NET에서 제공하는 버전을 기반으로 새 버전 번호를 삽입하는 것입니다.

내 빌드 스크립트는 다음과 같습니다.

<target name="deployProd">
  <exec program="<framework_dir>\msbuild.exe" commandline="<project>/<project>.csproj /property:Configuration=PublishProd /property:ApplicationVersion=${build.label}.*;PublishUrl=\\<prod_location>\binups$\;InstallUrl=\\<prod_location>\binups$\;UpdateUrl=\\<prod_location>\binups$\;BootstrapperComponentsUrl=\\<prod_location>\prereqs$\ /target:publish"/>

  <copy todir="<project>\bin\PublishProd\<project>.publish">

    <fileset basedir=".">
      <include name="publish.htm"/>
    </fileset>

    <filterchain>
      <replacetokens>
        <token key="CURRENT_VERSION" value="${build.label}"/>
      </replacetokens>
     </filterchain>
  </copy>

</target>

도움이 되었기를 바랍니다

CCNET.config msbuild 작업에서 ${CCNetLabel}을 전달할 수 있다면 큰 개선이 될 것입니다.

msbuild에서 ClickOnce 매니페스트 생성 작업을 사용하려고 합니다.과정이 좀 길기 때문에 링크 몇 개만 알려드리겠습니다.여기는 msdn 참조 그리고 샘플 기사 시작하시기 바랍니다.

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