2010-01-05 13 views
13

Estoy intentando configurar TeamCity 5.0 para ejecutar el objetivo "Publicar" en uno de mis proyectos.TeamCity: problema con Publicar en el sitio de ASP.net

Cuando me carga la solución en VS 2008 y haga clic en Publicar en el proyecto de la página web se está construyendo muy bien - los archivos en el servidor que aparece por sí mismos, etc. Sin embargo, cuando ejecuto el archivo a través de GLC corredor TeamCity Sln2008 la TeamCity regresa:

[Proyecto "Portal.csproj" (Publish target (s)):] Omitiendo el proyecto no publicable.

¿Alguien ha tenido el mismo problema?

Filip

+0

¿Qué tipo de proyecto estás tratando de publicar? – Gage

Respuesta

4

Puede crear su propio archivo de compilación simple. Por ejemplo:

<Project DefaultTargets="Build" ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/> 

    <PropertyGroup> 
     <PackageFolder>C:\Builds\AppServer\Actual</PackageFolder> 
    </PropertyGroup> 

    <Target Name="Build" DependsOnTargets="BeforeBuild"> 
     <MSBuild Projects="TeamWork-AppServer.sln" 
       Targets="Rebuild" 
       Properties="Configuration=Debug;OutDir=$(PackageFolder)\;"></MSBuild> 
    </Target> 
</Project> 

O puede usar VS 2008 Web Deployment Project. Aquí hay un gran turtorial.

+0

Esto es .NET 4.0 y Visual Studio 2010, ¿los proyectos de implementación web aún están disponibles para las nuevas versiones de las herramientas? Estaba buscando esos pero no pude encontrarlos. De todos modos, ahora tengo dos sugerencias para usar MSBuild para hacer esto, así que definitivamente voy a ver eso. –

+1

Sí, hay una versión para .NET 4. Aquí está http://blogs.msdn.com/b/webdevtools/archive/2010/05/26/visual-studio-2010-web-deployment-projects-rtw -disponible-ahora.aspx. Y tal vez tenga este http://microsoftpdc.com/Sessions/FT56 –

+0

Nota: tendrá que instalar las tareas de la comunidad MSBuild en su servidor desde http: //msbuildtasks.tigris .org/ –

2

que tienen este mismo problema, esto es lo que he intentado:

Tengo un archivo de solución en Visual Studio 2010, comprometida con un repositorio de Mercurial.

He configurado un servidor FTP para el directorio raíz del sitio para publicar, y la publicación desde Visual Studio 2010 localmente funciona muy bien, conecta y carga todo como se espera, y el sitio web funciona.

Ahora, quería automatizar esto en cada inserción en el repositorio central de Mercurial, y como estoy usando TeamCity, descubrí que el campo para especificar el objetivo de la compilación, generalmente "Reconstruir" también puede tomar "Publicar ", entonces especifiqué" Rebuild, Publish ", según la documentación y la ayuda.

He verificado que después de publicar en Visual Studio y confirmar nuevos archivos, un archivo llamado ProjectName.Publish.xml está acompañando a mi archivo ProjectName.csproj, y este archivo se baja al directorio del servidor cuando se crea TeamCity.

Sin embargo, ninguna publicación se realiza, y cuando puedo comprobar el registro de generación, que dice:

 
[19:01:02]: [Project "Test.sln" (Rebuild;Publish target(s)):] Project "Test.UI.Web.csproj" (Publish target(s)): 
[19:01:02]: [Project "Test.UI.Web.csproj" (Publish target(s)):] Skipping unpublishable project. 

Exactamente como se dice aquí la cuestión.

Tenga en cuenta que este es un sitio de desarrollo, que se publica solo para que podamos permitir que más personas prueben los cambios, por lo que no se discuta si esta es realmente una buena idea o no.

Nota: No me importa de qué manera se publican los archivos, solo necesito el paso de creación de TeamCity para hacerlo, así que si alguien tiene una solución similar a MSBuild que simplemente deja de lado a TeamCity, entonces lo haría estar satisfecho

+0

Comencé una recompensa por esta pregunta para llamar la atención. –

+0

Hacemos esto con nuestras compilaciones. He publicado una respuesta sobre cómo hacer que la implementación funcione al llamar a msbuild en un proyecto web, pero si está interesado, puedo entrar en más detalles sobre nuestra cadena de compilación. – Bronumski

