0

I have a multi-project .NET solution that I'm trying to set-up with TeamCity (TC) for CI and Octopus Deploy (OD) for CD.

I originally set-up TC to pull the latest from SVC, build the solution and deploy it as a .zip on the Dev server, but I've been having issues trying to deploy the solution to IIS with OP. I was informed that I should instead have TC take the solution and create multiple packages from it for OP to pick-up. I currently don't know how to do this.

I have the following build steps:

Current build steps set in TC

And I have this in my General Settings Publish Artifact settings:

General Settings Publish Artifact settings

Visual Studio solution set-up (Blue shows the projects that make up the entire application we want to deploy. Green boxed will be the separate packages, BLL, Services and Repository because of project dependency get rolled up into the API project.):

Solution loaded in Visual Studio

I have manually deployed the solution in IIS, below is how it needs to deploy in IIS:

Manually deployed IIS setup

The root site is a .NET project using MVC that communicates, hubs is a Signal-R project and API has the repository project and services project under it. So essentially The root website is a client, it communicates can only see API and hubs and any communication to the repository project would go through the API project first, it's supposed to be using a service-orientated architecture.

The goal is that TC should spit out 3 packages, one for the root website, one for the Signal-R project and one for the API which holds several projects but all projects are entirely in a single solution and this isn't something that I can get around for the time being. Once TC can do that I will need to set-up OD to deploy each of those packages to their required locations (which should hopefully be pretty simple).

Any information/assistance with this is greatly appreciated as I do not have a Dev-Ops background and this is the first time I've had to set-up this kind of a project with TeamCity.

Kind regards.

1

So you need to create packages for each of the three sites so that you can deploy each one individually.

The first step is to create a .nuspec file for each of the IIS websites you want to package:

  1. Install OctoPack and read the entire article
  2. Create three empty text files next to the .csproj, give it the same base filename as the .csproj, thus if it is MyApp.API.csproj you want to create an empty text file called MyApp.API.nuspec.
  3. In each of these .nuspec files paste in the following template:
    <?xml version="1.0"?>
    <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>Sample.Web</id>
        <title>Your Web Application</title>
        <version>1.0.0</version>
        <authors>Your name</authors>
        <owners>Your name</owners>
        <licenseUrl>http://yourcompany.com</licenseUrl>
        <projectUrl>http://yourcompany.com</projectUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>A sample project</description>
        <releaseNotes>This release contains the following changes...</releaseNotes>
    </metadata>
    </package>
    
  4. Customize the template for each of your projects.
  5. Update TeamCity to add /p:RunOctoPack=true to the msbuild command line
  6. Publish your packages with the following msbuild arguments:
    • /p:OctoPackPublishPackageToHttp=http://your.octopusserver.com/nuget/packages
    • /p:OctoPackPublishApiKey=API-ABCDEFGMYAPIKEY

You may have to play around a bit, but essentially the above is taken from this article so treat that as your bible.

| improve this answer | |
0

I managed to resolve this by installing the Nuget package Octopack on the projects that I wanted to be deployed as either separate websites or website applications.

In this context, I installed Octopack to the 3 projects in green squares and checked-in the changes. Then on the Octopus Deploy side, I created 3 separate IIS deploy steps and just followed the typical steps. Octopus deploy now receives a NuGet package from TeamCity using the Octopus deploy plugin, Octopack build step, from there Octopus deploy has 3 IIS deploy steps, one for the main website and 2 for the website applications, each was given a custom directory path but after I had installed the Octopack NuGet packages into the appropriate projects in the solution through Visual Studio it was smooth sailing just using the general user-guide and tutorial videos.

@richard slater - Thank-you for letting me know about Octopack, this was one of the key missing pieces that I needed.

TLDR - If you want to deploy projects in a solution as separate websites, install the Octopus Deploy plugin to TeamCity and follow the basic tutorials, add the Octopack NuGet package to the projects you want as separate websites or web applications, set-up the Octopack step to push to Octopus Deploy over the API and use IIS steps in Octopus Deploy and you should be golden.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.