user3067684
user3067684

Reputation: 1258

Azure pipeline - unzip artefact, copy one directory into Azure blob store YAML file

I am getting stuck with Azure pipelines.

I have an existing node SPA project that needs built for each environment (TEST and PRODUCTION). This i can do, but need to have a manual step when pushing to PROD. I am using Azure Dev-op pipeline environments with Approval and Checks to mandate this.

The issue is using a 'deploy job' to take an artefact from a previous step I am unable to find the right directory. This is my YAML file have so far:

variables:
# Agent VM image name
  vmImageName: 'ubuntu-latest'

trigger:
- master

# Don't run against PRs
pr: none

stages:
- stage: Development
  displayName: Devlopment stage
  jobs:  
  - job: install
    displayName: Install and test
    pool:
      vmImage: $(vmImageName)
      
    steps:
    - task: NodeTool@0
      inputs:
        versionSpec: '12.x'
      displayName: 'Install Node.js'
    
    - script: |
        npm install
      displayName: Install node modules

    - script: |
        npm run build
      displayName: 'Build it'
# Build creates a ./dist folder. The contents will need to be copied to blob store 
      
    - task: ArchiveFiles@2
      inputs:
        rootFolderOrFile: '$(Build.BinariesDirectory)'
        includeRootFolder: true
        archiveType: 'zip'
        archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
        replaceExistingArchive: true
        verbose: true
  
  - deployment: ToDev
    environment: development
    dependsOn: install
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@2
            inputs:
              buildType: 'current'
              targetPath: '$(Pipeline.Workspace)'
          - task: ExtractFiles@1
            inputs:
              archiveFilePatterns: '**/*.zip'
              cleanDestinationFolder: true
              destinationFolder: './cpDist/'

# Somehow within a deploy job retrieve the .zip artefact, unzip, copy the ./dist folder into the blob store

          - task: AzureCLI@2
            inputs:
              azureSubscription: MYTEST-Development
              scriptLocation: "inlineScript"
              scriptType: "bash"
              inlineScript: |
                az storage blob upload-batch -d \$web --account-name davey -s dist --connection-string 'DefaultEndpointsProtocol=https;AccountName=davey;AccountKey=xxxxxxx.yyyyyyyyy.zzzzzzzzzz;EndpointSuffix=core.windows.net'
            displayName: "Copy build files to Development blob storage davey"

          - script: |
              pwd
              ls
              cd cpDist/
              pwd
              ls -al
            displayName: 'list'
          
          - bash: echo "Done"

Upvotes: 3

Views: 4694

Answers (1)

PatrickLu-MSFT
PatrickLu-MSFT

Reputation: 51083

If you are confused with the folder path, you could add few debug steps to check the location of know system variables to understand what was going on using a powershell script as below:

- task: PowerShell@2
  displayName: 'Degug parameters'
  inputs:
    targetType: Inline
    script: |
      Write-Host "$(Build.ArtifactStagingDirectory)"
      Write-Host "$(System.DefaultWorkingDirectory)"
      Write-Host "$(System.ArtifactsDirectory)"
      Write-Host "$(Pipeline.Workspace)"
      Write-Host "$(System.ArtifactsDirectory)"

You should simply publish the build generated artifacts to drop folder.

Kindly check this official doc -- Artifact selection , in there is explaining that you can define the path which to download the artifacts to with the following task:

steps:
- download: none
- task: DownloadPipelineArtifact@2
  displayName: 'Download Build Artifacts'
  inputs:
    patterns: '**/*.zip'
    path: '$(Build.ArtifactStagingDirectory)'

Please be aware that the download happens automatically to $(Pipeline.Workspace), so if you don’t want you deployment to download the files twice, you need to specify the “download: none” in your steps.

Upvotes: 3

Related Questions