2

Ha intentado ejecutar Visual Studio directamente, en lugar de depender de MSBuild para publicar el proyecto directamente. MSBuild no puede ejecutar ciertos tipos de proyectos. Tuve un problema similar al crear MSI desde Team City. Estoy adivinando la configuración exacta de la línea de comandos para esto, ya que no conozco su configuración exacta.

<PropertyGroup>  
    <buildconfiguration>Release</buildconfiguration> 
    <DevEnv>C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.com</DevEnv> 
</PropertyGroup> 
<Exec Command="%22$(DevEnv)%22 /build $(buildconfiguration) $(teamcity_build_checkoutDir)\Test.sln /project Test.UI.Web.csproj"/> 

Si está utilizando el corredor solución Equipo de la Ciudad como su corredor de construcción, que tendrá que cambiar a MSBuild.

Si desea permanecer con el corredor de Team City, siempre puede intentar agregar un proyecto a su solución que será la última construida (o hacerlo en el proyecto que actualmente se construye por última vez) y hacer el truco de desove como una línea de comando de post-construcción en el proyecto.

+0

Haré una grieta en esto esta noche y veré cómo funciona. Si logro hacerlo funcionar, publicaré mis pasos exactos relacionados con TeamCity, para referencia futura. Inicialmente, cuando leí tu publicación, temía que luego perdería la capacidad de ejecutar automáticamente pruebas de unidad y cobertura de código como parte de la configuración de compilación en TeamCity, pero cambiar a MSBuild no elimina esas opciones.Creo que sí en una versión anterior, quizás es por eso que no he pensado en experimentar más con MSBuild. De todos modos, voy a probar esto. Supongo que necesito asegurarme de que esto solo se ejecute en TeamCity, y no localmente. –

+0

Tener Visual Studio o cualquier otra aplicación de desarrollo instalada en un agente de compilación puede generar muchos problemas. Usted termina con ensamblajes en el GAC y otros artefactos que normalmente no se instalarían en un entorno objetivo. Esto da como resultado pruebas que pasan al agente de compilación pero su aplicación falla en el entorno de destino debido a la falta de dependencias. Si tu agente de construcción estaba limpio, esto se recogió antes. Aunque siempre hay excepciones, debe mantener su entorno de construcción lo más limpio posible y mantener todo lo relacionado con la compilación en el control de código fuente. – Bronumski

+0

Soy consciente de ese problema. La forma en que resolvemos esto en nuestro entorno es a través de un agente limpio de "compilación" que utiliza msbuild para compilar. Esa máquina también ejecuta todas nuestras pruebas. La construcción de MSI, utilizando el análisis de código, se realiza en un agente de compilación diferente con VS.NET durante un paso de compilación posterior. Eso debería atrapar la mayoría de los problemas. Como salvaguarda final, puede tener algunas pruebas de humo automatizadas simples que utilizan la versión que proviene del último paso. Nada de esto sería necesario si parte de esta funcionalidad esencial estuviera en MSbuild en lugar de VS.NET. Si todavía es una preocupación importante, cambie las herramientas. – Frederik

1

Puede TeamCity publicar un proyecto Web utilizando el corredor sln2008 acumulación Can TeamCity publish a Web project using the sln2008 build runner?

Qué tipo de proyecto que está intentando publicar?

http://social.msdn.microsoft.com/forums/en-US/msbuild/thread/7ec0d942-6354-41c3-9c97-7e7d1f461c29 Tomado de enlace anterior:

What I discovered is that "Shared-addins" are not publishable 
and are distinct and different from document and application level 
VSTO addins, which are deployable. 
    When I rebuilt my application as an application level 
VSTO addin, the publish option was available. 

http://www.automise.com/Default.aspx?tabid=53&aft=9813 tomada desde arriba enlace:

 Assuming you're using Visual Studio 2008, we're unable to execute the web site 
    publish feature from FinalBuilder as it's partially implemented by the VS IDE. 
    You'll need to use to the MSBuild action to compile the application and then 
    use one of the other actions (FTP, File Copy, etc) in FinalBuilder to perform 
    the deployment. Visual Studio 2010 has fixed this problem by performing the 
    entire publish using MSBuild, see this post for more info: 
