Forum Discussion

safalkishore's avatar
safalkishore
Microsoft Employee
6 years ago
Solved

Automate PBIVIZ Cert Create and Install on Azure Devops CI/CD

In order to package a custom visual we need to run the below command :   pbiviz package   However a pre-requisite to this is the --create-cert and --install-cert steps.   Is it possible to auto...
  • safalkishore's avatar
    6 years ago

    We were able to automate the same on Azure Devops using the usual NPM tasks. However the trick here was 'install the certificate' and using powershell 'to import this on the cert store' before packaging and generating the *.pbiviz file.

     

    Sample YAML file for reference - 

     

    pool:
    name: Azure Pipelines
    steps:
    - task: NodeTool@0
    displayName: 'Use Node 10.x'
    inputs:
    versionSpec: 10.x
    checkLatest: true

    - task: Npm@1
    displayName: 'npm install'
    inputs:
    workingDir: '$(System.DefaultWorkingDirectory)'
    verbose: false

    - task: Npm@1
    displayName: 'npm test'
    inputs:
    command: custom
    workingDir: '$(System.DefaultWorkingDirectory)'
    verbose: false
    customCommand: 'run test -- --reporter mocha-junit-reporter'
    enabled: false

    - task: Npm@1
    displayName: 'npm install pbiviz'
    inputs:
    command: custom
    workingDir: '$(System.DefaultWorkingDirectory)'
    verbose: false
    customCommand: 'install -g powerbi-visuals-tools'

    - task: Npm@1
    displayName: 'npm install cert'
    inputs:
    command: custom
    workingDir: '$(System.DefaultWorkingDirectory)'
    verbose: false
    customCommand: 'run cert'

    - powershell: |
    $ExtensionFile = "C:\npm\prefix\node_modules\powerbi-visuals-tools\config.json"

    $jsondata = Get-Content -Raw -Path $ExtensionFile | ConvertFrom-Json

    CERTUTIL -f -p $jsondata.server.passphrase -importpfx “C:\npm\prefix\node_modules\powerbi-visuals-tools\certs\PowerBICustomVisualTest_public.pfx”
    displayName: 'PowerShell Script - Import Pfx to Trusted Root '

    - task: Npm@1
    displayName: 'npm package'
    inputs:
    command: custom
    workingDir: '$(System.DefaultWorkingDirectory)'
    verbose: false
    customCommand: 'run package'

    - task: PublishBuildArtifacts@1
    displayName: 'Publish artifacts: drop'
    inputs:
    PathtoPublish: dist

    - task: PublishCodeCoverageResults@1
    displayName: 'Publish code coverage'
    inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(Build.SourcesDirectory)/coverage/cobertura-coverage.xml'
    reportDirectory: '$(Build.SourcesDirectory)/coverage/'
    enabled: false

    - task: PublishTestResults@2
    displayName: 'Publish Test Results **/test-results.xml'
    inputs:
    testResultsFiles: '**/test-results.xml'
    enabled: false
    a