Execute PnP Powershell using Azure DevOps Pipeline

Introduction

Azure DevOps promotes collaboration between development and operation to faster and more reliable software delivery. 

In this article, I am going to demonstrate, How to automate & execute the PnP Powershell using Azure DevOps Pipeline. Let's get started with the below steps.

Step 1. Create Azure DevOps Repository

  • Navigate to https://dev.azure.com and log in with your valid credentials.
  • Select the Organization & Navigate to Repo to create a new repository. (Note, we can use the existing repository also).
  • Create a repository with the name PNP Powershell and click save.
  • Once it's saved, Created Repository and README.md file will appear as per the below screenshots. 

Create Azure DevOps Repository

Step 2. Configure the YAML pipeline 

Select the Pipeline from the left-hand side and then select the Azure Repos Git i.e. (free private Git Repositories).

Select Azure Git

Select the respective created repository (as we created earlier with the name PNPPowershell).

Select Repo

Next step with configuration, Do select "Starter pipeline"

Start Pipeline 

The YAML file will get generated with the below sample code.

YAML

Step 3. Create & Upload the PnP PowerShell

PnP PowerShell Code snippet to display the Site Title & credentials is parameterized. It is always a best practice to store the credentials as managed identity or user library group, which exists under pipeline sections. 

param (
[Parameter()]
[string]$UserName, 
[Parameter()]
[SecureString]$Password
)

# Site URL, It can be parametrize also
$SiteURL= "https://mittal1201.sharepoint.com/sites/commsitehub"

#$SecurePassword = ConvertTo-SecureString -String $Password -AsPlainText -Force
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist ($UserName, $Password)

#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credential $Cred

#Get the Root Web
$Web = Get-PnPWeb
 
#Get the Site Title
Write-host -f Green "Site Title " $Web.Title

If you have mapped the repo with a local machine, then desired IDE can be used, such as Visual Code, to do check-in & check-out. As part of this demo, I directly uploaded this file with the below click.

  • Select vertical dots against the Repo name.
  • Browse the ps1 file and click save.
  • SiteTitle.ps1 file start appearing parallel to the .yml file.

Upload PS1

Step 4. Add Credentials to Pipeline

  • Select the Library section under Pipelines & choose variable groups
  • Give the desired name to the variable group, i.e. credentials
  • Add variable as Key-Value pair
    • username: email id
    • password: **** (lock it)

Add CRED

Step 5. Add YML file task 

  • The variable used to get detail from Library defined value at run time.
  • The steps consist of two tasks
    • Install PNP Powershell within the current user context.
    • Execute the PnP Powershell with defined credentials into the variable.
# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml

trigger:
- main

pool:
  vmImage: ubuntu-latest

variables:
 - group: Credentials
 - name: user_name
   value: $(username)
 - name: pass_word
   value: $(password)


steps:
- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: 'Install-Module -Name PnP.PowerShell -Scope CurrentUser -Force'

- task: PowerShell@2
  displayName: 'PowerShell Script'
  inputs:
    targetType: filePath
    filePath: ./SiteTitle.ps1
    arguments: '-username "$(user_name)" -password $(ConvertTo-SecureString "$(pass_word)" -AsPlainText -Force)'

Step 6. Create and Execute Pipeline 

Select Pipeline and click on Run Pipeline.

Under Run pipeline, choose the branch under which yml file exists. 

Click Run to execute.

Run Pipeline

Output

Once the Pipeline execution is complete and we extend the script section under the job, and we can see Site Title has been printed.

Pipeline

So this is the secure & automated way to execute the PNP Powershell using Azure DevOps Pipeline. Hope you have learned something new and refreshing in this article.


Similar Articles