http://www.finalbuilder.com/forums....&afv=topic 

Dos hilos que podría ayudar a

http://devnet.jetbrains.net/thread/280420;jsessionid=5E8948AE810FFFF251996D85E7EB3FE3

Visual Studio. Publish project from command line

3

Si se trata de un proyecto web, puede utilizar Microsoft.WebApplication.targets. Si no ha instalado el SDK de Windows en el agente de compilación tendrá que copiar el archivo de objetivos en su control de código fuente y hacer referencia a ella desde su proyecto web mediante la adición:

<Import Project="{path to your tools}\Microsoft.WebApplication.targets" /> 

Puede encontrar el archivo aquí los objetivos (dependiendo su sistema operativo):

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v9.0\WebApplications 

Ahora sólo tiene que actualizar su tarea msbuild hacer referencia a los objetivos correctos:

<MSBuild Projects="{path to your web project file}" 
     Targets="Build;ResolveReferences;_CopyWebApplication" 
     Properties="Configuration=Release;Architecture=Any;WebProjectOutputDir={your web root};OutDir={your web root}\bin\" /> 
3

Así es como he modificado el archivo .csproj para un ASP Proyecto .NET MVC para implementar a través de TeamCity 5.1.2. En el archivo .csproj, sustituir el objetivo AfterBuild con este XML (si ya hay comandos en su AfterBuild existente, tendrá que unirlos en estos objetivos):

<PropertyGroup> 
    <DeployTarget>0</DeployTarget> 
    <PublishTarget>0</PublishTarget> 
    <PublishFolder>..\Deployment\YourWebsiteName</PublishFolder> 
</PropertyGroup> 
<Target Name="PublishProperties"> 
    <CreateProperty Value="$(PublishFolder)"> 
    <Output TaskParameter="Value" PropertyName="WebProjectOutputDir"/> 
    </CreateProperty> 
    <CreateProperty Value="$(PublishFolder)\bin\"> 
    <Output TaskParameter="Value" PropertyName="OutDir"/> 
    </CreateProperty> 
</Target> 
<Target Name="WebPublish" DependsOnTargets="BeforeBuild;PublishProperties"> 
    <RemoveDir Directories="$(PublishFolder)" 
      ContinueOnError="true" /> 
    <CallTarget Targets="ResolveReferences;_CopyWebApplication" /> 
</Target> 
<Target Name="Deploy" DependsOnTargets="WebPublish"> 
    <CreateProperty Value="Path\To\Your\Server" Condition="$(DeployFolder) == ''"> 
    <Output TaskParameter="Value" PropertyName="DeployFolder"/> 
    </CreateProperty> 
    <RemoveDir Directories="$(DeployFolder)" Condition="$(CleanDeploy) == 1" /> 
    <ItemGroup> 
    <DeploymentFiles Include="$(PublishFolder)\**\*.*" /> 
    </ItemGroup> 
    <Copy SourceFiles="@(DeploymentFiles)" 
     DestinationFolder="$(DeployFolder)\%(RecursiveDir)" /> 
</Target> 
<Target Name="AfterBuild"> 
    <CallTarget Targets="WebPublish" Condition="$(PublishTarget) == 1" /> 
    <CallTarget Targets="Deploy" Condition="$(DeployTarget) == 1" /> 
</Target> 

Este script utiliza el $ (PublishTarget) y $ (DeployTarget) propiedades para desencadenar pasos adicionales después de que se construye su proyecto. El PropertyGroup al principio establece los valores predeterminados en 0, por lo que los objetivos adicionales no se ejecutan. Puede anular el valor predeterminado en TeamCity yendo a la página de Variables de entorno y propiedades de la configuración de compilación y agregando los nombres de las propiedades del sistema "PublishTarget" y "DeployTarget" y estableciendo su valor en 1.

El objetivo de publicación contiene la mayor parte del magia. Esto realiza una llamada al objetivo _CopyWebApplication de Visual Studio para generar el sitio web en PublishFolder. De forma predeterminada, la carpeta de publicación es ".. \ Deployment \ YourWebsiteName" en relación con el archivo del proyecto, pero esto también se puede anular con una propiedad del sistema. El objetivo de implementación toma los archivos generados por el objetivo de publicación y los copia en DeployFolder. DeployFolder se puede configurar con una propiedad del sistema en TeamCity o puede reemplazar la ruta "Path \ To \ Your \ Server" en el destino de implementación.

