Jenkins DSC Get Dependancies
# Configure Environment $ErrorActionPreference = 'Stop' Set-Location -Path $env:WORKSPACE # Initialize variables [string[]]$detectedmodules = @() [string[]]$stagedmodules = @() [string[]]$ignoremodules = "PSDesiredStateConfiguration" [string]$modulespath = 'C:\Program Files\WindowsPowerShell\DscService\Modules' write-warning -Message "This script does not upgrade existing modules. Please test your scripts with modules already installed on the pull server." Write-Output "Checking for Internal NuGet repository" If (Get-PSRepository -Name mynuget -ErrorAction SilentlyContinue) { write-output "Internal NuGet respository already registered." } else { write-output "Registering Internal NuGet repository..." Register-PSRepository -Name MyNuGet -SourceLocation http://nuget.Internal.com/nuget/ -PublishLocation http://nuget.internal.com/nuget/package/ -ScriptSourceLocation http://nuget.internal.com/nuget/items/psscript/ -ScriptPublishLocation http://nuget.internal.com/nuget/package/ -InstallationPolicy Trusted -PackageManagementProvider NuGet -ErrorAction Stop | Out-Null } write-output "Importing NuGet package provider..." Import-PackageProvider -Name NuGet -Force -ForceBootstrap -ErrorAction Stop | Out-Null write-output "Setting PSModulePath..." $env:PSModulePath = 'C:\Program Files\WindowsPowerShell\Modules;C:\Program Files (x86)\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules' Write-Output "Detecting required modules..." Get-Content -Path ".\$($env:ConfigName).ps1" | Where-Object { $_ -match '(import-dscresource\s+)' } | ForEach-Object { $detectedmodules += $_.ToString().Trim().Split(" ") | Select-Object -Last 1 } $detectedmodules = $detectedmodules | Where-Object { $_ -notcontains $ignoremodules } Write-Output "Getting currently staged modules..." Get-ChildItem -Path $modulespath -Filter *.zip | ForEach-Object { $stagedmodules += $_.Name.ToString().Trim().Split("_")[0] } Write-Output "Checking for modules in the Jenkins server's powershell library..." foreach ($detectedmodule In $detectedmodules) { write-output "Checking for $detectedmodule..." $checkmod = Get-DscResource -Module $detectedmodule -ErrorAction Stop -WarningAction SilentlyContinue If ($checkmod) { write-output "$detectedmodule already installed." } else { Write-Output "Installing $detectedmodule..." Install-Module -Name $detectedmodule -Repository mynuget -ErrorAction Stop } } Write-Output "Identifying modules missing from the pullserver repository..." $missingmodules = $detectedmodules | Where-Object { $stagedmodules -NotContains $_ } foreach ($missingmodule In $missingmodules) { Write-Output "Downloading $missingmodule..." Save-Module -Name $missingmodule -Path . -ErrorAction Stop Write-Output "Unhiding files to enable compression..." Get-ChildItem -path ".\$missingmodule\$version\*" -force -Recurse | Where-Object { $_.Attributes -match "hidden" } | ForEach-Object { $_.Attributes = "" } Write-Output "Compressing module..." $version = (Get-ChildItem -Path ".\$missingmodule").Name $archive = '.\' + $missingmodule + '_' + $version + '.zip' Compress-Archive -Path ".\$missingmodule\$version\*" -DestinationPath $archive -ErrorAction Stop Write-Output "Creating checksum..." New-DscChecksum -Path $archive -OutPath . -ErrorAction Stop write-output "Copying modules to module share..." Copy-Item -Path $archive -Destination $modulespath -ErrorAction Stop write-output "Copying checksum to module share..." Copy-Item -Path "$archive.checksum" -Destination $modulespath -ErrorAction Stop }
Document Actions