Skip to content

Instantly share code, notes, and snippets.

@crizstian
Created September 9, 2022 18:04
Show Gist options
  • Select an option

  • Save crizstian/6558fa2b751dd2c79b5599d582424f9e to your computer and use it in GitHub Desktop.

Select an option

Save crizstian/6558fa2b751dd2c79b5599d582424f9e to your computer and use it in GitHub Desktop.

Revisions

  1. crizstian created this gist Sep 9, 2022.
    121 changes: 121 additions & 0 deletions install website IIS
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,121 @@
    harnessApiVersion: '1.0'
    type: SSH
    commandUnitType: INSTALL
    commandUnits:
    - artifactVariableName: artifact
    commandUnitType: DOWNLOAD_ARTIFACT
    deploymentType: SSH
    name: Download Artifact
    scriptType: POWERSHELL
    workingDirectory: ${DownloadDirectory}
    - command: "$serviceName=\"${ServiceName}\"\n\n$releaseId=\"${ReleaseNo}\"\n\n$artifactFilename = \"${DownloadDirectory}\" + \"\\\" + \"${artifact.fileName}\"\n\n$appPhysicalDirectory=\"${AppPhysicalDirectory}\" + \"\\Artifacts\\\" + $serviceName\n\nRemove-Item –path $appPhysicalDirectory -Force\n\n# Summary\n\nWrite-Host \"Service: ${serviceName}\"\nWrite-Host \"releaseId: ${ReleaseNo}\"\nWrite-Host \"artifactFilename: $artifactFilename\"\nWrite-Host \"appPhysicalDirectory: $appPhysicalDirectory\"\n\n\n$isFolderService = Test-Path -Path $artifactFilename -PathType Container\n\nif ($isFolderService)\n{\n Write-Host \"Service folder already exist, skipping...\"\n \n}\nelse{\n New-Item -Path \"${AppPhysicalDirectory}\\Artifacts\\\" -Name ${serviceName} -ItemType \"directory\"\n}\n\n\n# Check if artifact is File or Folder structure\n$isFile = Test-Path -Path $artifactFilename -PathType Leaf\n$isFolder = Test-Path -Path $artifactFilename -PathType Container\n\n if ($isFile -and ([IO.Path]::GetExtension($artifactFilename) -eq \".zip\" ))\n{\n Write-Host \"Extracting package from\" $artifactFilename \"to\" $appPhysicalDirectory\n Expand-Archive -Path $artifactFilename -DestinationPath $appPhysicalDirectory -Force\n}\nelse\n{\n Write-Host \"Artifact type is not a zip file. Skipping extract.\"\n}\nif ($isFolder)\n{\n Write-Host \"Copying folder from\" $artifactFilename \"to\" $appPhysicalDirectory\n Copy-Item -Path $artifactFilename -Filter \"*.*\" -Recurse -Destination $appPhysicalDirectory -Container\n}\n\n\n\nWrite-Host \"Done.\""
    commandUnitType: EXEC
    deploymentType: SSH
    name: Expand Artifacts
    scriptType: POWERSHELL
    workingDirectory: C:/Artifacts
    - command: ls
    commandUnitType: EXEC
    deploymentType: SSH
    name: List Files
    scriptType: POWERSHELL
    workingDirectory: C:\inetpub\wwwroot\Artifacts\
    - commandUnitType: COPY_CONFIGS
    deploymentType: SSH
    destinationParentPath: ${DownloadDirectory}
    name: Copy Configs
    - command: |-
    $releaseId="${ReleaseNo}"
    $serviceName="${ServiceName}"
    $appPhysicalDirectory="${AppPhysicalDirectory}" + "\Artifacts\" + $serviceName

    Write-Host "Release ID:" ${releaseId}
    Write-Host "Service Name:" ${serviceName}
    Write-Host "appPhysicalDirectory:" ${appPhysicalDirectory}


    # Copy configs to application directory
    $userProfile = "$env:userprofile"
    Copy-Item -Path "$userProfile\\${app.name}\\${serviceName}\\${env.name}\\runtime\\*.config" -Destination $appPhysicalDirectory -Force

    Import-Module WebAdministration

    $AppPoolName = "${AppPoolName}"
    $AppPoolDotNetVersion = "${AppPoolDotNetVersion}"

    if (!(Test-Path IIS:\AppPools\$AppPoolName -pathType container))
    {
    Write-Host "Creating AppPool:" $AppPoolName
    $appPool = New-Item IIS:\AppPools\$AppPoolName
    }
    else
    {
    Write-Host "Updating AppPool:" $AppPoolName
    $appPool = Get-Item IIS:\AppPools\$AppPoolName
    }

    $appPool | Set-ItemProperty -Name "managedRuntimeVersion" -Value $AppPoolDotNetVersion

    Get-Item IIS:\AppPools\$AppPoolName | ft
    Write-Host "Done."
    commandUnitType: EXEC
    deploymentType: SSH
    name: Create AppPool
    scriptType: POWERSHELL
    - command: |-
    Import-Module WebAdministration

    $releaseId="${ReleaseNo}"
    $SiteName = "${ServiceName}"
    $SitePhysicalDirectory = "${AppPhysicalDirectory}" + "\Artifacts\" + $SiteName
    $AppPoolName = "${AppPoolName}"

    if (!(Test-Path IIS:\Sites\$SiteName -pathType container))
    {
    $site = New-Item IIS:\Sites\$SiteName -physicalPath $sitePhysicalDirectory -bindings @{protocol="${SiteProtocol}";bindingInformation=":"+ "${SitePort}" +":"+ "${SiteHostName}"} -ApplicationPool $AppPoolName -AutoStart $true
    Write-Host "Created Website:" $SiteName
    }
    else
    {
    $site = Get-Item IIS:\Sites\$SiteName
    $Site | Set-ItemProperty -Name "physicalPath" -Value $sitePhysicalDirectory
    $Site | Set-ItemProperty -Name "bindings" -Value @{protocol="${SiteProtocol}";bindingInformation=":"+ "${SitePort}" +":"+ "${SiteHostName}"}
    Write-Host "Updated Website:" $SiteName
    }

    Start-WebSite $SiteName
    Get-Item IIS:\Sites\$SiteName
    Write-Host "Done."
    commandUnitType: EXEC
    deploymentType: SSH
    name: Create Website
    scriptType: POWERSHELL
    variables:
    - description: ReleaseId.
    name: ReleaseNo
    - description: Service Name
    name: ServiceName
    - description: Default Application Pool
    name: AppPoolName
    value: DefaultAppPool
    - description: Application pool DotNet Version
    name: AppPoolDotNetVersion
    value: v4.0
    - description: Download Directory
    name: DownloadDirectory
    value: $env:TEMP
    - description: App Physical Base Directory
    name: AppPhysicalDirectory
    value: $env:SYSTEMDRIVE
    - description: Site Protocol
    name: SiteProtocol
    value: http
    - description: Site Port
    name: SitePort
    value: '80'
    - description: Site Host Name
    name: SiteHostName
    value: '*'
    - name: serviceName"
    - name: serviceName
    - name: releaseId