También puede omitir el paso adicional Implementar simplemente configurando PublishFolder en el destino de despliegue que desee.Este script depende de los archivos "Microsoft.WebApplication.Build.Tasks.Dll" y "Microsoft.WebApplication.targets" instalados por Visual Studio, pero puede simplemente copiar los archivos de su estación de trabajo del desarrollador al servidor de compilación. La ubicación predeterminada es "C: \ Archivos de programa \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications".

1

Para cualquier persona que utilice Proyectos de aplicaciones web en VS2010, logré que TeamCity empaquete los entregables y luego implemente el paquete Web después de construir con éxito la solución.
Con un pequeño ajuste, esto tuvo el mismo efecto que presionar el botón 'Publicar' en VS.

Mi solución tiene un puñado de proyectos, 1 de los cuales es un proyecto de aplicación web ASP.NET MVC. Construyo la solución, empaqueté el proyecto de la aplicación web y distribuí el paquete en 3 pasos. No he encontrado una manera (mejor | más corta | más simple | más elegante) de hacer esto.

No tengo VS instalado en mi servidor de TeamCity, así que necesitaba tomar C: \ Archivos de programa \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web y C: \ Archivos de programa \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web Applications y ponerlos a ambos en el mismo lugar en el servidor de TeamCity (el segundo depende del primero). Si está trabajando con máquinas x64, las tomaré tanto de Archivos de programa (x86) como de Archivos de programa. También es necesario tener instalado Web Deploy en su máquina y (creo) Servicio de administración de IIS (es decir, algo que escucha en https://yourservername:8172/MsDeploy.axd)

Hay 3 pasos de generación:

  1. Visusal Estudio (SLN) , Objetivo = reconstruir, configuración = depuración
  2. MSBuild WebProject.csproj, Objetivos = paquete de comandos =/p: PackageLocation =% teamcity.build.checkoutDir% \ Debug.zip/p: Configuración = depuración
  3. de comandos, Ejecutable =% teamcity.build.checkoutDir% \ Debug.deploy.cmd , Parámetros = /Y "-setParam: 'sitio web predeterminado/PreCreatedAppInIis' 'web de IIS nombre de aplicación' ="

En el último paso, 'IIS web Application Name' es un nombre de parámetro real, no lo cambies Su valor puede ser algo así como 'Sitio web predeterminado' o lo que sea que haya llamado su sitio web en IIS y/o puede ser una ruta de acceso de aplicación IIS debajo de él. Si la aplicación no existe, puede encontrarse con errores sobre el grupo de aplicaciones que no está configurado correctamente para alojar la aplicación. En lugar de investigarlo, acabo de crear una aplicación en el grupo de aplicaciones apropiado. En mi caso, mi objetivo es ASP.NET 4.0 x64, donde el grupo de aplicaciones predeterminado es ASP.NET 2.0 x64.

+1

Estoy recibiendo fallas en el paso 2. [12:19:40]: [CopyAllFilesToSingleFolderForPackage] CopyPipelineFiles (1s) [12:19:41]: [CopyPipelineFiles] C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web .Publishing.targets (1966, 5): Error al copiar el archivo bin \ MyGeneration.dOOdads.xml en obj \ Debug \ Package \ PackageTmp \ bin \ MyGeneration.dOOdads.xml. No se pudo encontrar el archivo 'bin \ MyGeneration.dOOdads.xml'. [12:19:41]: [Paso 2/2] El paso MSBuild falló. Cualquier idea sobre cómo solucionar esto – sam

+0

Compruebe el directorio de salida en sus proyectos. Cambio las propiedades de mi proyecto para que la salida de compilación vaya a bin/en lugar de bin/debug y bin/release. Vea si puede encontrar los archivos en Explorer. El segundo paso de CommandLine podría necesitar cambiar a% teamcity.build.checkoutDir% \ Debug \ Debug.zip o algo parecido. – scottt732

+0

Si es posible, puede dar una sintaxis clara del paso 3 ya que estoy obteniendo un error al ejecutar el comando, ya que dice 'G: \ test \ Debug.deploy.cmd' no se reconoce como un comando interno o externo. Por favor, ayuda – sam

Cuestiones relacionadas