Skip to content

Instantly share code, notes, and snippets.

@crizstian
Created September 9, 2022 18:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save crizstian/6558fa2b751dd2c79b5599d582424f9e to your computer and use it in GitHub Desktop.
Save crizstian/6558fa2b751dd2c79b5599d582424f9e to your computer and use it in GitHub Desktop.
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment