microsoft / finops-toolkit

Tools and resources to help you adopt and implement FinOps capabilities that automate and extend the Microsoft Cloud.
https://aka.ms/finops/toolkit
MIT License
269 stars 87 forks source link

Deploy-FinOpsHub throws "Cannot bind argument to parameter 'Path' because it is null" when ran from Azure Devops agent #665

Open erose96 opened 4 months ago

erose96 commented 4 months ago

πŸ› Problem

Deploy-FinOpsHub throws the error "Cannot bind argument to parameter 'Path' because it is null" when ran in an Azure Devops pipeline. I think this is caused by the $env:temp call the function makes which Azure Devops agents seem to have an issue with.

πŸ‘£ Repro steps

  1. Create an AzurePowershell@5 Azure Devops task that installs and imports the FinOpsToolkit pwsh module
  2. Add a Deploy-FinOpsHub call to the script
  3. See the error

πŸ€” Expected

Should attempt to resolve a different path if $env:temp returns $null.

ℹ️ Additional context

Azure Devops task I am using:

        - task: AzurePowerShell@5
            displayName: 'Deploy TSC FinOps Hub'
            inputs:
              azureSubscription: $(Subscription)
              pwsh: true
              azurePowershellVersion: LatestVersion
              ScriptType: 'InlineScript'
              Inline: |
                Write-Output "Installing FinOps Toolkit pwsh module"
                Install-Module -Name FinOpsToolkit -Force -Confirm:$false
                Import-Module -Name FinOpsToolkit
                $version = "${{ parameters.Version }}"
                $name = "$(ResourcesNames)"
                $resourceGroup = "$(ResourceGroup)"
                Deploy-FinOpsHub `
                  -Name $name `
                  -ResourceGroup $resourceGroup `
                  -Location "eastus" `
                  -Preview:$true `
                  -Version $version
                Write-Output "Deployment complete"

My current workaround is to add the following at the beginning of the inline script:

                [Environment]::SetEnvironmentVariable("temp", "/home/vsts/work/_temp/")

πŸ™‹β€β™€οΈ Ask for the community

Let me know if others can reproduce this, especially with GitHub Actions whose runners images are built from the same Dockerfiles as the Azure Devops agents.

We could use your help:

  1. Please vote this issue up (πŸ‘) to prioritize it.
  2. Leave comments to help us solidify the vision.
flanakin commented 2 months ago

@erose96 Deploy-FinOpsHub downloads the specified release from GitHub, which is why it's using $env:temp. According to Copilot, this should be supported πŸ€” That said, we could add a property to allow specifying a temp folder using something like $(Agent.TempDirectory). Would that work?

flanakin commented 2 months ago

Another option could be to hardcode the template in the PowerShell module. This might work for the latest release, but I don't think we'd want to do that for historical releases. Just a thought.